photoncloud-monorepo/flaredb/crates/flaredb-proto/src/kvrpc.proto
centra 8f94aee1fa Fix R8: Convert submodule gitlinks to regular directories
- 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>
2025-12-09 16:51:20 +09:00

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
}