pomerium/pkg/grpc/databroker/databroker.proto
Caleb Doxsey 994faba0c8
databroker: add support for query filtering (#3369)
* wip

* storage: add filtering to SyncLatest

* don't increment the record version, so intermediate changes are requested

* databroker: add support for query filtering

* fill server and record version

* add test checks

* add explanation to query filter error
2022-05-19 09:07:32 -06:00

122 lines
3.5 KiB
Protocol Buffer

syntax = "proto3";
package databroker;
option go_package = "github.com/pomerium/pomerium/pkg/grpc/databroker";
import "google/protobuf/any.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";
message Record {
uint64 version = 1;
string type = 2;
string id = 3;
google.protobuf.Any data = 4;
google.protobuf.Timestamp modified_at = 5;
google.protobuf.Timestamp deleted_at = 6;
}
message Versions {
// the server version indicates the version of the server storing the data
uint64 server_version = 1;
uint64 latest_record_version = 2;
}
// Options are the options for a type stored in the databroker.
message Options {
// capacity sets a maximum size for the given type. Once the capacity is
// reached the oldest records will be removed.
optional uint64 capacity = 1;
}
message GetRequest {
string type = 1;
string id = 2;
}
message GetResponse { Record record = 1; }
message QueryRequest {
string type = 1;
string query = 2;
int64 offset = 3;
int64 limit = 4;
google.protobuf.Struct filter = 5;
}
message QueryResponse {
repeated Record records = 1;
int64 total_count = 2;
uint64 server_version = 3;
uint64 record_version = 4;
}
message PutRequest { repeated Record records = 1; }
message PutResponse {
uint64 server_version = 1;
repeated Record records = 2;
}
message SetOptionsRequest {
string type = 1;
Options options = 2;
}
message SetOptionsResponse { Options options = 1; }
message SyncRequest {
uint64 server_version = 1;
uint64 record_version = 2;
}
message SyncResponse { Record record = 1; }
message SyncLatestRequest { string type = 1; }
message SyncLatestResponse {
oneof response {
Record record = 1;
Versions versions = 2;
}
}
message AcquireLeaseRequest {
// Name is the name of the lease. Only a single client can hold the lease on
// the specified name at any one time.
string name = 1;
// Duration is the duration of the lease. After the duration is reached the
// lease can be acquired by other clients.
google.protobuf.Duration duration = 2;
}
message AcquireLeaseResponse {
// Id is the id of the acquired lease. Subsequent calls to release or renew
// will need both the lease name and the lease id.
string id = 1;
}
message ReleaseLeaseRequest {
string name = 1;
string id = 2;
}
message RenewLeaseRequest {
string name = 1;
string id = 2;
google.protobuf.Duration duration = 3;
}
// The DataBrokerService stores key-value data.
service DataBrokerService {
// AcquireLease acquires a distributed mutex lease.
rpc AcquireLease(AcquireLeaseRequest) returns (AcquireLeaseResponse);
// Get gets a record.
rpc Get(GetRequest) returns (GetResponse);
// Put saves a record.
rpc Put(PutRequest) returns (PutResponse);
// Query queries for records.
rpc Query(QueryRequest) returns (QueryResponse);
// ReleaseLease releases a distributed mutex lease.
rpc ReleaseLease(ReleaseLeaseRequest) returns (google.protobuf.Empty);
// RenewLease renews a distributed mutex lease.
rpc RenewLease(RenewLeaseRequest) returns (google.protobuf.Empty);
// SetOptions sets the options for a type in the databroker.
rpc SetOptions(SetOptionsRequest) returns (SetOptionsResponse);
// Sync streams changes to records after the specified version.
rpc Sync(SyncRequest) returns (stream SyncResponse);
// SyncLatest streams the latest version of every record.
rpc SyncLatest(SyncLatestRequest) returns (stream SyncLatestResponse);
}