@optimystic/db-p2p 0.25.1 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cluster/cluster-repo.d.ts +47 -91
- package/dist/src/cluster/cluster-repo.d.ts.map +1 -1
- package/dist/src/cluster/cluster-repo.js +138 -200
- package/dist/src/cluster/cluster-repo.js.map +1 -1
- package/dist/src/cluster/race-resolution.d.ts +89 -0
- package/dist/src/cluster/race-resolution.d.ts.map +1 -0
- package/dist/src/cluster/race-resolution.js +140 -0
- package/dist/src/cluster/race-resolution.js.map +1 -0
- package/dist/src/cluster/record-operations.d.ts +25 -0
- package/dist/src/cluster/record-operations.d.ts.map +1 -0
- package/dist/src/cluster/record-operations.js +56 -0
- package/dist/src/cluster/record-operations.js.map +1 -0
- package/dist/src/cohort-topic/host.d.ts +133 -51
- package/dist/src/cohort-topic/host.d.ts.map +1 -1
- package/dist/src/cohort-topic/host.js +290 -83
- package/dist/src/cohort-topic/host.js.map +1 -1
- package/dist/src/libp2p-node-base.d.ts +7 -4
- package/dist/src/libp2p-node-base.d.ts.map +1 -1
- package/dist/src/libp2p-node-base.js +5 -5
- package/dist/src/libp2p-node-base.js.map +1 -1
- package/dist/src/storage/block-latch.d.ts +5 -4
- package/dist/src/storage/block-latch.d.ts.map +1 -1
- package/dist/src/storage/block-latch.js +5 -4
- package/dist/src/storage/block-latch.js.map +1 -1
- package/dist/src/storage/block-storage.d.ts +1 -1
- package/dist/src/storage/block-storage.d.ts.map +1 -1
- package/dist/src/storage/block-storage.js +11 -3
- package/dist/src/storage/block-storage.js.map +1 -1
- package/dist/src/storage/cached-raw-storage.d.ts +17 -1
- package/dist/src/storage/cached-raw-storage.d.ts.map +1 -1
- package/dist/src/storage/cached-raw-storage.js +8 -1
- package/dist/src/storage/cached-raw-storage.js.map +1 -1
- package/dist/src/storage/cached-store-driver.d.ts +7 -0
- package/dist/src/storage/cached-store-driver.d.ts.map +1 -1
- package/dist/src/storage/cached-store-driver.js +20 -0
- package/dist/src/storage/cached-store-driver.js.map +1 -1
- package/dist/src/storage/i-block-storage.d.ts +45 -2
- package/dist/src/storage/i-block-storage.d.ts.map +1 -1
- package/dist/src/storage/i-block-storage.js +29 -0
- package/dist/src/storage/i-block-storage.js.map +1 -1
- package/dist/src/storage/i-raw-storage.d.ts +16 -0
- package/dist/src/storage/i-raw-storage.d.ts.map +1 -1
- package/dist/src/storage/kv-raw-storage.d.ts +5 -1
- package/dist/src/storage/kv-raw-storage.d.ts.map +1 -1
- package/dist/src/storage/kv-raw-storage.js +8 -1
- package/dist/src/storage/kv-raw-storage.js.map +1 -1
- package/dist/src/storage/raw-store-driver.d.ts +15 -0
- package/dist/src/storage/raw-store-driver.d.ts.map +1 -1
- package/dist/src/storage/shared-cache-pool.d.ts +5 -0
- package/dist/src/storage/shared-cache-pool.d.ts.map +1 -1
- package/dist/src/storage/shared-cache-pool.js +6 -1
- package/dist/src/storage/shared-cache-pool.js.map +1 -1
- package/dist/src/storage/storage-repo.d.ts.map +1 -1
- package/dist/src/storage/storage-repo.js +141 -99
- package/dist/src/storage/storage-repo.js.map +1 -1
- package/dist/src/storage/with-read-cache.d.ts +9 -5
- package/dist/src/storage/with-read-cache.d.ts.map +1 -1
- package/dist/src/storage/with-read-cache.js +16 -6
- package/dist/src/storage/with-read-cache.js.map +1 -1
- package/package.json +2 -2
- package/{README.md → readme.md} +2 -2
- package/src/cluster/cluster-repo.ts +187 -211
- package/src/cluster/race-resolution.ts +158 -0
- package/src/cluster/record-operations.ts +59 -0
- package/src/cohort-topic/host.ts +423 -118
- package/src/libp2p-node-base.ts +12 -9
- package/src/storage/block-latch.ts +5 -4
- package/src/storage/block-storage.ts +11 -3
- package/src/storage/cached-raw-storage.ts +21 -1
- package/src/storage/cached-store-driver.ts +23 -0
- package/src/storage/i-block-storage.ts +47 -2
- package/src/storage/i-raw-storage.ts +17 -0
- package/src/storage/kv-raw-storage.ts +8 -1
- package/src/storage/raw-store-driver.ts +26 -0
- package/src/storage/shared-cache-pool.ts +6 -1
- package/src/storage/storage-repo.ts +143 -103
- package/src/storage/with-read-cache.ts +16 -6
|
@@ -68,10 +68,14 @@ export type ExpectedClusterView = {
|
|
|
68
68
|
* Independently derive this member's own view of a block's responsible cluster. Injected so
|
|
69
69
|
* {@link ClusterMember} stays transport-agnostic — the composition root supplies it from
|
|
70
70
|
* `IKeyNetwork.findCluster` + FRET (mirroring how the coordinator derives the cluster). Absent on nodes
|
|
71
|
-
* that cannot derive a view (no FRET, unit tests): with no
|
|
71
|
+
* that cannot derive a view (no FRET, unit tests): with no capability AND no asserted
|
|
72
72
|
* {@link ClusterConsensusConfig.assumedClusterSize} the gate preserves legacy approve behavior, but an
|
|
73
|
-
* asserted size still lets the gate fail closed on an unjustified downsize.
|
|
74
|
-
*
|
|
73
|
+
* asserted size still lets the gate fail closed on an unjustified downsize.
|
|
74
|
+
*
|
|
75
|
+
* Wiring this capability also arms the record-shape refusals: a member that CAN derive refuses outright
|
|
76
|
+
* (rather than falling back) when the record names no coordinating block, or names one the record's own
|
|
77
|
+
* operations never touch — those are the sender's free choice, not this member's inability. See
|
|
78
|
+
* {@link ClusterViewDerivation} and {@link ClusterMember} admission gate.
|
|
75
79
|
*/
|
|
76
80
|
export type DeriveExpectedClusterCallback = (blockId: BlockId) => Promise<ExpectedClusterView>;
|
|
77
81
|
/** Stable reject reason a member emits when a declared peer set fails the membership admission gate. */
|
|
@@ -113,8 +117,28 @@ interface ClusterMemberComponents {
|
|
|
113
117
|
recomputeArbitratorSet?: RecomputeArbitratorSetCapability;
|
|
114
118
|
/** Member-side cluster derivation for the membership admission gate; see {@link DeriveExpectedClusterCallback}. */
|
|
115
119
|
deriveExpectedCluster?: DeriveExpectedClusterCallback;
|
|
120
|
+
/**
|
|
121
|
+
* Wall clock in unix milliseconds; defaults to `Date.now`. Injectable so a test can age a held
|
|
122
|
+
* reservation past {@link CONFLICT_STALE_THRESHOLD_MS} without sleeping. It governs BOTH sides of
|
|
123
|
+
* the reservation's `lastUpdate` — the stamp and the comparison — so the two can never end up on
|
|
124
|
+
* different time bases.
|
|
125
|
+
*
|
|
126
|
+
* NOTE: partial injection, by design. This clock reaches ONLY `lastUpdate`; `message.expiration`,
|
|
127
|
+
* the promise/resolution timeouts, the periodic expiry sweep and the executed-transaction TTL all
|
|
128
|
+
* still read the real `Date.now`. So an injected clock must share an epoch with real time (seed it
|
|
129
|
+
* from `Date.now()`, then advance) — one starting near zero makes every record look long expired
|
|
130
|
+
* via the un-injected expiration check. Widen the injection if a test needs to drive expiry too.
|
|
131
|
+
*/
|
|
132
|
+
now?: () => number;
|
|
116
133
|
}
|
|
117
134
|
export declare function clusterMember(components: ClusterMemberComponents): ClusterMember;
|
|
135
|
+
/**
|
|
136
|
+
* How long a held reservation may go untouched before the conflict scan ({@link ClusterMember.findConflict})
|
|
137
|
+
* sweeps it. Generous relative to a round-trip: the scan frees an ABANDONED coordinator's blocks, so
|
|
138
|
+
* sweeping too eagerly would drop a live transaction whose next delivery is merely in flight.
|
|
139
|
+
* Exported so a test can advance an injected clock past it without restating the number.
|
|
140
|
+
*/
|
|
141
|
+
export declare const CONFLICT_STALE_THRESHOLD_MS = 2000;
|
|
118
142
|
/**
|
|
119
143
|
* Handles cluster-side operations, managing promises and commits for cluster updates
|
|
120
144
|
* and coordinating with the local storage repo.
|
|
@@ -165,7 +189,9 @@ export declare class ClusterMember implements ICluster {
|
|
|
165
189
|
/** What a validator-configured member does with a pend carrying no `validation` payload — see
|
|
166
190
|
* {@link ClusterConsensusConfig.unvalidatablePendPolicy}. Read once, like the gate parameters. */
|
|
167
191
|
private readonly unvalidatablePendPolicy;
|
|
168
|
-
|
|
192
|
+
/** Clock behind the reservation table's `lastUpdate` — see {@link ClusterMemberComponents.now}. */
|
|
193
|
+
private readonly now;
|
|
194
|
+
constructor(storageRepo: IRepo, peerNetwork: IPeerNetwork, peerId: PeerId, privateKey: PrivateKey, protocolPrefix?: string | undefined, _partitionDetector?: PartitionDetector, fretService?: FretService | undefined, validator?: ITransactionValidator | undefined, reputation?: IPeerReputation | undefined, consensusConfig?: ClusterConsensusConfig, stateStore?: ITransactionStateStore | undefined, reconcileBlock?: ReconcileBlockCallback | undefined, onCommitCertificate?: CommitCertificateSink | undefined, onInvalidate?: InvalidationApplySink | undefined, recomputeArbitratorSet?: RecomputeArbitratorSetCapability | undefined, deriveExpectedCluster?: DeriveExpectedClusterCallback | undefined, now?: () => number);
|
|
169
195
|
/**
|
|
170
196
|
* The resolved super-majority threshold this member runs on. Exposed so the composition root can
|
|
171
197
|
* fail-fast if the member and the coordinator would run different thresholds (see the coupling
|
|
@@ -292,8 +318,16 @@ export declare class ClusterMember implements ICluster {
|
|
|
292
318
|
* 3. **Consistency with the derived view** — `|D △ E|` within `clusterSizeTolerance·|E|`; honest churn
|
|
293
319
|
* of a peer or two is absorbed, a wholesale-disjoint or half-size set is not.
|
|
294
320
|
*
|
|
295
|
-
* **
|
|
296
|
-
*
|
|
321
|
+
* **Inadmissible records come first.** Before any of that, a member that CAN derive refuses outright a
|
|
322
|
+
* record whose coordinating block is the sender's free choice rather than a fact about the record: one
|
|
323
|
+
* that names no coordinating block at all, or names a block the record's own operations never touch.
|
|
324
|
+
* Those are defects of the SENDER, and no current coordinator produces them; treating them as "cannot
|
|
325
|
+
* derive" would hand a dishonest coordinator the choice of which check every member ran. A member with
|
|
326
|
+
* no derivation capability never reaches this refusal — it has nothing to check against.
|
|
327
|
+
*
|
|
328
|
+
* **Fail-closed posture.** When the member cannot confidently derive `E` — no capability, a bound
|
|
329
|
+
* block whose lookup failed or returned an empty/low-confidence view (low FRET confidence is exactly
|
|
330
|
+
* what a partition induces) — it must refuse any *downsizing* decision — but it
|
|
297
331
|
* needs a size reference to judge "downsize" against, and it may NOT borrow `clusterSize` for that:
|
|
298
332
|
* `clusterSize` is the replication factor (what a cohort should aim for), not a claim about how many
|
|
299
333
|
* peers exist, so a small deployment configured with the default 10 would refuse every write. The
|
|
@@ -325,11 +359,13 @@ export declare class ClusterMember implements ICluster {
|
|
|
325
359
|
*/
|
|
326
360
|
private admissionFloor;
|
|
327
361
|
/**
|
|
328
|
-
* Derive this member's own view of the record's block cluster via the injected capability,
|
|
329
|
-
*
|
|
330
|
-
*
|
|
331
|
-
*
|
|
332
|
-
*
|
|
362
|
+
* Derive this member's own view of the record's block cluster via the injected capability, reporting
|
|
363
|
+
* *why* when it cannot — see {@link ClusterViewDerivation}. Four outcomes, deliberately not collapsed
|
|
364
|
+
* into one `undefined`: the member has no capability; the lookup failed; the record named no
|
|
365
|
+
* coordinating block; the record named a block its own operations never touch. The last two are the
|
|
366
|
+
* sender's choices and {@link admitMembership} refuses them; the first two are this member's own
|
|
367
|
+
* limitation and stay lenient. Derived from the record's coordinating block, the same key the
|
|
368
|
+
* coordinator used to select the cluster.
|
|
333
369
|
*
|
|
334
370
|
* Read off `record.message`, NOT a top-level record field: `messageHash` covers the message only, so
|
|
335
371
|
* only the in-message copy is tamper-evident to a relaying peer. (There is no top-level copy any more —
|
|
@@ -530,86 +566,6 @@ export declare class ClusterMember implements ICluster {
|
|
|
530
566
|
* entries are swept, and a held transaction that LOSES the race to `record` is cleared.
|
|
531
567
|
*/
|
|
532
568
|
private findConflict;
|
|
533
|
-
/** Number of *approve* promise votes on a record — the count the commit rule uses. */
|
|
534
|
-
private static approvalCount;
|
|
535
|
-
/**
|
|
536
|
-
* Resolve a race between two conflicting transactions. Total and deterministic, so every honest
|
|
537
|
-
* member computes the identical winner (the Theorem 1 Case-2 premise). Order:
|
|
538
|
-
* 1. more *approve* promise signatures wins (progress monotonicity — see safety note below);
|
|
539
|
-
* 2. equal approval counts → higher aged priority wins (fairness — see {@link recordPriority});
|
|
540
|
-
* 3. still tied → higher message hash wins.
|
|
541
|
-
*
|
|
542
|
-
* The count is APPROVALS, not `promises` keys. `promises` is the vote map — a reject occupies a key
|
|
543
|
-
* there exactly as an approve does — so counting keys would treat a rejection as progress, letting a
|
|
544
|
-
* record that can never commit outrank (and therefore block, via {@link findConflict}) a fresh rival
|
|
545
|
-
* for the whole staleness window. Approvals is also the count the invariant below actually needs:
|
|
546
|
-
* the commit rule is `approvedPromises >= superMajority`, which never looks at rejections.
|
|
547
|
-
*
|
|
548
|
-
* Approval count is FIRST so this comparison never displaces a transaction that is further along.
|
|
549
|
-
* That restores the pre-priority safety invariant: a member commits purely on promise supermajority
|
|
550
|
-
* (`handleCommitNeeded` signs whenever `approvedPromises >= superMajority`; the commit path has NO
|
|
551
|
-
* conflict re-check), so `resolveRace` is the ONLY arbiter among concurrently-pending conflicts.
|
|
552
|
-
* With approvals-first, once transaction X holds a promise supermajority every conflicting rival Y has
|
|
553
|
-
* strictly fewer approvals — Y can only match X's count by getting the intersecting quorum member to
|
|
554
|
-
* approve it, but that member already holds X at supermajority and `resolveRace(X, Y)` returns
|
|
555
|
-
* `keep-existing` on X's higher count, so it never does. By quorum intersection any Y-supermajority
|
|
556
|
-
* overlaps X's in ≥1 honest member, and that member rejects Y. One winner (docs/correctness.md
|
|
557
|
-
* Theorem 9). Priority-first would break this: it could displace an already-quorum-reached X for a
|
|
558
|
-
* higher-priority Y with fewer approvals, letting BOTH commit (split brain) — the regression fixed by
|
|
559
|
-
* ticket occ-priority-first-breaks-promise-monotonicity.
|
|
560
|
-
*
|
|
561
|
-
* Priority is now a tie-break that runs only at EQUAL approval counts, which is exactly the
|
|
562
|
-
* concurrent-starvation case aging targets (two fresh rivals, 0 promises each, otherwise coin-flipping
|
|
563
|
-
* on the hash). Priority still breaks those ties deterministically, so aging still solves the stated
|
|
564
|
-
* fairness problem in its common case. It only orders two *concurrently-pending* conflicts; it does NOT
|
|
565
|
-
* defer a fresh pend for an absent aged transaction (that residual — sequential sub-window starvation —
|
|
566
|
-
* is the deferred feat-occ-priority-reservation).
|
|
567
|
-
*
|
|
568
|
-
* NOTE: residual-fairness tripwire. Under approvals-first an aged transaction can still lose to a fresh
|
|
569
|
-
* rival that has *legitimately* gathered even one more approval — that is not the pure-coin-flip
|
|
570
|
-
* starvation aging targets (equal counts, priority wins), it is the monotonicity behaviour we WANT (a
|
|
571
|
-
* more-progressed rival is never displaced). If deeper fairness against a genuinely-more-progressed
|
|
572
|
-
* rival is ever needed, it belongs to feat-occ-priority-reservation (reserve/defer at pend time), NOT
|
|
573
|
-
* to this race tie-break.
|
|
574
|
-
*
|
|
575
|
-
* NOTE: Byzantine self-assert is a fairness DoS, not a safety hole. A coordinator can stamp
|
|
576
|
-
* priority == MaxPriority on every transaction; recordPriority clamps to the cap so it cannot
|
|
577
|
-
* exceed it, and priority never influences validity/operationsHash/stale-read checks — and now sits
|
|
578
|
-
* below the approval count, so it can only break equal-count ties it might have ~50% won anyway,
|
|
579
|
-
* degrading to at-worst-status-quo fairness (the same graceful-degradation class as spam under
|
|
580
|
-
* honest-majority). Binding priority to provable age is out of scope (feat-occ-priority-reservation).
|
|
581
|
-
*
|
|
582
|
-
* NOTE: keep priority a self-contained additive message field + this one comparison key so it
|
|
583
|
-
* composes with — does not block — a future HLC/crdt-sync redesign of this same path
|
|
584
|
-
* (design-hot-log-tail-sharding-guidance).
|
|
585
|
-
*/
|
|
586
|
-
private resolveRace;
|
|
587
|
-
/**
|
|
588
|
-
* Aged advisory priority carried by a record's pend operation, clamped to [0, MaxPriority].
|
|
589
|
-
* The multi-collection path carries it on `pend.validation.transaction.priority`; the single-collection
|
|
590
|
-
* (`Collection.sync`) path carries it as top-level `pend.priority`; a record with neither — a
|
|
591
|
-
* legacy/unversioned coordinator's transaction, or a non-pend operation — is priority 0
|
|
592
|
-
* (backward compatible: such transactions simply never age). Both carriers live inside the signed
|
|
593
|
-
* `message`, so priority is integrity-protected in transit; clamping here bounds a self-asserted
|
|
594
|
-
* out-of-range value to the cap.
|
|
595
|
-
*
|
|
596
|
-
* NOTE: `message` is fixed for a transaction's whole lifecycle (promises/commits accrue in the
|
|
597
|
-
* separate `promises`/`commits` maps, never in `message`), so a transaction keeps its rank through
|
|
598
|
-
* the commit phase — there is no "priority drops to 0 at commit" asymmetry. resolveRace is only
|
|
599
|
-
* consulted at the promise decision (findConflict), i.e. between two still-open conflicting
|
|
600
|
-
* transactions, which is exactly the concurrent-contention case priority is meant to order.
|
|
601
|
-
*/
|
|
602
|
-
private recordPriority;
|
|
603
|
-
private operationsConflict;
|
|
604
|
-
private getActionId;
|
|
605
|
-
/**
|
|
606
|
-
* Every block id the message's own operations name. Two consumers, deliberately sharing one
|
|
607
|
-
* definition: conflict detection (which writes must serialize against each other) and the membership
|
|
608
|
-
* admission gate's binding check (the set a legitimate `coordinatingBlockIds[0]` must come from —
|
|
609
|
-
* {@link ClusterMember.deriveExpectedClusterView}). If the two ever disagreed, a coordinator could
|
|
610
|
-
* name a block the record is not judged to touch.
|
|
611
|
-
*/
|
|
612
|
-
private getAffectedBlockIds;
|
|
613
569
|
private propagateIfNeeded;
|
|
614
570
|
private handleExpiration;
|
|
615
571
|
private resolveWithPeers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster-repo.d.ts","sourceRoot":"","sources":["../../../src/cluster/cluster-repo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAA0B,qBAAqB,EAAE,sBAAsB,EAA2B,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAiB,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACpR,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAiC,KAAK,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAGxG,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAM5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"cluster-repo.d.ts","sourceRoot":"","sources":["../../../src/cluster/cluster-repo.ts"],"names":[],"mappings":"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"}
|