Cut 4 Soul 4c: committed-unlogged wire writes, database serves only what it owns, typed unowned refusal
Q1: HandlePutAsync/HandleDeleteAsync catch a CultNetShardLogException (or an AggregateException holding one) before the generic catch and answer nothing: the write committed and was published, so the peer is not told it was refused. It is logged at warning level. The wire has no committed-with-degraded-log message. Q2: GetAsync/GetAll/GetByName/GetByIndex, the shard-less snapshot, the selection and the subscription snapshot serve only rows a shard owns, so read and watch agree; the CultMesh collections follow through GetAll, and the Mesh untyped variant fallback checks ownership. The raw cache still holds everything. Q3: a replica log apply skips a row its shard does not own, as the snapshot path does, and still records the entry so a chained replica sees no gap. API: rowFilter is internal (public CreateSelectionResponse and CreateRawSnapshotResponse signatures restored, internal overloads added); exception tags on the write methods; Commit's unwrap rule is XML doc; the unowned refusal answers on the wire with code unowned_schema (schema enum in both copies, Rust CultNetErrorCode, CultNetErrorMessage.ForUnownedSchema) and put and delete log it at warning level. Dispose keeps journal-first; a test now fails if the observer goes first. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
396cccafd4
commit
557e70fd03
12 changed files with 467 additions and 37 deletions
|
|
@ -421,7 +421,8 @@ namespace GameCult.Networking
|
|||
documentSelection,
|
||||
ordinalOf: (schemaId, key) => _database.LastWriteSequence(schemaId, key) ?? 0,
|
||||
asOf: _database.CurrentAsOf(),
|
||||
options: null);
|
||||
options: null,
|
||||
rowFilter: _database.Owns);
|
||||
// The snapshot is one row per record key by construction, so the duplicate-key throw this
|
||||
// used to guard can no longer fire (docs/cultnet-selection-cut.md, S2-2); deleted rather
|
||||
// than tested around.
|
||||
|
|
|
|||
Loading…
Reference in a new issue