feat(localdb): localdb_sync.v1 wire contract
This commit is contained in:
@@ -1,9 +1,52 @@
|
|||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package localdb_sync.v1;
|
package localdb_sync.v1;
|
||||||
|
|
||||||
option csharp_namespace = "ZB.MOM.WW.LocalDb.Contracts";
|
option csharp_namespace = "ZB.MOM.WW.LocalDb.Contracts";
|
||||||
|
|
||||||
// Placeholder service. The real replication contract is defined in a later task.
|
// One long-lived bidirectional stream carries BOTH directions of replication.
|
||||||
service LocalDbSync {
|
service LocalDbSync {
|
||||||
|
rpc Sync (stream SyncMessage) returns (stream SyncMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message SyncMessage {
|
||||||
|
oneof msg {
|
||||||
|
Handshake handshake = 1; // first message each direction
|
||||||
|
HandshakeAck handshake_ack = 2;
|
||||||
|
DeltaBatch delta_batch = 3;
|
||||||
|
DeltaAck delta_ack = 4;
|
||||||
|
SnapshotBegin snapshot_begin = 5; // sender switches to snapshot mode
|
||||||
|
SnapshotBatch snapshot_batch = 6;
|
||||||
|
SnapshotComplete snapshot_complete = 7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
message Handshake {
|
||||||
|
string node_id = 1;
|
||||||
|
uint32 lib_schema_version = 2;
|
||||||
|
repeated TableDigest tables = 3; // fail-closed on any mismatch
|
||||||
|
int64 last_applied_remote_seq = 4; // highest of YOUR oplog seqs I have applied
|
||||||
|
}
|
||||||
|
message TableDigest { string table_name = 1; string digest = 2; }
|
||||||
|
message HandshakeAck { string node_id = 1; bool snapshot_required = 2; }
|
||||||
|
|
||||||
|
message OplogEntry {
|
||||||
|
int64 seq = 1;
|
||||||
|
string table_name = 2;
|
||||||
|
string pk_json = 3;
|
||||||
|
optional string row_json = 4; // absent => tombstone
|
||||||
|
int64 hlc = 5; // UTC-based HLC (physical ms << 16 | counter)
|
||||||
|
string node_id = 6;
|
||||||
|
bool is_tombstone = 7;
|
||||||
|
}
|
||||||
|
message DeltaBatch { repeated OplogEntry entries = 1; }
|
||||||
|
message DeltaAck { int64 applied_thru_seq = 1; }
|
||||||
|
|
||||||
|
message SnapshotBegin { int64 as_of_seq = 1; }
|
||||||
|
message SnapshotBatch { string table_name = 1; repeated SnapshotRow rows = 2; }
|
||||||
|
message SnapshotRow {
|
||||||
|
string pk_json = 1;
|
||||||
|
optional string row_json = 2;
|
||||||
|
int64 hlc = 3;
|
||||||
|
string node_id = 4;
|
||||||
|
bool is_tombstone = 5;
|
||||||
|
}
|
||||||
|
message SnapshotComplete { int64 as_of_seq = 1; }
|
||||||
|
|||||||
Reference in New Issue
Block a user