@optimystic/db-p2p 0.24.1 → 0.25.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/{readme.md → README.md} +688 -668
- package/dist/src/cluster/block-transfer-service.d.ts +133 -10
- package/dist/src/cluster/block-transfer-service.d.ts.map +1 -1
- package/dist/src/cluster/block-transfer-service.js +155 -9
- package/dist/src/cluster/block-transfer-service.js.map +1 -1
- package/dist/src/cluster/block-transfer.d.ts +67 -7
- package/dist/src/cluster/block-transfer.d.ts.map +1 -1
- package/dist/src/cluster/block-transfer.js +127 -24
- package/dist/src/cluster/block-transfer.js.map +1 -1
- package/dist/src/cluster/certified-claims.d.ts +170 -0
- package/dist/src/cluster/certified-claims.d.ts.map +1 -0
- package/dist/src/cluster/certified-claims.js +200 -0
- package/dist/src/cluster/certified-claims.js.map +1 -0
- package/dist/src/cluster/client-signature-verifier.d.ts +23 -0
- package/dist/src/cluster/client-signature-verifier.d.ts.map +1 -0
- package/dist/src/cluster/client-signature-verifier.js +33 -0
- package/dist/src/cluster/client-signature-verifier.js.map +1 -0
- package/dist/src/cluster/cluster-policy.d.ts +9 -3
- package/dist/src/cluster/cluster-policy.d.ts.map +1 -1
- package/dist/src/cluster/cluster-policy.js +111 -27
- package/dist/src/cluster/cluster-policy.js.map +1 -1
- package/dist/src/cluster/cluster-repo.d.ts +140 -11
- package/dist/src/cluster/cluster-repo.d.ts.map +1 -1
- package/dist/src/cluster/cluster-repo.js +485 -29
- package/dist/src/cluster/cluster-repo.js.map +1 -1
- package/dist/src/cluster/commit-proof.d.ts +134 -0
- package/dist/src/cluster/commit-proof.d.ts.map +1 -0
- package/dist/src/cluster/commit-proof.js +263 -0
- package/dist/src/cluster/commit-proof.js.map +1 -0
- package/dist/src/cluster/quorum-restore.d.ts +95 -8
- package/dist/src/cluster/quorum-restore.d.ts.map +1 -1
- package/dist/src/cluster/quorum-restore.js +113 -14
- package/dist/src/cluster/quorum-restore.js.map +1 -1
- package/dist/src/cluster/rebalance-monitor.d.ts +84 -0
- package/dist/src/cluster/rebalance-monitor.d.ts.map +1 -1
- package/dist/src/cluster/rebalance-monitor.js +207 -5
- package/dist/src/cluster/rebalance-monitor.js.map +1 -1
- package/dist/src/cluster/reconcile-block.d.ts +27 -7
- package/dist/src/cluster/reconcile-block.d.ts.map +1 -1
- package/dist/src/cluster/reconcile-block.js +179 -38
- package/dist/src/cluster/reconcile-block.js.map +1 -1
- package/dist/src/cluster/service.d.ts +21 -4
- package/dist/src/cluster/service.d.ts.map +1 -1
- package/dist/src/cluster/service.js +28 -17
- package/dist/src/cluster/service.js.map +1 -1
- package/dist/src/cluster/spread-on-churn.d.ts +8 -2
- package/dist/src/cluster/spread-on-churn.d.ts.map +1 -1
- package/dist/src/cluster/spread-on-churn.js +7 -7
- package/dist/src/cluster/spread-on-churn.js.map +1 -1
- package/dist/src/cohort-topic/host.d.ts.map +1 -1
- package/dist/src/cohort-topic/host.js +8 -7
- package/dist/src/cohort-topic/host.js.map +1 -1
- package/dist/src/cohort-topic/stream-util.d.ts +7 -6
- package/dist/src/cohort-topic/stream-util.d.ts.map +1 -1
- package/dist/src/cohort-topic/stream-util.js +14 -41
- package/dist/src/cohort-topic/stream-util.js.map +1 -1
- package/dist/src/dispute/cascade.d.ts +7 -8
- package/dist/src/dispute/cascade.d.ts.map +1 -1
- package/dist/src/dispute/cascade.js +24 -7
- package/dist/src/dispute/cascade.js.map +1 -1
- package/dist/src/dispute/dispute-service.d.ts +5 -0
- package/dist/src/dispute/dispute-service.d.ts.map +1 -1
- package/dist/src/dispute/dispute-service.js +13 -3
- package/dist/src/dispute/dispute-service.js.map +1 -1
- package/dist/src/dispute/invalidation.d.ts +33 -15
- package/dist/src/dispute/invalidation.d.ts.map +1 -1
- package/dist/src/dispute/invalidation.js +127 -34
- package/dist/src/dispute/invalidation.js.map +1 -1
- package/dist/src/dispute/service.d.ts.map +1 -1
- package/dist/src/dispute/service.js +2 -1
- package/dist/src/dispute/service.js.map +1 -1
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/libp2p-key-network.d.ts +78 -6
- package/dist/src/libp2p-key-network.d.ts.map +1 -1
- package/dist/src/libp2p-key-network.js +136 -57
- package/dist/src/libp2p-key-network.js.map +1 -1
- package/dist/src/libp2p-node-base.d.ts +38 -7
- package/dist/src/libp2p-node-base.d.ts.map +1 -1
- package/dist/src/libp2p-node-base.js +150 -62
- package/dist/src/libp2p-node-base.js.map +1 -1
- package/dist/src/logger.d.ts +2 -2
- package/dist/src/logger.js +2 -2
- package/dist/src/network/open-protocol-stream.d.ts +56 -0
- package/dist/src/network/open-protocol-stream.d.ts.map +1 -0
- package/dist/src/network/open-protocol-stream.js +60 -0
- package/dist/src/network/open-protocol-stream.js.map +1 -0
- package/dist/src/network/register-protocol-handler.d.ts +66 -0
- package/dist/src/network/register-protocol-handler.d.ts.map +1 -0
- package/dist/src/network/register-protocol-handler.js +51 -0
- package/dist/src/network/register-protocol-handler.js.map +1 -0
- package/dist/src/peer-address-book.d.ts +128 -1
- package/dist/src/peer-address-book.d.ts.map +1 -1
- package/dist/src/peer-address-book.js +198 -15
- package/dist/src/peer-address-book.js.map +1 -1
- package/dist/src/pend-validation.d.ts +65 -0
- package/dist/src/pend-validation.d.ts.map +1 -0
- package/dist/src/pend-validation.js +69 -0
- package/dist/src/pend-validation.js.map +1 -0
- package/dist/src/reactivity/notify-transport.d.ts.map +1 -1
- package/dist/src/reactivity/notify-transport.js +2 -1
- package/dist/src/reactivity/notify-transport.js.map +1 -1
- package/dist/src/reactivity/push-state-gossip.d.ts.map +1 -1
- package/dist/src/reactivity/push-state-gossip.js +2 -1
- package/dist/src/reactivity/push-state-gossip.js.map +1 -1
- package/dist/src/repo/cluster-coordinator.d.ts +32 -6
- package/dist/src/repo/cluster-coordinator.d.ts.map +1 -1
- package/dist/src/repo/cluster-coordinator.js +44 -10
- package/dist/src/repo/cluster-coordinator.js.map +1 -1
- package/dist/src/repo/coordinator-repo.d.ts +181 -25
- package/dist/src/repo/coordinator-repo.d.ts.map +1 -1
- package/dist/src/repo/coordinator-repo.js +650 -62
- package/dist/src/repo/coordinator-repo.js.map +1 -1
- package/dist/src/repo/served-repo-proxy.d.ts +30 -0
- package/dist/src/repo/served-repo-proxy.d.ts.map +1 -0
- package/dist/src/repo/served-repo-proxy.js +50 -0
- package/dist/src/repo/served-repo-proxy.js.map +1 -0
- package/dist/src/repo/service.d.ts +22 -1
- package/dist/src/repo/service.d.ts.map +1 -1
- package/dist/src/repo/service.js +25 -13
- package/dist/src/repo/service.js.map +1 -1
- package/dist/src/reputation/types.d.ts +3 -1
- package/dist/src/reputation/types.d.ts.map +1 -1
- package/dist/src/reputation/types.js +3 -1
- package/dist/src/reputation/types.js.map +1 -1
- package/dist/src/rn.d.ts +24 -2
- package/dist/src/rn.d.ts.map +1 -1
- package/dist/src/rn.js +33 -4
- package/dist/src/rn.js.map +1 -1
- package/dist/src/routing/libp2p-known-peers.d.ts.map +1 -1
- package/dist/src/routing/libp2p-known-peers.js +5 -0
- package/dist/src/routing/libp2p-known-peers.js.map +1 -1
- package/dist/src/storage/block-archive.d.ts +153 -0
- package/dist/src/storage/block-archive.d.ts.map +1 -0
- package/dist/src/storage/block-archive.js +194 -0
- package/dist/src/storage/block-archive.js.map +1 -0
- package/dist/src/storage/block-latch.d.ts +92 -0
- package/dist/src/storage/block-latch.d.ts.map +1 -0
- package/dist/src/storage/block-latch.js +132 -0
- package/dist/src/storage/block-latch.js.map +1 -0
- package/dist/src/storage/block-storage.d.ts +169 -12
- package/dist/src/storage/block-storage.d.ts.map +1 -1
- package/dist/src/storage/block-storage.js +415 -152
- package/dist/src/storage/block-storage.js.map +1 -1
- package/dist/src/storage/cached-raw-storage.d.ts +5 -1
- package/dist/src/storage/cached-raw-storage.d.ts.map +1 -1
- package/dist/src/storage/cached-raw-storage.js +16 -1
- package/dist/src/storage/cached-raw-storage.js.map +1 -1
- package/dist/src/storage/cached-store-driver.d.ts +14 -4
- package/dist/src/storage/cached-store-driver.d.ts.map +1 -1
- package/dist/src/storage/cached-store-driver.js +39 -5
- package/dist/src/storage/cached-store-driver.js.map +1 -1
- package/dist/src/storage/i-block-storage.d.ts +70 -19
- package/dist/src/storage/i-block-storage.d.ts.map +1 -1
- package/dist/src/storage/i-block-storage.js +21 -1
- package/dist/src/storage/i-block-storage.js.map +1 -1
- package/dist/src/storage/i-raw-storage.d.ts +38 -0
- package/dist/src/storage/i-raw-storage.d.ts.map +1 -1
- package/dist/src/storage/kv-raw-storage.d.ts +14 -8
- package/dist/src/storage/kv-raw-storage.d.ts.map +1 -1
- package/dist/src/storage/kv-raw-storage.js +29 -9
- package/dist/src/storage/kv-raw-storage.js.map +1 -1
- package/dist/src/storage/memory-store-driver.d.ts +4 -1
- package/dist/src/storage/memory-store-driver.d.ts.map +1 -1
- package/dist/src/storage/memory-store-driver.js +22 -2
- package/dist/src/storage/memory-store-driver.js.map +1 -1
- package/dist/src/storage/raw-store-codec.js +2 -2
- package/dist/src/storage/raw-store-driver.d.ts +44 -3
- package/dist/src/storage/raw-store-driver.d.ts.map +1 -1
- package/dist/src/storage/shared-cache-pool.d.ts +60 -3
- package/dist/src/storage/shared-cache-pool.d.ts.map +1 -1
- package/dist/src/storage/shared-cache-pool.js +68 -4
- package/dist/src/storage/shared-cache-pool.js.map +1 -1
- package/dist/src/storage/storage-repo.d.ts +204 -26
- package/dist/src/storage/storage-repo.d.ts.map +1 -1
- package/dist/src/storage/storage-repo.js +422 -119
- package/dist/src/storage/storage-repo.js.map +1 -1
- package/dist/src/storage/store-identity.d.ts +21 -0
- package/dist/src/storage/store-identity.d.ts.map +1 -0
- package/dist/src/storage/store-identity.js +33 -0
- package/dist/src/storage/store-identity.js.map +1 -0
- package/dist/src/storage/struct.d.ts +15 -0
- package/dist/src/storage/struct.d.ts.map +1 -1
- package/dist/src/storage/with-read-cache.d.ts +92 -0
- package/dist/src/storage/with-read-cache.d.ts.map +1 -0
- package/dist/src/storage/with-read-cache.js +132 -0
- package/dist/src/storage/with-read-cache.js.map +1 -0
- package/dist/src/sync/service.d.ts +13 -3
- package/dist/src/sync/service.d.ts.map +1 -1
- package/dist/src/sync/service.js +7 -30
- package/dist/src/sync/service.js.map +1 -1
- package/dist/src/testing/mesh-harness.d.ts +75 -2
- package/dist/src/testing/mesh-harness.d.ts.map +1 -1
- package/dist/src/testing/mesh-harness.js +193 -81
- package/dist/src/testing/mesh-harness.js.map +1 -1
- package/dist/src/testing/raw-storage-conformance.d.ts +8 -0
- package/dist/src/testing/raw-storage-conformance.d.ts.map +1 -1
- package/dist/src/testing/raw-storage-conformance.js +97 -2
- package/dist/src/testing/raw-storage-conformance.js.map +1 -1
- package/package.json +5 -6
- package/src/cluster/block-transfer-service.ts +528 -312
- package/src/cluster/block-transfer.ts +547 -424
- package/src/cluster/certified-claims.ts +319 -0
- package/src/cluster/client-signature-verifier.ts +34 -0
- package/src/cluster/cluster-policy.ts +294 -203
- package/src/cluster/cluster-repo.ts +2501 -2034
- package/src/cluster/commit-proof.ts +344 -0
- package/src/cluster/quorum-restore.ts +348 -223
- package/src/cluster/rebalance-monitor.ts +539 -254
- package/src/cluster/reconcile-block.ts +404 -203
- package/src/cluster/service.ts +308 -293
- package/src/cluster/spread-on-churn.ts +352 -346
- package/src/cohort-topic/host.ts +8 -7
- package/src/cohort-topic/stream-util.ts +14 -43
- package/src/dispute/cascade.ts +31 -15
- package/src/dispute/dispute-service.ts +706 -696
- package/src/dispute/invalidation.ts +162 -52
- package/src/dispute/service.ts +126 -125
- package/src/index.ts +7 -0
- package/src/libp2p-key-network.ts +142 -58
- package/src/libp2p-node-base.ts +1793 -1675
- package/src/logger.ts +27 -27
- package/src/network/open-protocol-stream.ts +87 -0
- package/src/network/register-protocol-handler.ts +85 -0
- package/src/peer-address-book.ts +360 -149
- package/src/pend-validation.ts +89 -0
- package/src/reactivity/notify-transport.ts +145 -144
- package/src/reactivity/push-state-gossip.ts +292 -291
- package/src/repo/cluster-coordinator.ts +65 -11
- package/src/repo/coordinator-repo.ts +729 -71
- package/src/repo/served-repo-proxy.ts +55 -0
- package/src/repo/service.ts +332 -313
- package/src/reputation/types.ts +3 -1
- package/src/rn.ts +34 -4
- package/src/routing/libp2p-known-peers.ts +31 -26
- package/src/storage/block-archive.ts +242 -0
- package/src/storage/block-latch.ts +144 -0
- package/src/storage/block-storage.ts +787 -498
- package/src/storage/cached-raw-storage.ts +21 -1
- package/src/storage/cached-store-driver.ts +898 -859
- package/src/storage/i-block-storage.ts +172 -116
- package/src/storage/i-raw-storage.ts +40 -0
- package/src/storage/kv-raw-storage.ts +34 -9
- package/src/storage/memory-store-driver.ts +26 -2
- package/src/storage/raw-store-codec.ts +42 -42
- package/src/storage/raw-store-driver.ts +45 -3
- package/src/storage/shared-cache-pool.ts +516 -452
- package/src/storage/storage-repo.ts +1421 -1014
- package/src/storage/store-identity.ts +41 -0
- package/src/storage/struct.ts +52 -34
- package/src/storage/with-read-cache.ts +182 -0
- package/src/sync/service.ts +178 -198
- package/src/testing/cohort-topic-mesh-harness.ts +673 -673
- package/src/testing/mesh-harness.ts +524 -344
- package/src/testing/raw-storage-conformance.ts +114 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raw-store-driver.d.ts","sourceRoot":"","sources":["../../../src/storage/raw-store-driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"raw-store-driver.d.ts","sourceRoot":"","sources":["../../../src/storage/raw-store-driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { BlockId, ActionId } from "@optimystic/db-core";
|
|
2
|
+
import type { StoreIdentity } from "./store-identity.js";
|
|
2
3
|
/**
|
|
3
4
|
* Which of the cache's entry classes a pool entry belongs to. Mirrors the sub-states of
|
|
4
5
|
* `CachedStoreDriver`'s per-block cache state; the pool itself never branches on the class —
|
|
@@ -50,9 +51,21 @@ export interface PoolEntry<V = unknown> {
|
|
|
50
51
|
export declare class CacheStoreHandle {
|
|
51
52
|
readonly id: string;
|
|
52
53
|
readonly label: string | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* The backing store this cache fronts, when the backend names one. Held so
|
|
56
|
+
* {@link SharedCachePool.unregisterStore} can free the pool's live-identity claim; never
|
|
57
|
+
* used as, or mixed into, an entry key (that is {@link SharedCachePool.keyFor}'s `id`).
|
|
58
|
+
*/
|
|
59
|
+
readonly identity: StoreIdentity | undefined;
|
|
53
60
|
bytes: number;
|
|
54
61
|
entries: number;
|
|
55
|
-
constructor(id: string, label: string | undefined
|
|
62
|
+
constructor(id: string, label: string | undefined,
|
|
63
|
+
/**
|
|
64
|
+
* The backing store this cache fronts, when the backend names one. Held so
|
|
65
|
+
* {@link SharedCachePool.unregisterStore} can free the pool's live-identity claim; never
|
|
66
|
+
* used as, or mixed into, an entry key (that is {@link SharedCachePool.keyFor}'s `id`).
|
|
67
|
+
*/
|
|
68
|
+
identity?: StoreIdentity | undefined);
|
|
56
69
|
}
|
|
57
70
|
export interface CachePoolStats {
|
|
58
71
|
maxBytes: number;
|
|
@@ -123,6 +136,23 @@ export interface SharedCachePoolOptions {
|
|
|
123
136
|
* throws. Absurdly small values are accepted as-is: they cannot break coherence (the owning
|
|
124
137
|
* cache is correct at any residency, including zero), they just degrade toward read-through.
|
|
125
138
|
*
|
|
139
|
+
* **One cache per backing store, enforced here.** Every cache — however constructed — registers
|
|
140
|
+
* with a pool, so registration is the one choke point all construction paths share, and
|
|
141
|
+
* {@link registerStore} refuses a second live registration for a backing store identity that
|
|
142
|
+
* already has one (see its doc for why a throw, not a warning). Two deliberate escapes remain,
|
|
143
|
+
* both documented rather than closed:
|
|
144
|
+
*
|
|
145
|
+
* - **Two different pools.** The claim map lives on the pool, so two caches over one store
|
|
146
|
+
* registered with two DIFFERENT `SharedCachePool` instances both succeed and both diverge.
|
|
147
|
+
* Closing that would take a process-global identity registry outliving every pool — more
|
|
148
|
+
* machinery than the case deserves, since passing a non-default pool is an explicit act (tests
|
|
149
|
+
* do it for isolation, hosts for sizing). Pinned by a test so it reads as a decision.
|
|
150
|
+
* - **Backends that report no identity** (memory drivers, test doubles) are not covered at all,
|
|
151
|
+
* which is correct: two memory drivers are two genuinely different stores.
|
|
152
|
+
*
|
|
153
|
+
* The cross-process case — two OS processes over one directory — is out of scope entirely; it is
|
|
154
|
+
* the unenforced precondition of Invariant 5 in `packages/db-p2p/docs/storage.md`.
|
|
155
|
+
*
|
|
126
156
|
* Not safe for use from multiple threads; like the caches it serves, it relies on JS
|
|
127
157
|
* single-threaded execution — every mutation completes synchronously.
|
|
128
158
|
*/
|
|
@@ -142,6 +172,12 @@ export declare class SharedCachePool {
|
|
|
142
172
|
private entriesTotal;
|
|
143
173
|
private storeCounter;
|
|
144
174
|
private readonly stores;
|
|
175
|
+
/**
|
|
176
|
+
* Live backing-store claims: one entry per registered store that named an identity, freed by
|
|
177
|
+
* {@link unregisterStore}. Registration bookkeeping only — it holds no values and never
|
|
178
|
+
* enters the byte or entry budget.
|
|
179
|
+
*/
|
|
180
|
+
private readonly claims;
|
|
145
181
|
private hits;
|
|
146
182
|
private admissions;
|
|
147
183
|
private ghostHits;
|
|
@@ -160,8 +196,23 @@ export declare class SharedCachePool {
|
|
|
160
196
|
maxBytes?: number;
|
|
161
197
|
maxEntries?: number;
|
|
162
198
|
}): void;
|
|
163
|
-
/**
|
|
164
|
-
|
|
199
|
+
/**
|
|
200
|
+
* Register a store. The returned handle's `id` is unique for the pool's lifetime — never reused.
|
|
201
|
+
*
|
|
202
|
+
* `identity` is the backing store the caller's cache fronts ({@link StoreIdentity}), when the
|
|
203
|
+
* backend names one. A second registration for an identity this pool already has live
|
|
204
|
+
* **throws**: the two caches are write-through views that never see each other's writes, so
|
|
205
|
+
* each serves its own half of the process a permanently stale picture. Throwing is the point —
|
|
206
|
+
* the failure it replaces is silent wrong data returned to a caller with no way to notice, and
|
|
207
|
+
* a log line is not a way to notice. A registration with no identity is unaffected: it
|
|
208
|
+
* registers exactly as it always did.
|
|
209
|
+
*
|
|
210
|
+
* The check runs BEFORE any mutation, so a refused registration leaves the pool exactly as it
|
|
211
|
+
* was — no store row, no consumed id, no claim.
|
|
212
|
+
*
|
|
213
|
+
* @throws Error when `identity` already has a live registration on this pool.
|
|
214
|
+
*/
|
|
215
|
+
registerStore(label?: string, identity?: StoreIdentity): CacheStoreHandle;
|
|
165
216
|
/**
|
|
166
217
|
* Release a departing store: evict any of its entries still resident (defensively — the
|
|
167
218
|
* owner normally clears first), purge its ghost keys, and remove it from the registry.
|
|
@@ -169,6 +220,12 @@ export declare class SharedCachePool {
|
|
|
169
220
|
* would de-account entries the owner still references, leaving it serving values the pool
|
|
170
221
|
* no longer counts. It does NOT ghost (the ghosts are being purged anyway) and does NOT
|
|
171
222
|
* count as a budget eviction: it is a lifecycle release, not memory pressure.
|
|
223
|
+
*
|
|
224
|
+
* Also frees the handle's backing-store claim, so sequential reuse of one store (stop a node,
|
|
225
|
+
* start another over the same directory) registers cleanly instead of tripping
|
|
226
|
+
* {@link registerStore}'s guard. The claim is released only when the map still points at THIS
|
|
227
|
+
* handle — a second, late unregister of a departed handle must not strip the claim out from
|
|
228
|
+
* under the successor that legitimately took the identity in between.
|
|
172
229
|
*/
|
|
173
230
|
unregisterStore(handle: CacheStoreHandle): void;
|
|
174
231
|
/** Drop every ghost key belonging to `handle` (used by store clear/close — pre-clear recency must not survive the clear). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-cache-pool.d.ts","sourceRoot":"","sources":["../../../src/storage/shared-cache-pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"shared-cache-pool.d.ts","sourceRoot":"","sources":["../../../src/storage/shared-cache-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,19 @@
|
|
|
6
6
|
export class CacheStoreHandle {
|
|
7
7
|
id;
|
|
8
8
|
label;
|
|
9
|
+
identity;
|
|
9
10
|
bytes = 0;
|
|
10
11
|
entries = 0;
|
|
11
|
-
constructor(id, label
|
|
12
|
+
constructor(id, label,
|
|
13
|
+
/**
|
|
14
|
+
* The backing store this cache fronts, when the backend names one. Held so
|
|
15
|
+
* {@link SharedCachePool.unregisterStore} can free the pool's live-identity claim; never
|
|
16
|
+
* used as, or mixed into, an entry key (that is {@link SharedCachePool.keyFor}'s `id`).
|
|
17
|
+
*/
|
|
18
|
+
identity = undefined) {
|
|
12
19
|
this.id = id;
|
|
13
20
|
this.label = label;
|
|
21
|
+
this.identity = identity;
|
|
14
22
|
}
|
|
15
23
|
}
|
|
16
24
|
/**
|
|
@@ -48,6 +56,23 @@ const SEP = '\u0000';
|
|
|
48
56
|
* throws. Absurdly small values are accepted as-is: they cannot break coherence (the owning
|
|
49
57
|
* cache is correct at any residency, including zero), they just degrade toward read-through.
|
|
50
58
|
*
|
|
59
|
+
* **One cache per backing store, enforced here.** Every cache — however constructed — registers
|
|
60
|
+
* with a pool, so registration is the one choke point all construction paths share, and
|
|
61
|
+
* {@link registerStore} refuses a second live registration for a backing store identity that
|
|
62
|
+
* already has one (see its doc for why a throw, not a warning). Two deliberate escapes remain,
|
|
63
|
+
* both documented rather than closed:
|
|
64
|
+
*
|
|
65
|
+
* - **Two different pools.** The claim map lives on the pool, so two caches over one store
|
|
66
|
+
* registered with two DIFFERENT `SharedCachePool` instances both succeed and both diverge.
|
|
67
|
+
* Closing that would take a process-global identity registry outliving every pool — more
|
|
68
|
+
* machinery than the case deserves, since passing a non-default pool is an explicit act (tests
|
|
69
|
+
* do it for isolation, hosts for sizing). Pinned by a test so it reads as a decision.
|
|
70
|
+
* - **Backends that report no identity** (memory drivers, test doubles) are not covered at all,
|
|
71
|
+
* which is correct: two memory drivers are two genuinely different stores.
|
|
72
|
+
*
|
|
73
|
+
* The cross-process case — two OS processes over one directory — is out of scope entirely; it is
|
|
74
|
+
* the unenforced precondition of Invariant 5 in `packages/db-p2p/docs/storage.md`.
|
|
75
|
+
*
|
|
51
76
|
* Not safe for use from multiple threads; like the caches it serves, it relies on JS
|
|
52
77
|
* single-threaded execution — every mutation completes synchronously.
|
|
53
78
|
*/
|
|
@@ -67,6 +92,12 @@ export class SharedCachePool {
|
|
|
67
92
|
entriesTotal = 0;
|
|
68
93
|
storeCounter = 0;
|
|
69
94
|
stores = new Map();
|
|
95
|
+
/**
|
|
96
|
+
* Live backing-store claims: one entry per registered store that named an identity, freed by
|
|
97
|
+
* {@link unregisterStore}. Registration bookkeeping only — it holds no values and never
|
|
98
|
+
* enters the byte or entry budget.
|
|
99
|
+
*/
|
|
100
|
+
claims = new Map();
|
|
70
101
|
hits = 0;
|
|
71
102
|
admissions = 0;
|
|
72
103
|
ghostHits = 0;
|
|
@@ -97,10 +128,34 @@ export class SharedCachePool {
|
|
|
97
128
|
this.evictToFit(0, 0);
|
|
98
129
|
this.trimGhost();
|
|
99
130
|
}
|
|
100
|
-
/**
|
|
101
|
-
|
|
102
|
-
|
|
131
|
+
/**
|
|
132
|
+
* Register a store. The returned handle's `id` is unique for the pool's lifetime — never reused.
|
|
133
|
+
*
|
|
134
|
+
* `identity` is the backing store the caller's cache fronts ({@link StoreIdentity}), when the
|
|
135
|
+
* backend names one. A second registration for an identity this pool already has live
|
|
136
|
+
* **throws**: the two caches are write-through views that never see each other's writes, so
|
|
137
|
+
* each serves its own half of the process a permanently stale picture. Throwing is the point —
|
|
138
|
+
* the failure it replaces is silent wrong data returned to a caller with no way to notice, and
|
|
139
|
+
* a log line is not a way to notice. A registration with no identity is unaffected: it
|
|
140
|
+
* registers exactly as it always did.
|
|
141
|
+
*
|
|
142
|
+
* The check runs BEFORE any mutation, so a refused registration leaves the pool exactly as it
|
|
143
|
+
* was — no store row, no consumed id, no claim.
|
|
144
|
+
*
|
|
145
|
+
* @throws Error when `identity` already has a live registration on this pool.
|
|
146
|
+
*/
|
|
147
|
+
registerStore(label, identity) {
|
|
148
|
+
const claimed = identity === undefined ? undefined : this.claims.get(identity);
|
|
149
|
+
if (claimed !== undefined) {
|
|
150
|
+
throw new Error(`two caches over one backing store never converge: ${JSON.stringify(identity)} is already `
|
|
151
|
+
+ `cached (label ${JSON.stringify(claimed.label ?? null)}); this registration `
|
|
152
|
+
+ `(label ${JSON.stringify(label ?? null)}) would be a second, independent view. Share one `
|
|
153
|
+
+ `CachedRawStorage — withReadCache does this for you — or dispose the first.`);
|
|
154
|
+
}
|
|
155
|
+
const handle = new CacheStoreHandle(`s${++this.storeCounter}`, label, identity);
|
|
103
156
|
this.stores.set(handle.id, handle);
|
|
157
|
+
if (identity !== undefined)
|
|
158
|
+
this.claims.set(identity, handle);
|
|
104
159
|
return handle;
|
|
105
160
|
}
|
|
106
161
|
/**
|
|
@@ -110,6 +165,12 @@ export class SharedCachePool {
|
|
|
110
165
|
* would de-account entries the owner still references, leaving it serving values the pool
|
|
111
166
|
* no longer counts. It does NOT ghost (the ghosts are being purged anyway) and does NOT
|
|
112
167
|
* count as a budget eviction: it is a lifecycle release, not memory pressure.
|
|
168
|
+
*
|
|
169
|
+
* Also frees the handle's backing-store claim, so sequential reuse of one store (stop a node,
|
|
170
|
+
* start another over the same directory) registers cleanly instead of tripping
|
|
171
|
+
* {@link registerStore}'s guard. The claim is released only when the map still points at THIS
|
|
172
|
+
* handle — a second, late unregister of a departed handle must not strip the claim out from
|
|
173
|
+
* under the successor that legitimately took the identity in between.
|
|
113
174
|
*/
|
|
114
175
|
unregisterStore(handle) {
|
|
115
176
|
for (const queue of [this.a1in, this.am]) {
|
|
@@ -122,6 +183,9 @@ export class SharedCachePool {
|
|
|
122
183
|
}
|
|
123
184
|
this.purgeGhosts(handle);
|
|
124
185
|
this.stores.delete(handle.id);
|
|
186
|
+
if (handle.identity !== undefined && this.claims.get(handle.identity) === handle) {
|
|
187
|
+
this.claims.delete(handle.identity);
|
|
188
|
+
}
|
|
125
189
|
}
|
|
126
190
|
/** Drop every ghost key belonging to `handle` (used by store clear/close — pre-clear recency must not survive the clear). */
|
|
127
191
|
purgeGhosts(handle) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-cache-pool.js","sourceRoot":"","sources":["../../../src/storage/shared-cache-pool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shared-cache-pool.js","sourceRoot":"","sources":["../../../src/storage/shared-cache-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,7 @@
|
|
|
1
|
-
import type { IRepo, MessageOptions, BlockId, CommitRequest, CommitResult, GetBlockResults, PendRequest, PendResult, ActionBlocks, BlockGets, IBlock, ActionRev, PendValidationHook, CollectionId, IBlockChangeNotifier, CollectionChangeListener } from "@optimystic/db-core";
|
|
1
|
+
import type { IRepo, MessageOptions, BlockId, CommitRequest, CommitResult, GetBlockResults, PendRequest, PendResult, ActionBlocks, ActionId, BlockGets, IBlock, ActionRev, PendValidationHook, UnvalidatablePendPolicy, CollectionId, IBlockChangeNotifier, CollectionChangeListener } from "@optimystic/db-core";
|
|
2
2
|
import type { IBlockStorage } from "./i-block-storage.js";
|
|
3
3
|
import type { IBlockReplicaStore } from "../cluster/block-transfer-service.js";
|
|
4
|
-
|
|
5
|
-
* Single source of truth for the per-block commit latch key. Held by {@link StorageRepo.commit} and
|
|
6
|
-
* {@link StorageRepo.saveReplicatedBlock}, and — through an injected runner ({@link withBlockCommitLatch})
|
|
7
|
-
* — by the invalidation-apply path. Every out-of-band writer of a block's `meta.latest` must serialize
|
|
8
|
-
* on this key against a concurrent local commit on the same block; keeping all call sites on this helper
|
|
9
|
-
* is what prevents the key from drifting between them.
|
|
10
|
-
*/
|
|
11
|
-
export declare const commitLatchKey: (blockId: BlockId) => string;
|
|
12
|
-
/**
|
|
13
|
-
* Runs `fn` while holding the per-block commit latch {@link commitLatchKey}. This is the capability the
|
|
14
|
-
* dispute module's `applyInvalidation` is handed (through its context) so its compensating
|
|
15
|
-
* `saveReplica`/`saveDeletion` read-modify-write of `meta.latest` is mutually exclusive with a concurrent
|
|
16
|
-
* {@link StorageRepo.commit} on the same block — otherwise an invalidation advancing `latest` outside
|
|
17
|
-
* that latch is invisible to commit's staleness guard and can be clobbered (a non-monotonic regression).
|
|
18
|
-
*
|
|
19
|
-
* Acquire/release is per call, so a caller holds at most one block latch at any instant and cannot
|
|
20
|
-
* deadlock against commit's sorted, up-front multi-latch acquisition.
|
|
21
|
-
*/
|
|
22
|
-
export declare function withBlockCommitLatch<T>(blockId: BlockId, fn: () => Promise<T>): Promise<T>;
|
|
4
|
+
import { type BlockCommitProof } from "../cluster/commit-proof.js";
|
|
23
5
|
/**
|
|
24
6
|
* Stable, greppable prefix on the failure reason a commit carries when this node cannot materialize
|
|
25
7
|
* the revision it was asked to record. It is a STRING marker rather than only an error class because
|
|
@@ -27,6 +9,13 @@ export declare function withBlockCommitLatch<T>(blockId: BlockId, fn: () => Prom
|
|
|
27
9
|
* also crosses the wire), so the class identity is lost by the time a caller inspects the result.
|
|
28
10
|
*/
|
|
29
11
|
export declare const MISSING_BASE_REVISION_REASON = "missing-base-revision";
|
|
12
|
+
/**
|
|
13
|
+
* The two stable reject-reason prefixes a validating receiver emits, re-exported here (and from
|
|
14
|
+
* `cluster/cluster-repo.ts`) next to their siblings so a caller inspecting a `PendResult` reason
|
|
15
|
+
* need not know which module defines them. Both tiers refuse with the same prefixes because both
|
|
16
|
+
* run the same {@link checkPendValidation}.
|
|
17
|
+
*/
|
|
18
|
+
export { PEND_NOT_VALIDATABLE, VALIDATOR_FAULT } from "../pend-validation.js";
|
|
30
19
|
/**
|
|
31
20
|
* This node was asked to commit revision N of a block it holds no materializable base for, so
|
|
32
21
|
* applying the transform would materialize nothing while `latest` advanced to N — a block that is
|
|
@@ -48,10 +37,80 @@ export declare function isMissingBaseRevisionFailure(result: CommitResult): bool
|
|
|
48
37
|
export type StorageRepoOptions = {
|
|
49
38
|
/** Optional hook to validate transactions in PendRequests */
|
|
50
39
|
validatePend?: PendValidationHook;
|
|
40
|
+
/**
|
|
41
|
+
* What this repo does — when a `validatePend` hook IS configured — with a pend that carries no
|
|
42
|
+
* `validation` payload and therefore nothing to re-check. Default 'accept'; see
|
|
43
|
+
* {@link UnvalidatablePendPolicy}. The cluster tier's mirror of this knob is
|
|
44
|
+
* `ClusterConsensusConfig.unvalidatablePendPolicy`, and both are enforced by the one
|
|
45
|
+
* `checkPendValidation`.
|
|
46
|
+
*
|
|
47
|
+
* NOTE: the two tiers are configured INDEPENDENTLY, so a node set to 'accept' at the cluster tier
|
|
48
|
+
* and 'reject' here would vote approve on a pend its own storage then refuses at apply — burning
|
|
49
|
+
* a consensus round to reach a verdict it already knew. Harmless today because no composition
|
|
50
|
+
* root supplies a checker at either tier (backlog
|
|
51
|
+
* `feat-no-deployment-validates-transactions-at-pend`); when one does, resolve both knobs from a
|
|
52
|
+
* single operator field rather than letting a deployment set them apart.
|
|
53
|
+
*/
|
|
54
|
+
unvalidatablePendPolicy?: UnvalidatablePendPolicy;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* What {@link StorageRepo.previewCommitDigest} predicts a commit would materialize. `digest` is the
|
|
58
|
+
* {@link canonicalBlockHash} of the materialized content, or `undefined` when the transform
|
|
59
|
+
* materializes nothing (a delete/tombstone, updates with no base to apply them to) or the base
|
|
60
|
+
* exists but cannot be materialized locally. `baseRev` is the local committed revision the preview
|
|
61
|
+
* was computed against (absent when there is none, or when the transform is base-independent and no
|
|
62
|
+
* base was read). `baseIndependent` is true when the pended transform carries an `insert`, making
|
|
63
|
+
* the result identical on every member regardless of what base it holds.
|
|
64
|
+
*/
|
|
65
|
+
export type CommitDigestPreview = {
|
|
66
|
+
digest?: string;
|
|
67
|
+
baseRev?: number;
|
|
68
|
+
baseIndependent: boolean;
|
|
51
69
|
};
|
|
52
|
-
|
|
70
|
+
/**
|
|
71
|
+
* The capability {@link ClusterMember.validateCommitOperations} probes its `storageRepo` for. Named
|
|
72
|
+
* (rather than written inline at the probe) so there is ONE definition of the contract and so a repo
|
|
73
|
+
* decorator wrapping the member's storage seam has something to `implements` and forward — a wrapper
|
|
74
|
+
* that drops the method silently disables the commit content-digest check on that node.
|
|
75
|
+
*/
|
|
76
|
+
export interface ICommitDigestPreviewer {
|
|
77
|
+
previewCommitDigest(blockId: BlockId, actionId: ActionId, rev: number): Promise<CommitDigestPreview | undefined>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* The capability `ClusterMember.applyConsensusOperation` casts its `storageRepo` to when handing a
|
|
81
|
+
* {@link BlockCommitProof} down the commit path. Named for the same reason as
|
|
82
|
+
* {@link ICommitDigestPreviewer}: one definition of the widened contract, and something a repo
|
|
83
|
+
* decorator can `implements` and forward. `IRepo.commit` takes two arguments; the third is
|
|
84
|
+
* harmless at runtime for a plain `IRepo` implementation (the extra argument is ignored), so
|
|
85
|
+
* callers cast rather than structurally probe — but a decorator that narrows back to `IRepo`
|
|
86
|
+
* silently stops persisting proofs on that node.
|
|
87
|
+
*/
|
|
88
|
+
export interface ICommitProofPersister {
|
|
89
|
+
commit(request: CommitRequest, options?: MessageOptions, proof?: BlockCommitProof): Promise<CommitResult>;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The capability that answers "which action committed revision N of this block?" — the question the
|
|
93
|
+
* commit-tier stale checks need when local `latest` has already advanced PAST a contested revision,
|
|
94
|
+
* so `latest.actionId` alone can no longer distinguish "my commit landed and history moved on"
|
|
95
|
+
* (abstain / not a conflict) from "a rival took my revision" (reject / retryable conflict).
|
|
96
|
+
* Consumed by the cluster member's promise-round stale-commit check
|
|
97
|
+
* (`ClusterMember.validateCommitRevisions`) and by `CoordinatorRepo`'s commit rejection classifier.
|
|
98
|
+
* Named (rather than probed inline) for the same reason as {@link ICommitDigestPreviewer}: one
|
|
99
|
+
* definition of the contract, and something a repo decorator can `implements` and forward — a
|
|
100
|
+
* wrapper that drops the method silently degrades both checks to an abstain on that node.
|
|
101
|
+
*/
|
|
102
|
+
export interface IRevisionActionReader {
|
|
103
|
+
/**
|
|
104
|
+
* The action id recorded for `rev` of `blockId`, or `undefined` when this node holds no revision
|
|
105
|
+
* record for it (never seen, or history truncated below `rev`). Read-only; never takes the block
|
|
106
|
+
* write latch (callers are on vote/classification paths and must treat a throw as "unknown").
|
|
107
|
+
*/
|
|
108
|
+
getRevisionAction(blockId: BlockId, rev: number): Promise<ActionId | undefined>;
|
|
109
|
+
}
|
|
110
|
+
export declare class StorageRepo implements IRepo, IBlockChangeNotifier, IBlockReplicaStore, ICommitDigestPreviewer, ICommitProofPersister, IRevisionActionReader {
|
|
53
111
|
private readonly createBlockStorage;
|
|
54
112
|
private readonly validatePend?;
|
|
113
|
+
private readonly unvalidatablePendPolicy;
|
|
55
114
|
/** Per-collection change listeners; empty sets are pruned on unsubscribe. */
|
|
56
115
|
private readonly changeListeners;
|
|
57
116
|
/** Catch-all change listeners — fire for EVERY collection's commit on this node. */
|
|
@@ -85,6 +144,23 @@ export declare class StorageRepo implements IRepo, IBlockChangeNotifier, IBlockR
|
|
|
85
144
|
/** Dispatch `event` to a snapshot of `listeners` (safe under mid-emit (un)subscribe), isolating + logging any throw. */
|
|
86
145
|
private fireChangeListeners;
|
|
87
146
|
get({ blockIds, context }: BlockGets, _options?: MessageOptions): Promise<GetBlockResults>;
|
|
147
|
+
/**
|
|
148
|
+
* The one place a local coverage gap is healed from a peer. `getBlock` is local-only; when it
|
|
149
|
+
* reports the target revision as not covered ({@link RevisionNotCoveredError}) this fetches it
|
|
150
|
+
* through `restoreRevision` under the block's write latch — the restore writes revision records
|
|
151
|
+
* and merges coverage into the metadata blob, so it must serialize against every other writer of
|
|
152
|
+
* the block — and re-reads. Only the restore is latched; the reads on either side are not, and
|
|
153
|
+
* the latch is never held across the two.
|
|
154
|
+
*
|
|
155
|
+
* A restore that fails on a **pending-only** block (metadata seeded by a pend, no committed
|
|
156
|
+
* revision) reads as ABSENT, not as a fault: the named revision was a guess about content this
|
|
157
|
+
* node never held, and the caller's insert-probe / pending-overlay logic already treats an absent
|
|
158
|
+
* base as "nothing committed here". A failed restore on a block that DOES hold a `latest` is a
|
|
159
|
+
* real fault (a `latest` this node cannot serve) and propagates, so the caller reports the block
|
|
160
|
+
* as unavailable. Any throw from the second read (records restored but nothing materializable
|
|
161
|
+
* under them) propagates the same way.
|
|
162
|
+
*/
|
|
163
|
+
private readBlockHealing;
|
|
88
164
|
/**
|
|
89
165
|
* Emit a {@link CollectionChangeEvent} for each read-driven promotion that landed
|
|
90
166
|
* during a {@link get}. A single get() can promote multiple distinct actions, each
|
|
@@ -95,7 +171,7 @@ export declare class StorageRepo implements IRepo, IBlockChangeNotifier, IBlockR
|
|
|
95
171
|
pend(request: PendRequest, _options?: MessageOptions): Promise<PendResult>;
|
|
96
172
|
cancel(actionRef: ActionBlocks, _options?: MessageOptions): Promise<void>;
|
|
97
173
|
/**
|
|
98
|
-
* Commit a previously-pended action across its blocks, under the
|
|
174
|
+
* Commit a previously-pended action across its blocks, under the block write latches.
|
|
99
175
|
*
|
|
100
176
|
* **Divergence vs genuine fault.** When the batch cannot be completed, the reason decides what
|
|
101
177
|
* happens to the pending records the pend left behind. `ClusterMember.applyConsensusOperation`
|
|
@@ -122,7 +198,7 @@ export declare class StorageRepo implements IRepo, IBlockChangeNotifier, IBlockR
|
|
|
122
198
|
* its `cancel` therefore still strands the record; that is pre-existing and orthogonal to the
|
|
123
199
|
* divergence split above.
|
|
124
200
|
*/
|
|
125
|
-
commit(request: CommitRequest, _options?: MessageOptions): Promise<CommitResult>;
|
|
201
|
+
commit(request: CommitRequest, _options?: MessageOptions, proof?: BlockCommitProof): Promise<CommitResult>;
|
|
126
202
|
/**
|
|
127
203
|
* Delete `actionId`'s pending record from every given block, tolerating absence.
|
|
128
204
|
*
|
|
@@ -158,13 +234,115 @@ export declare class StorageRepo implements IRepo, IBlockChangeNotifier, IBlockR
|
|
|
158
234
|
* already materialized from a departing owner, not as a pend/commit. See
|
|
159
235
|
* {@link IBlockStorage.saveReplica} for the durability/monotonicity contract.
|
|
160
236
|
*
|
|
161
|
-
* Held under the same
|
|
162
|
-
*
|
|
237
|
+
* Held under the same block write latch as {@link commit} so the replica's
|
|
238
|
+
* read-modify-write of the metadata blob is mutually exclusive with a concurrent
|
|
163
239
|
* local commit on the same block — otherwise `saveReplica`'s monotonic guard could
|
|
164
240
|
* read a stale `latest` and clobber a commit that advanced it in between.
|
|
241
|
+
*
|
|
242
|
+
* `verifiedProof` is retained when supplied: both the reconcile path
|
|
243
|
+
* (`cluster/reconcile-block.ts`) and the certified push path (`BlockTransferService.handlePush`)
|
|
244
|
+
* pass the {@link BlockCommitProof} they verified against these exact bytes (`certifyContent`'s
|
|
245
|
+
* digest check), so a repaired replica serves the proof onward and certification no longer decays
|
|
246
|
+
* across repair hops.
|
|
247
|
+
*
|
|
248
|
+
* When the push does NOT advance `latest` (this node already holds that revision), `saveReplica`
|
|
249
|
+
* is a no-op and persists nothing — so the proof is back-filled here instead, through
|
|
250
|
+
* {@link backFillProof}'s digest-match rule. It is deliberately NOT persisted inside
|
|
251
|
+
* `saveReplica`: the proof was verified against the PUSHED bytes, while a back-fill attaches it to
|
|
252
|
+
* this node's HELD materialization, and a diverged holder's bytes at the same `(rev, actionId)`
|
|
253
|
+
* may differ. Storing a proof whose declared digest contradicts local content would make this node
|
|
254
|
+
* serve content that fails its own proof — `digest-mismatch` is an ATTRIBUTABLE fault in
|
|
255
|
+
* `certified-claims.ts`, so every receiver would penalize it.
|
|
256
|
+
*/
|
|
257
|
+
saveReplicatedBlock(blockId: BlockId, block: IBlock, source?: ActionRev, verifiedProof?: BlockCommitProof): Promise<void>;
|
|
258
|
+
/**
|
|
259
|
+
* The digest the block WOULD materialize to if `actionId`'s pending transform committed at `rev`,
|
|
260
|
+
* plus the base revision it was computed from. Read-only: touches no durable state and takes no
|
|
261
|
+
* block write latch.
|
|
262
|
+
*
|
|
263
|
+
* Mirrors {@link internalCommit}'s reads (pending transform → latest → base → applyTransform) so
|
|
264
|
+
* the prediction and the eventual commit cannot drift. Consumed by the cluster member's
|
|
265
|
+
* promise-round content-digest check (`ClusterMember.validateCommitOperations`), which compares it
|
|
266
|
+
* against the digest the transaction author declared on the commit request.
|
|
267
|
+
*
|
|
268
|
+
* Deliberately does NOT take the block write latch: this runs on the vote path, ahead of the
|
|
269
|
+
* commit that will take it, so taking it here would serialize voting behind commits and risks
|
|
270
|
+
* deadlocking against commit's sorted up-front multi-block latch acquisition. The price is that a
|
|
271
|
+
* concurrent commit can move `latest` mid-preview; the caller's checkable rule (base-independent,
|
|
272
|
+
* or `baseRev` agreement) makes a torn read at worst an abstain, never a false reject of honest
|
|
273
|
+
* content.
|
|
274
|
+
*
|
|
275
|
+
* `rev` is accepted for parity/logging with the commit that would follow; materialization does not
|
|
276
|
+
* depend on it (internalCommit only records it).
|
|
277
|
+
*
|
|
278
|
+
* Returns `undefined` when this node holds no pending transform for the action (it never saw the
|
|
279
|
+
* pend) — distinct from a defined preview with `digest: undefined` (see {@link CommitDigestPreview}).
|
|
280
|
+
*/
|
|
281
|
+
previewCommitDigest(blockId: BlockId, actionId: ActionId, rev: number): Promise<CommitDigestPreview | undefined>;
|
|
282
|
+
/**
|
|
283
|
+
* See {@link IRevisionActionReader}. Reads the block's revision index directly
|
|
284
|
+
* (`listRevisions(rev, rev)` — both bounds inclusive per the `IBlockStorage` contract); an empty
|
|
285
|
+
* range means this node holds no record for that revision.
|
|
286
|
+
*/
|
|
287
|
+
getRevisionAction(blockId: BlockId, rev: number): Promise<ActionId | undefined>;
|
|
288
|
+
/**
|
|
289
|
+
* The {@link BlockCommitProof} this node retained for `blockId` at `rev`, or `undefined` when it
|
|
290
|
+
* kept none — a revision committed before proofs were persisted, a member whose materialization
|
|
291
|
+
* diverged from the declared digest (see {@link persistProofIfContentMatches}), or simply a
|
|
292
|
+
* revision this node never landed.
|
|
293
|
+
*
|
|
294
|
+
* Public because a peer answering a block-repair fetch serves the proof alongside the revision
|
|
295
|
+
* (`serveBlockArchive`), which is the only way a requester can check a lone holder's claim
|
|
296
|
+
* without a second holder to corroborate it. Read-only and unlatched: a proof is written once
|
|
297
|
+
* and never mutated, so a concurrent commit can only make this return a proof for a revision
|
|
298
|
+
* that just became stale — which the caller pairs with the revision it actually read.
|
|
165
299
|
*/
|
|
166
|
-
|
|
300
|
+
getBlockProof(blockId: BlockId, rev: number): Promise<BlockCommitProof | undefined>;
|
|
167
301
|
private internalCommit;
|
|
302
|
+
/**
|
|
303
|
+
* Retain `proof` for a block this call found ALREADY committed at `(rev, actionId)` — the paths
|
|
304
|
+
* that land (or find already landed) a revision without running {@link internalCommit}, and would
|
|
305
|
+
* otherwise never retain a proof: the idempotent re-commit partition, the Crash-D3 `recover()`
|
|
306
|
+
* partition, and {@link saveReplicatedBlock}'s monotonic no-op on a certified push. Strictly
|
|
307
|
+
* additive: an existing proof is left alone, and the same digest-match rule as the fresh-commit
|
|
308
|
+
* site decides retention.
|
|
309
|
+
*
|
|
310
|
+
* `rev`/`actionId` are passed separately rather than as a `CommitRequest` because the replica
|
|
311
|
+
* caller has no commit request — it has the `(rev, actionId)` the push and the held revision
|
|
312
|
+
* agree on.
|
|
313
|
+
*
|
|
314
|
+
* Callers must hold the block's write latch (`latch`). `getBlock` is local-only and can throw on
|
|
315
|
+
* an unmaterializable or uncovered base — treated as "no local content", i.e. the proof is withheld.
|
|
316
|
+
*/
|
|
317
|
+
private backFillProof;
|
|
318
|
+
/**
|
|
319
|
+
* The single retention rule for {@link BlockCommitProof}s, shared by the fresh-commit site
|
|
320
|
+
* ({@link internalCommit}, after `setLatest`) and the already-landed back-fill
|
|
321
|
+
* ({@link backFillProof}):
|
|
322
|
+
*
|
|
323
|
+
* > **A member persists the proof only when its own materialization matches the digest the
|
|
324
|
+
* > commit operation declared for this block.**
|
|
325
|
+
*
|
|
326
|
+
* One rule covers every awkward case without a second flag: a DIVERGED member (committed onto a
|
|
327
|
+
* lagging base) computes a different hash, stores no proof, and falls back to corroboration
|
|
328
|
+
* exactly as today — the `commit:proof-digest-mismatch` log line is also the first signal this
|
|
329
|
+
* system has ever had that a member diverged. A member that abstained at vote time still checks
|
|
330
|
+
* here (by commit time it HAS materialized) and legitimately keeps the proof on agreement. A
|
|
331
|
+
* tombstone (no `block`) and a commit with no `blockDigests` (pre-upgrade client) declare no
|
|
332
|
+
* digest and store no proof (`commit:proof-undeclared`).
|
|
333
|
+
*
|
|
334
|
+
* Never throws: the commit this proof describes already durably landed, so a proof-persist
|
|
335
|
+
* fault must not turn `commit()` into `success:false` for a landed commit — it is logged and
|
|
336
|
+
* the proof simply is not retained (repair falls back to corroboration).
|
|
337
|
+
*
|
|
338
|
+
* NOTE: one commit of N blocks stores the SAME proof under each block's `(blockId, rev)` proofs-store key, and
|
|
339
|
+
* the proof itself carries the commit op's N `blockIds`/`blockDigests` — so bytes retained per
|
|
340
|
+
* commit grow with N². Measured base cost is ~4.6 KB for a 10-peer 2-block commit
|
|
341
|
+
* (`test/commit-proof.spec.ts` "size"), and nothing today bounds `CommitRequest.blockIds`. Fine
|
|
342
|
+
* at the handful-of-blocks batches the transactor produces now; if per-coordinator batches ever
|
|
343
|
+
* grow large, store the proof once under its `messageHash` and key each revision to a pointer.
|
|
344
|
+
*/
|
|
345
|
+
private persistProofIfContentMatches;
|
|
168
346
|
/**
|
|
169
347
|
* The materialization this commit builds on: the block at `latest`, or `undefined` when the block
|
|
170
348
|
* holds no committed revision yet (the normal insert case).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-repo.d.ts","sourceRoot":"","sources":["../../../src/storage/storage-repo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"storage-repo.d.ts","sourceRoot":"","sources":["../../../src/storage/storage-repo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EACnH,QAAQ,EAAE,SAAS,EACH,MAAM,EAAE,SAAS,EACjC,kBAAkB,EAAE,uBAAuB,EAC3C,YAAY,EAAE,oBAAoB,EAAE,wBAAwB,EAE5D,MAAM,qBAAqB,CAAC;AAM7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAQxF;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,0BAA0B,CAAC;AAEpE;;;;;GAKG;AACH,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE9E;;;;;;GAMG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM;gBAAtC,OAAO,EAAE,OAAO,EAAW,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI3E;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAE1E;AAED,MAAM,MAAM,kBAAkB,GAAG;IAChC,6DAA6D;IAC7D,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC;;;;;;;;;;;;;OAaG;IACH,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;CAClD,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAAG;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACtC,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;CACjH;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IACrC,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1G;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,qBAAqB;IACrC;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;CAChF;AAED,qBAAa,WAAY,YAAW,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,qBAAqB;IASvJ,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IARpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;IAClE,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0D;IAC1F,oFAAoF;IACpF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAuC;gBAGxD,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,aAAa,EACxE,OAAO,CAAC,EAAE,kBAAkB;IAM7B;;;OAGG;IACH,kBAAkB,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,wBAAwB,GAAG,MAAM,IAAI;IAqB9F;;;;;;OAMG;IACH,qBAAqB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,MAAM,IAAI;IAUrE;;;;;;;;;;OAUG;IACH,OAAO,CAAC,qBAAqB;IAiB7B,wHAAwH;IACxH,OAAO,CAAC,mBAAmB;IAUrB,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IA8LhG;;;;;;;;;;;;;;;OAeG;YACW,gBAAgB;IA8B9B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAqBhB,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;IAyJ1E,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/E;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACG,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;IA0NhH;;;;;;;;;;;;;;;;;;;OAmBG;YACW,wBAAwB;IAkBtC;;;;;;OAMG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqD/H;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAyCtH;;;;OAIG;IACG,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAQrF;;;;;;;;;;;OAWG;IACG,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;YAI3E,cAAc;IAmF5B;;;;;;;;;;;;;;OAcG;YACW,aAAa;IAgB3B;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;YACW,4BAA4B;IA8B1C;;;;;;;;;;;;;;;;;;;;;;OAsBG;YACW,cAAc;IA0C5B;;;;;;;;;OASG;YACW,iBAAiB;CAY/B"}
|