- Remove gitlinks (160000 mode) for chainfire, flaredb, iam - Add workspace contents as regular tracked files - Update flake.nix to use simple paths instead of builtins.fetchGit This resolves the nix build failure where submodule directories appeared empty in the nix store. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
123 lines
2.9 KiB
Protocol Buffer
123 lines
2.9 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package kvrpc;
|
|
|
|
// Raw (Eventual Consistency) Operations
|
|
service KvRaw {
|
|
rpc RawPut(RawPutRequest) returns (RawPutResponse);
|
|
rpc RawGet(RawGetRequest) returns (RawGetResponse);
|
|
rpc RawScan(RawScanRequest) returns (RawScanResponse);
|
|
rpc RawDelete(RawDeleteRequest) returns (RawDeleteResponse);
|
|
}
|
|
|
|
message RawPutRequest {
|
|
bytes key = 1;
|
|
bytes value = 2;
|
|
string namespace = 3;
|
|
}
|
|
|
|
message RawPutResponse {
|
|
bool success = 1;
|
|
}
|
|
|
|
message RawGetRequest {
|
|
bytes key = 1;
|
|
string namespace = 2;
|
|
}
|
|
|
|
message RawGetResponse {
|
|
bool found = 1;
|
|
bytes value = 2;
|
|
}
|
|
|
|
// Raw scan request (eventual consistency)
|
|
message RawScanRequest {
|
|
bytes start_key = 1; // inclusive
|
|
bytes end_key = 2; // exclusive (empty = no upper bound)
|
|
uint32 limit = 3; // max entries to return (0 = default 100)
|
|
string namespace = 4;
|
|
}
|
|
|
|
// Raw scan response
|
|
message RawScanResponse {
|
|
repeated bytes keys = 1;
|
|
repeated bytes values = 2;
|
|
bool has_more = 3; // true if more entries exist
|
|
bytes next_key = 4; // next start_key for pagination
|
|
}
|
|
|
|
message RawDeleteRequest {
|
|
bytes key = 1;
|
|
string namespace = 2;
|
|
}
|
|
|
|
message RawDeleteResponse {
|
|
bool success = 1;
|
|
bool existed = 2; // true if key existed before deletion
|
|
}
|
|
|
|
// CAS (Strong Consistency / Optimistic) Operations
|
|
service KvCas {
|
|
rpc CompareAndSwap(CasRequest) returns (CasResponse);
|
|
rpc Get(GetRequest) returns (GetResponse);
|
|
rpc Scan(ScanRequest) returns (ScanResponse);
|
|
rpc Delete(DeleteRequest) returns (DeleteResponse);
|
|
}
|
|
|
|
message CasRequest {
|
|
bytes key = 1;
|
|
bytes value = 2;
|
|
uint64 expected_version = 3; // 0 implies "create if not exists"
|
|
string namespace = 4;
|
|
}
|
|
|
|
message CasResponse {
|
|
bool success = 1;
|
|
uint64 current_version = 2; // Returns current version on failure (for retry)
|
|
uint64 new_version = 3; // Returns assigned version on success
|
|
}
|
|
|
|
message GetRequest {
|
|
bytes key = 1;
|
|
string namespace = 2;
|
|
}
|
|
|
|
message GetResponse {
|
|
bool found = 1;
|
|
bytes value = 2;
|
|
uint64 version = 3;
|
|
}
|
|
|
|
// CAS scan request (strong consistency)
|
|
message ScanRequest {
|
|
bytes start_key = 1; // inclusive
|
|
bytes end_key = 2; // exclusive (empty = no upper bound)
|
|
uint32 limit = 3; // max entries to return (0 = default 100)
|
|
string namespace = 4;
|
|
}
|
|
|
|
// Key-value with version for CAS scan
|
|
message VersionedKv {
|
|
bytes key = 1;
|
|
bytes value = 2;
|
|
uint64 version = 3;
|
|
}
|
|
|
|
// CAS scan response
|
|
message ScanResponse {
|
|
repeated VersionedKv entries = 1;
|
|
bool has_more = 2; // true if more entries exist
|
|
bytes next_key = 3; // next start_key for pagination
|
|
}
|
|
|
|
message DeleteRequest {
|
|
bytes key = 1;
|
|
uint64 expected_version = 2; // 0 implies "delete if exists" (no version check)
|
|
string namespace = 3;
|
|
}
|
|
|
|
message DeleteResponse {
|
|
bool success = 1;
|
|
uint64 current_version = 2; // Returns current version on failure (for retry)
|
|
bool existed = 3; // true if key existed before deletion
|
|
}
|