@optimystic/db-p2p 0.16.3 → 0.18.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/block-transfer-service.d.ts +14 -1
- package/dist/src/cluster/block-transfer-service.d.ts.map +1 -1
- package/dist/src/cluster/block-transfer-service.js +12 -3
- package/dist/src/cluster/block-transfer-service.js.map +1 -1
- package/dist/src/cluster/cluster-policy.d.ts +112 -0
- package/dist/src/cluster/cluster-policy.d.ts.map +1 -0
- package/dist/src/cluster/cluster-policy.js +88 -0
- package/dist/src/cluster/cluster-policy.js.map +1 -0
- package/dist/src/cluster/cluster-repo.d.ts +41 -13
- package/dist/src/cluster/cluster-repo.d.ts.map +1 -1
- package/dist/src/cluster/cluster-repo.js +116 -23
- package/dist/src/cluster/cluster-repo.js.map +1 -1
- package/dist/src/cluster/quorum-restore.d.ts +64 -14
- package/dist/src/cluster/quorum-restore.d.ts.map +1 -1
- package/dist/src/cluster/quorum-restore.js +0 -0
- package/dist/src/cluster/quorum-restore.js.map +1 -1
- package/dist/src/cluster/reconcile-block.d.ts +60 -0
- package/dist/src/cluster/reconcile-block.d.ts.map +1 -0
- package/dist/src/cluster/reconcile-block.js +133 -0
- package/dist/src/cluster/reconcile-block.js.map +1 -0
- package/dist/src/cluster/service.d.ts +4 -1
- package/dist/src/cluster/service.d.ts.map +1 -1
- package/dist/src/cluster/service.js +9 -1
- package/dist/src/cluster/service.js.map +1 -1
- package/dist/src/cluster/spread-on-churn.d.ts.map +1 -1
- package/dist/src/cluster/spread-on-churn.js +8 -0
- package/dist/src/cluster/spread-on-churn.js.map +1 -1
- package/dist/src/inbound-authorization.d.ts +117 -0
- package/dist/src/inbound-authorization.d.ts.map +1 -0
- package/dist/src/inbound-authorization.js +149 -0
- package/dist/src/inbound-authorization.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/libp2p-key-network.d.ts +14 -0
- package/dist/src/libp2p-key-network.d.ts.map +1 -1
- package/dist/src/libp2p-key-network.js +54 -4
- package/dist/src/libp2p-key-network.js.map +1 -1
- package/dist/src/libp2p-node-base.d.ts +48 -7
- package/dist/src/libp2p-node-base.d.ts.map +1 -1
- package/dist/src/libp2p-node-base.js +61 -83
- package/dist/src/libp2p-node-base.js.map +1 -1
- package/dist/src/repo/cluster-coordinator.d.ts +21 -3
- package/dist/src/repo/cluster-coordinator.d.ts.map +1 -1
- package/dist/src/repo/cluster-coordinator.js +27 -5
- package/dist/src/repo/cluster-coordinator.js.map +1 -1
- package/dist/src/repo/coordinator-repo.d.ts +123 -16
- package/dist/src/repo/coordinator-repo.d.ts.map +1 -1
- package/dist/src/repo/coordinator-repo.js +354 -49
- package/dist/src/repo/coordinator-repo.js.map +1 -1
- package/dist/src/repo/service.d.ts +4 -1
- package/dist/src/repo/service.d.ts.map +1 -1
- package/dist/src/repo/service.js +9 -1
- package/dist/src/repo/service.js.map +1 -1
- package/dist/src/storage/block-storage.d.ts.map +1 -1
- package/dist/src/storage/block-storage.js +11 -0
- package/dist/src/storage/block-storage.js.map +1 -1
- package/dist/src/storage/storage-repo.d.ts +56 -0
- package/dist/src/storage/storage-repo.d.ts.map +1 -1
- package/dist/src/storage/storage-repo.js +155 -13
- package/dist/src/storage/storage-repo.js.map +1 -1
- package/dist/src/sync/service.d.ts +4 -7
- package/dist/src/sync/service.d.ts.map +1 -1
- package/dist/src/sync/service.js +13 -10
- package/dist/src/sync/service.js.map +1 -1
- package/dist/src/testing/mesh-harness.d.ts +10 -0
- package/dist/src/testing/mesh-harness.d.ts.map +1 -1
- package/dist/src/testing/mesh-harness.js +55 -49
- package/dist/src/testing/mesh-harness.js.map +1 -1
- package/package.json +2 -2
- package/{README.md → readme.md} +37 -0
- package/src/cluster/block-transfer-service.ts +20 -5
- package/src/cluster/cluster-policy.ts +152 -0
- package/src/cluster/cluster-repo.ts +121 -26
- package/src/cluster/quorum-restore.ts +0 -0
- package/src/cluster/reconcile-block.ts +191 -0
- package/src/cluster/service.ts +10 -3
- package/src/cluster/spread-on-churn.ts +8 -0
- package/src/inbound-authorization.ts +190 -0
- package/src/index.ts +1 -0
- package/src/libp2p-key-network.ts +54 -4
- package/src/libp2p-node-base.ts +111 -94
- package/src/repo/cluster-coordinator.ts +30 -6
- package/src/repo/coordinator-repo.ts +419 -58
- package/src/repo/service.ts +10 -3
- package/src/storage/block-storage.ts +11 -0
- package/src/storage/storage-repo.ts +172 -15
- package/src/sync/service.ts +14 -12
- package/src/testing/mesh-harness.ts +55 -49
|
@@ -1,12 +1,48 @@
|
|
|
1
1
|
import { LruMap, blockIdsForTransforms, DEFAULT_SUPER_MAJORITY_THRESHOLD } from "@optimystic/db-core";
|
|
2
|
-
import { ClusterCoordinator } from "./cluster-coordinator.js";
|
|
2
|
+
import { ClusterCoordinator, ValidatorRejectionError } from "./cluster-coordinator.js";
|
|
3
3
|
import { peerIdFromString } from "@libp2p/peer-id";
|
|
4
4
|
import { createLogger } from '../logger.js';
|
|
5
5
|
import { PenaltyReason } from "../reputation/types.js";
|
|
6
|
-
import { selectQuorumRev } from "../cluster/quorum-restore.js";
|
|
6
|
+
import { quorumSize, corroboratorCapacity, selectQuorumRev } from "../cluster/quorum-restore.js";
|
|
7
|
+
import { RECONCILE_TIMEOUT_MS } from "../cluster/reconcile-block.js";
|
|
8
|
+
import { isMissingBaseRevisionFailure, MISSING_BASE_REVISION_REASON } from "../storage/storage-repo.js";
|
|
7
9
|
const log = createLogger('coordinator-repo');
|
|
10
|
+
/** True when a freshly-read local revision is strictly ahead of the baseline the repair started from. */
|
|
11
|
+
function isAdvanceOver(rev, baselineRev) {
|
|
12
|
+
return typeof rev === 'number' && (baselineRev === undefined || rev > baselineRev);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Reject if `promise` has not settled within `ms`. The timer is cleared on either outcome, so no
|
|
16
|
+
* handle outlives the race (hence no `unref`, which does not exist off Node).
|
|
17
|
+
*/
|
|
18
|
+
function withDeadline(promise, ms, label) {
|
|
19
|
+
let timer;
|
|
20
|
+
const deadline = new Promise((_, reject) => {
|
|
21
|
+
timer = setTimeout(() => reject(new Error(`${label} timed out after ${ms}ms`)), ms);
|
|
22
|
+
});
|
|
23
|
+
return Promise.race([promise, deadline]).finally(() => {
|
|
24
|
+
if (timer !== undefined)
|
|
25
|
+
clearTimeout(timer);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resolve `undefined` if `promise` has not settled within `ms` — a slow peer is skipped, not an
|
|
30
|
+
* error. Same timer discipline as {@link withDeadline}: one repair pass races this once per cohort
|
|
31
|
+
* peer, so leaving the handles pending would keep the event loop alive for the full timeout after
|
|
32
|
+
* every peer has already answered.
|
|
33
|
+
*/
|
|
34
|
+
function withTimeout(promise, ms) {
|
|
35
|
+
let timer;
|
|
36
|
+
const expiry = new Promise(resolve => {
|
|
37
|
+
timer = setTimeout(() => resolve(undefined), ms);
|
|
38
|
+
});
|
|
39
|
+
return Promise.race([promise, expiry]).finally(() => {
|
|
40
|
+
if (timer !== undefined)
|
|
41
|
+
clearTimeout(timer);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
8
44
|
export function coordinatorRepo(keyNetwork, createClusterClient, cfg, fretService, reputation, stateStore) {
|
|
9
|
-
return (components) => new CoordinatorRepo(keyNetwork, createClusterClient, components.storageRepo, cfg, components.localCluster, components.localPeerId, fretService, components.clusterLatestCallback, reputation, stateStore);
|
|
45
|
+
return (components) => new CoordinatorRepo(keyNetwork, createClusterClient, components.storageRepo, cfg, components.localCluster, components.localPeerId, fretService, components.clusterLatestCallback, reputation, stateStore, components.acquireBlockFromCohort);
|
|
10
46
|
}
|
|
11
47
|
/** Cluster coordination repo - uses local store, as well as distributes changes to other nodes using cluster consensus. */
|
|
12
48
|
export class CoordinatorRepo {
|
|
@@ -14,6 +50,7 @@ export class CoordinatorRepo {
|
|
|
14
50
|
createClusterClient;
|
|
15
51
|
storageRepo;
|
|
16
52
|
clusterLatestCallback;
|
|
53
|
+
acquireBlockFromCohort;
|
|
17
54
|
coordinator;
|
|
18
55
|
DEFAULT_TIMEOUT = 30000; // 30 seconds default timeout
|
|
19
56
|
localPeerId;
|
|
@@ -25,6 +62,13 @@ export class CoordinatorRepo {
|
|
|
25
62
|
readRepairSampleRate;
|
|
26
63
|
/** Simple-majority threshold from the consensus policy; drives the read-repair corroboration quorum. */
|
|
27
64
|
simpleMajorityThreshold;
|
|
65
|
+
/**
|
|
66
|
+
* Yardstick the read-repair corroboration floor is measured against; the floor for
|
|
67
|
+
* {@link corroboratorCapacity}. Resolved by `resolveClusterPolicy` for a real node; falls back to
|
|
68
|
+
* `assumedClusterSize` and then `clusterSize` for direct constructors (see the constructor), so a
|
|
69
|
+
* caller that has adopted neither field keeps today's behavior exactly.
|
|
70
|
+
*/
|
|
71
|
+
repairCorroborationClusterSize;
|
|
28
72
|
/** Resolved super-majority threshold the coordinator commits on (mirrors the value handed to ClusterCoordinator). */
|
|
29
73
|
superMajorityThreshold;
|
|
30
74
|
reputation;
|
|
@@ -32,14 +76,16 @@ export class CoordinatorRepo {
|
|
|
32
76
|
now = () => Date.now();
|
|
33
77
|
/** Test seam: overridable RNG (0..1) for sample-rate gating. */
|
|
34
78
|
rand = () => Math.random();
|
|
35
|
-
constructor(keyNetwork, createClusterClient, storageRepo, cfg, localCluster, localPeerId, fretService, clusterLatestCallback, reputation, stateStore) {
|
|
79
|
+
constructor(keyNetwork, createClusterClient, storageRepo, cfg, localCluster, localPeerId, fretService, clusterLatestCallback, reputation, stateStore, acquireBlockFromCohort) {
|
|
36
80
|
this.keyNetwork = keyNetwork;
|
|
37
81
|
this.createClusterClient = createClusterClient;
|
|
38
82
|
this.storageRepo = storageRepo;
|
|
39
83
|
this.clusterLatestCallback = clusterLatestCallback;
|
|
84
|
+
this.acquireBlockFromCohort = acquireBlockFromCohort;
|
|
40
85
|
this.localPeerId = localPeerId;
|
|
41
86
|
const policy = {
|
|
42
87
|
clusterSize: cfg?.clusterSize ?? 10,
|
|
88
|
+
assumedClusterSize: cfg?.assumedClusterSize,
|
|
43
89
|
superMajorityThreshold: cfg?.superMajorityThreshold ?? DEFAULT_SUPER_MAJORITY_THRESHOLD,
|
|
44
90
|
simpleMajorityThreshold: cfg?.simpleMajorityThreshold ?? 0.51,
|
|
45
91
|
minAbsoluteClusterSize: cfg?.minAbsoluteClusterSize ?? 3,
|
|
@@ -64,6 +110,15 @@ export class CoordinatorRepo {
|
|
|
64
110
|
this.readRepairSampleRate = policy.readRepairSampleRate;
|
|
65
111
|
this.simpleMajorityThreshold = policy.simpleMajorityThreshold;
|
|
66
112
|
this.superMajorityThreshold = policy.superMajorityThreshold;
|
|
113
|
+
// Unlike the membership admission gate (which treats an absent assumedClusterSize as "unknown"
|
|
114
|
+
// and admits — refusing writes outright is unacceptable), this falls back to the replication
|
|
115
|
+
// factor and stays strict: the failure mode of getting this wrong is a block that goes
|
|
116
|
+
// unrepaired, degraded rather than dead, so there is no reason to relax it for a caller that
|
|
117
|
+
// has not adopted the new field. A real node is handed an explicit
|
|
118
|
+
// `repairCorroborationClusterSize` by `resolveClusterPolicy`; the `assumedClusterSize` middle
|
|
119
|
+
// term keeps direct constructors (embedders, existing tests) behaving as before.
|
|
120
|
+
this.repairCorroborationClusterSize =
|
|
121
|
+
cfg?.repairCorroborationClusterSize ?? policy.assumedClusterSize ?? policy.clusterSize;
|
|
67
122
|
this.reputation = reputation;
|
|
68
123
|
const localClusterRef = localCluster && localPeerId ? {
|
|
69
124
|
update: localCluster.update.bind(localCluster),
|
|
@@ -130,6 +185,13 @@ export class CoordinatorRepo {
|
|
|
130
185
|
}
|
|
131
186
|
async get(blockGets, options) {
|
|
132
187
|
// Soft proximity check — warn but still serve reads for graceful degradation
|
|
188
|
+
// NOTE: a soft-served read now also *acquires* the block durably (see restoreCorroborated), where
|
|
189
|
+
// before it could at most promote a pending this node already held. So a soft serve leaves behind
|
|
190
|
+
// a replica of a block this node is not responsible for, and nothing sweeps those: ring-shift
|
|
191
|
+
// sheds a keyspace RANGE, not "blocks outside my cohort". Fine while soft serves are what they
|
|
192
|
+
// are meant to be — a rare degradation during routing churn — since routing already placed this
|
|
193
|
+
// node near the block. If they ever become routine, gate acquisition (not the serve itself) on
|
|
194
|
+
// isResponsibleForBlock.
|
|
133
195
|
for (const blockId of blockGets.blockIds) {
|
|
134
196
|
if (!await this.isResponsibleForBlock(blockId)) {
|
|
135
197
|
log('proximity:get-warning', { blockId, msg: 'serving read for non-responsible block' });
|
|
@@ -141,14 +203,21 @@ export class CoordinatorRepo {
|
|
|
141
203
|
// (a) Missing — block isn't present locally at all (legacy behavior).
|
|
142
204
|
// (b) Stale-by-policy — block is present but read-repair policy says verify.
|
|
143
205
|
// Skip cluster fetch if this is already a sync request (to prevent recursive queries).
|
|
206
|
+
// A sync read is also never marked `unavailable` here — the consult it skips is the
|
|
207
|
+
// one whose failure the flag reports, and flagging would feed the recursion this
|
|
208
|
+
// bypass exists to prevent. (Storage-level 'unmaterializable' flags still pass
|
|
209
|
+
// through untouched; they report local state, not the consult.)
|
|
144
210
|
const skipClusterFetch = options?.skipClusterFetch;
|
|
145
211
|
// NOTE: NetworkTransactor.get treats an authoritative "absent" ({ state: {} })
|
|
146
212
|
// as final and no longer retries it (ticket txn-perf-authoritative-notfound),
|
|
147
|
-
// relying on this cluster reconciliation to have already run.
|
|
148
|
-
//
|
|
149
|
-
//
|
|
150
|
-
//
|
|
151
|
-
//
|
|
213
|
+
// relying on this cluster reconciliation to have already run. When the consult
|
|
214
|
+
// runs and FAILS, the entry is flagged `unavailable: 'peers-unreachable'` below,
|
|
215
|
+
// which re-enables the transactor-level retry against a different peer. If a
|
|
216
|
+
// coordinator is configured WITHOUT clusterLatestCallback, there is no cohort to
|
|
217
|
+
// consult and the local answer IS the whole truth — it stays authoritative, with
|
|
218
|
+
// no flag and no transactor-level retry to compensate. That is fine (such a
|
|
219
|
+
// coordinator has no cluster to reconcile against), but keep this coupling in
|
|
220
|
+
// mind if a partial-cluster read path is added.
|
|
152
221
|
if (this.clusterLatestCallback && !skipClusterFetch) {
|
|
153
222
|
for (const blockId of blockGets.blockIds) {
|
|
154
223
|
const localEntry = localResult[blockId];
|
|
@@ -166,7 +235,7 @@ export class CoordinatorRepo {
|
|
|
166
235
|
});
|
|
167
236
|
}
|
|
168
237
|
try {
|
|
169
|
-
await this.fetchBlockFromCluster(blockId, blockGets.context);
|
|
238
|
+
await this.fetchBlockFromCluster(blockId, blockGets.context, localRev);
|
|
170
239
|
const refreshed = await this.storageRepo.get({ blockIds: [blockId], context: blockGets.context }, options);
|
|
171
240
|
const newRev = refreshed[blockId]?.state?.latest?.rev;
|
|
172
241
|
if (refreshed[blockId]) {
|
|
@@ -183,6 +252,24 @@ export class CoordinatorRepo {
|
|
|
183
252
|
}
|
|
184
253
|
catch (err) {
|
|
185
254
|
log('cluster-fetch:error', { blockId, error: err.message });
|
|
255
|
+
// The consult that was supposed to make this answer trustworthy did not run.
|
|
256
|
+
// Only a locally-MISSING block is downgraded to `unavailable`: a merely-stale
|
|
257
|
+
// block still has a real local answer and stays authoritative. A sharper flag
|
|
258
|
+
// already on the entry (storage's 'unmaterializable') is never overwritten.
|
|
259
|
+
// NOTE: a consult that runs but corroborates nothing (per-peer timeouts and
|
|
260
|
+
// "peer holds nothing" both surface as absent claims → no quorum) does NOT
|
|
261
|
+
// land here and stays an authoritative absent — the common new-collection
|
|
262
|
+
// probe against a healthy cohort takes exactly that path, and the callback
|
|
263
|
+
// contract cannot distinguish the two without counting responders.
|
|
264
|
+
if (isMissing) {
|
|
265
|
+
const entry = localResult[blockId];
|
|
266
|
+
if (!entry) {
|
|
267
|
+
localResult[blockId] = { state: {}, unavailable: 'peers-unreachable' };
|
|
268
|
+
}
|
|
269
|
+
else if (entry.unavailable === undefined) {
|
|
270
|
+
entry.unavailable = 'peers-unreachable';
|
|
271
|
+
}
|
|
272
|
+
}
|
|
186
273
|
}
|
|
187
274
|
}
|
|
188
275
|
}
|
|
@@ -225,7 +312,12 @@ export class CoordinatorRepo {
|
|
|
225
312
|
setLastSeenForTest(blockId, ts) {
|
|
226
313
|
this.lastSeenCommitMs.set(blockId, ts);
|
|
227
314
|
}
|
|
228
|
-
|
|
315
|
+
/**
|
|
316
|
+
* One repair pass for a block: ask the cohort what it holds, and converge onto that if it is
|
|
317
|
+
* ahead of `localRev` — the revision the caller's read already loaded, and the baseline every
|
|
318
|
+
* decision below is measured against.
|
|
319
|
+
*/
|
|
320
|
+
async fetchBlockFromCluster(blockId, context, localRev) {
|
|
229
321
|
if (!this.clusterLatestCallback)
|
|
230
322
|
return;
|
|
231
323
|
const blockIdBytes = new TextEncoder().encode(blockId);
|
|
@@ -243,37 +335,163 @@ export class CoordinatorRepo {
|
|
|
243
335
|
log('cluster-fetch:solo-self-skip', { blockId });
|
|
244
336
|
return;
|
|
245
337
|
}
|
|
246
|
-
const
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
338
|
+
const { corroborated, local } = await this.queryClusterForLatest(peerIds, blockId, context);
|
|
339
|
+
// Nothing corroborated: keep local data AND stay eligible for repair — marking the
|
|
340
|
+
// block seen here would suppress the next attempt for the whole read-repair window.
|
|
341
|
+
if (!corroborated)
|
|
342
|
+
return;
|
|
343
|
+
// The self answer is the sharper baseline (same storage, same context, read alongside the
|
|
344
|
+
// cohort's), but it exists only when `findCluster` returned this node. A soft serve for a
|
|
345
|
+
// block this node is no longer responsible for is absent from its own cohort view, so fall
|
|
346
|
+
// back to the revision the caller's read already loaded. Without the fallback both decisions
|
|
347
|
+
// below degrade to "any local revision is an advance", which restores backwards and reports
|
|
348
|
+
// a sync at the revision the pass started from.
|
|
349
|
+
const baselineRev = local?.rev ?? localRev;
|
|
350
|
+
// Never restore backwards. With this node's own claim excluded from the quorum, a
|
|
351
|
+
// cohort that lags behind the reader corroborates an OLDER revision; adopting it
|
|
352
|
+
// would be a regression, and logging it as a sync would be a lie. The cohort did
|
|
353
|
+
// answer, so the block is verified fresh — mark it seen.
|
|
354
|
+
// NOTE: in a cohort of two, that sole peer is the only corroborator, so a lying one can park
|
|
355
|
+
// the reader here — corroborating the revision it already holds — and re-arm the lazy window
|
|
356
|
+
// on every pass, hiding a real divergence. Bounded by `readRepairWindowMs` (10s default) and
|
|
357
|
+
// no worse than the peer simply staying silent. If two-member cohorts become a supported
|
|
358
|
+
// production topology rather than a dev convenience, stop re-arming the window on a
|
|
359
|
+
// corroboration that came from a single voter.
|
|
360
|
+
if (baselineRev !== undefined && corroborated.rev <= baselineRev) {
|
|
361
|
+
log('cluster-fetch:local-current', { blockId, localRev: baselineRev, clusterRev: corroborated.rev });
|
|
251
362
|
this.markBlocksSeen([blockId]);
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
// Corroborated revision is ahead of ours — converge onto it.
|
|
366
|
+
const rev = await this.restoreCorroborated(blockId, corroborated, baselineRev, peerIds);
|
|
367
|
+
// Log the OUTCOME, not the attempt. Logging `synced` unconditionally reported hundreds of
|
|
368
|
+
// phantom convergences per run and made a real replication defect invisible for two debugging
|
|
369
|
+
// sessions.
|
|
370
|
+
if (rev !== undefined) {
|
|
371
|
+
log('cluster-fetch:synced', { blockId, rev });
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
log('cluster-fetch:not-restored', { blockId, localRev: baselineRev, clusterRev: corroborated.rev });
|
|
375
|
+
}
|
|
376
|
+
// The block is marked seen either way — the cohort DID answer, so its freshness was checked,
|
|
377
|
+
// which is what the read-repair window tracks. A failed convergence therefore waits out the
|
|
378
|
+
// window before retrying.
|
|
379
|
+
// NOTE: that damping covers only a block this node holds at an OLDER revision. A block entirely
|
|
380
|
+
// missing locally never consults the window (`get` triggers on `isMissing` before
|
|
381
|
+
// `shouldReadRepair`), so a persistently failing acquisition — e.g. a two-node deployment that
|
|
382
|
+
// never set `assumedClusterSize`, where the content quorum can never be met — re-fetches an
|
|
383
|
+
// archive on every read of that block. Correct, and self-limiting once the cohort can agree; if
|
|
384
|
+
// it ever shows as read amplification, gate the acquisition step (not the latest-query) on the
|
|
385
|
+
// same window rather than widening `isMissing`.
|
|
386
|
+
this.markBlocksSeen([blockId]);
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Bring this node up to the cohort-corroborated `corroborated`, returning the revision it holds
|
|
390
|
+
* afterwards when that is an advance over `baselineRev`, else `undefined`.
|
|
391
|
+
*
|
|
392
|
+
* Two mechanisms, cheapest first:
|
|
393
|
+
* 1. **Promote a local pending** — free, no network, and the only mechanism that existed before
|
|
394
|
+
* block acquisition. Covers the node that saw the pend and missed the commit broadcast.
|
|
395
|
+
* 2. **Acquire the bytes from the cohort** ({@link AcquireBlockCallback}) — covers everything else,
|
|
396
|
+
* including a block this node has never seen at all.
|
|
397
|
+
*
|
|
398
|
+
* **Why acquisition is gated here and not on a plain local miss.** `BlockStorage.getBlock` returns
|
|
399
|
+
* `undefined` for a block with no local metadata *without* consulting its restore callback, so that
|
|
400
|
+
* an insert probing a fresh random block id for a collision does not cost a network fetch. That
|
|
401
|
+
* remains true: this method runs only after {@link queryClusterForLatest} produced a quorum-
|
|
402
|
+
* corroborated `(rev, actionId)`, which a genuinely non-existent block can never produce (no peer
|
|
403
|
+
* claims it, so `selectQuorumRev` declines and `fetchBlockFromCluster` returns before reaching
|
|
404
|
+
* here). The cost of a genuine absence is unchanged — the latest-query round trip that already
|
|
405
|
+
* happened — while a block the cohort demonstrably holds is no longer thrown away.
|
|
406
|
+
*
|
|
407
|
+
* Cohort peer ids are passed straight through: the callback filters self out and caps its own
|
|
408
|
+
* corroboration quorum by how many peers could answer at all.
|
|
409
|
+
*/
|
|
410
|
+
async restoreCorroborated(blockId, corroborated, baselineRev, cohortPeerIds) {
|
|
411
|
+
const promoted = await this.promoteCorroborated(blockId, corroborated);
|
|
412
|
+
if (isAdvanceOver(promoted, baselineRev)) {
|
|
413
|
+
return promoted;
|
|
252
414
|
}
|
|
415
|
+
if (!this.acquireBlockFromCohort) {
|
|
416
|
+
return undefined;
|
|
417
|
+
}
|
|
418
|
+
try {
|
|
419
|
+
// Bounded: a stalled cohort peer must not hold up the caller's read. Persisting happens
|
|
420
|
+
// inside the callback via `saveReplicatedBlock`, which takes the per-block commit latch —
|
|
421
|
+
// safe to call from here because the read path holds no latch of its own (`StorageRepo.get`
|
|
422
|
+
// acquires and releases it around the promotion above, and nothing wraps this method).
|
|
423
|
+
// NOTE: `get` walks its block ids sequentially, so the bound is per block, not per call — a
|
|
424
|
+
// multi-block read that is missing N blocks against a wholly stalled cohort waits N × this.
|
|
425
|
+
// Acceptable today (the underlying per-peer archive fetch is itself 1s-bounded and runs the
|
|
426
|
+
// cohort in parallel, so the 5s is a stall ceiling, not a typical cost). If a cold reader
|
|
427
|
+
// batching a wide read ever times out above this layer, repair the block ids concurrently
|
|
428
|
+
// rather than shortening the bound.
|
|
429
|
+
await withDeadline(this.acquireBlockFromCohort(blockId, corroborated, cohortPeerIds), RECONCILE_TIMEOUT_MS, `block acquisition for ${blockId}`);
|
|
430
|
+
}
|
|
431
|
+
catch (err) {
|
|
432
|
+
// Declines are cheap and retryable — nothing was persisted. Report and leave the block behind.
|
|
433
|
+
log('cluster-fetch:acquire-error', { blockId, rev: corroborated.rev, error: err.message });
|
|
434
|
+
return undefined;
|
|
435
|
+
}
|
|
436
|
+
const acquired = await this.readLocalRev(blockId);
|
|
437
|
+
return isAdvanceOver(acquired, baselineRev) ? acquired : undefined;
|
|
253
438
|
}
|
|
254
439
|
/**
|
|
255
|
-
*
|
|
256
|
-
*
|
|
440
|
+
* Promote a corroborated action this node already holds as a local pending — the no-network half of
|
|
441
|
+
* the repair. Returns the local revision afterwards.
|
|
442
|
+
*
|
|
443
|
+
* A pending-only block (metadata seeded by `savePendingTransaction`, no committed revision) asked
|
|
444
|
+
* for a forward revision no promotion can reach used to throw out of `BlockStorage.ensureRevision`;
|
|
445
|
+
* `StorageRepo.get` now reports it as an entry flagged `unavailable` instead (ticket
|
|
446
|
+
* repo-reports-unavailable-vs-absent). On THIS path either shape is an absence, not a read failure —
|
|
447
|
+
* acquisition is precisely the mechanism that can supply the revision — so both are logged as
|
|
448
|
+
* `promote-unavailable` and stepped over rather than short-circuiting the caller.
|
|
449
|
+
*/
|
|
450
|
+
async promoteCorroborated(blockId, corroborated) {
|
|
451
|
+
try {
|
|
452
|
+
const entry = await this.readLocalEntry(blockId, { committed: [corroborated], rev: corroborated.rev });
|
|
453
|
+
if (entry?.unavailable !== undefined) {
|
|
454
|
+
log('cluster-fetch:promote-unavailable', { blockId, rev: corroborated.rev, error: entry.unavailable });
|
|
455
|
+
return undefined;
|
|
456
|
+
}
|
|
457
|
+
return entry?.state?.latest?.rev;
|
|
458
|
+
}
|
|
459
|
+
catch (err) {
|
|
460
|
+
log('cluster-fetch:promote-unavailable', { blockId, rev: corroborated.rev, error: err.message });
|
|
461
|
+
return undefined;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
/** This node's own answer for a block, optionally driving a promotion context through the read.
|
|
465
|
+
* Callers that care whether the answer is authoritative inspect `entry.unavailable`. */
|
|
466
|
+
async readLocalEntry(blockId, context) {
|
|
467
|
+
const result = await this.storageRepo.get({ blockIds: [blockId], context });
|
|
468
|
+
return result[blockId];
|
|
469
|
+
}
|
|
470
|
+
/** This node's own `latest.rev` for a block, optionally driving a promotion context through the read. */
|
|
471
|
+
async readLocalRev(blockId, context) {
|
|
472
|
+
return (await this.readLocalEntry(blockId, context))?.state?.latest?.rev;
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Query cluster peers for their latest revision and return the highest revision
|
|
476
|
+
* corroborated by a quorum of distinct peers, alongside this node's own latest.
|
|
257
477
|
*
|
|
258
478
|
* Replaces the old "max rev any single peer reports" — which let one lying
|
|
259
479
|
* peer over-reporting its revision steer restoration — with quorum
|
|
260
|
-
* corroboration on the exact `(rev, actionId)` pair (see
|
|
261
|
-
*
|
|
262
|
-
*
|
|
263
|
-
*
|
|
264
|
-
* revision
|
|
480
|
+
* corroboration on the exact `(rev, actionId)` pair (see {@link selectQuorumRev}).
|
|
481
|
+
*
|
|
482
|
+
* This node's own answer is split out of the claim set rather than counted in it:
|
|
483
|
+
* `clusterLatestCallback` short-circuits self to local storage, so including it let a
|
|
484
|
+
* reader whose only peer timed out "corroborate" the very revision it was trying to
|
|
485
|
+
* repair. It is returned separately so the caller can compare, not vote.
|
|
265
486
|
*
|
|
266
487
|
* NOTE: the quorum is corroboration-of-a-claim, NOT Sybil-resistant cohort
|
|
267
|
-
* membership — a peer minting fresh keypairs still casts a vote
|
|
268
|
-
*
|
|
488
|
+
* membership — a peer minting fresh keypairs still casts a vote, and the claims
|
|
489
|
+
* themselves are bare assertions (a `BlockArchive` carries no commit certificate, so
|
|
490
|
+
* there is nothing here to verify a `(rev, actionId)` against). Commit-cert +
|
|
491
|
+
* membership anchoring is deferred to backlog
|
|
269
492
|
* `debt-read-repair-commit-cert-verification`.
|
|
270
493
|
*/
|
|
271
494
|
async queryClusterForLatest(peerIds, blockId, context) {
|
|
272
|
-
// Add timeout wrapper to prevent hanging on unresponsive peers
|
|
273
|
-
const withTimeout = (promise, timeoutMs) => Promise.race([
|
|
274
|
-
promise,
|
|
275
|
-
new Promise(resolve => setTimeout(() => resolve(undefined), timeoutMs))
|
|
276
|
-
]);
|
|
277
495
|
// Query peers in parallel for their latest revision (with 1s timeout per peer),
|
|
278
496
|
// tagging each response with the peer that made it so votes stay distinct.
|
|
279
497
|
const latestResults = await Promise.allSettled(peerIds.map(async (peerIdStr) => {
|
|
@@ -281,23 +499,39 @@ export class CoordinatorRepo {
|
|
|
281
499
|
const value = await withTimeout(this.clusterLatestCallback(peerId, blockId, context), 1000);
|
|
282
500
|
return { peerIdStr, value };
|
|
283
501
|
}));
|
|
502
|
+
// NOTE: self-exclusion is keyed on `localPeerId`, which is optional for the single-node/test
|
|
503
|
+
// construction this class has always tolerated. Left unset, this node's own answer is counted
|
|
504
|
+
// as a peer claim again. Harmless today — the self answer can only ever corroborate the
|
|
505
|
+
// revision already held, so the pass declines as `local-current` — but if a future caller can
|
|
506
|
+
// make self report something the reader does not hold, make `localPeerId` required instead.
|
|
507
|
+
const selfId = this.localPeerId?.toString();
|
|
508
|
+
let local;
|
|
284
509
|
const claims = [];
|
|
285
510
|
for (const result of latestResults) {
|
|
286
|
-
if (result.status
|
|
287
|
-
|
|
288
|
-
|
|
511
|
+
if (result.status !== 'fulfilled' || !result.value.value)
|
|
512
|
+
continue;
|
|
513
|
+
const { peerIdStr, value } = result.value;
|
|
514
|
+
if (peerIdStr === selfId) {
|
|
515
|
+
local = value;
|
|
516
|
+
continue;
|
|
289
517
|
}
|
|
518
|
+
claims.push({ peerId: peerIdStr, rev: value.rev, actionId: value.actionId });
|
|
290
519
|
}
|
|
291
|
-
const
|
|
520
|
+
const capacity = corroboratorCapacity(peerIds.filter(id => id !== selfId).length, this.repairCorroborationClusterSize);
|
|
521
|
+
const selected = selectQuorumRev(claims, this.simpleMajorityThreshold, capacity);
|
|
292
522
|
if (!selected) {
|
|
293
|
-
log('cluster-fetch:no-quorum', {
|
|
294
|
-
|
|
523
|
+
log('cluster-fetch:no-quorum', {
|
|
524
|
+
blockId,
|
|
525
|
+
responders: claims.length,
|
|
526
|
+
required: quorumSize(claims.length, this.simpleMajorityThreshold, capacity)
|
|
527
|
+
});
|
|
528
|
+
return { local };
|
|
295
529
|
}
|
|
296
530
|
// Best-effort: penalize peers whose claim contradicts the corroborated pair
|
|
297
531
|
// (an inflated rev the quorum outvoted, or conflicting content at the agreed
|
|
298
532
|
// rev). A lower rev is just lag, never penalized. Never let this throw.
|
|
299
533
|
this.penalizeContradictingRevClaims(claims, selected, blockId);
|
|
300
|
-
return { actionId: selected.actionId, rev: selected.rev };
|
|
534
|
+
return { corroborated: { actionId: selected.actionId, rev: selected.rev }, local };
|
|
301
535
|
}
|
|
302
536
|
/**
|
|
303
537
|
* Report peers whose reported latest contradicts the quorum-corroborated pair. Best-effort.
|
|
@@ -365,9 +599,62 @@ export class CoordinatorRepo {
|
|
|
365
599
|
}
|
|
366
600
|
catch (error) {
|
|
367
601
|
log('coordinator-repo:pend-error', { actionId: request.actionId, error: error.message });
|
|
602
|
+
const stale = await this.classifyStaleRejection(error, request, allBlockIds);
|
|
603
|
+
if (stale)
|
|
604
|
+
return stale;
|
|
368
605
|
throw error;
|
|
369
606
|
}
|
|
370
607
|
}
|
|
608
|
+
/**
|
|
609
|
+
* Decide whether a cluster validator rejection was an optimistic-concurrency loss — the block
|
|
610
|
+
* already advanced past the requested revision — rather than a genuine validation fault.
|
|
611
|
+
* A confirmed loss returns a {@link StaleFailure} carrying `conflict: true` so the caller
|
|
612
|
+
* receives a non-success *response* that says plainly it is a lost race: network-transactor's
|
|
613
|
+
* pend then takes its stale branch and both writers (`Collection.sync`, and the coordinator's
|
|
614
|
+
* multi-collection pendPhase via `isConflictFailure`) retry, instead of a thrown error escaping
|
|
615
|
+
* mid-batch (which splits multi-tree commits — see PartialCommitError).
|
|
616
|
+
*
|
|
617
|
+
* The failure carries no `missing` list: confirmation is a local re-read that reveals the
|
|
618
|
+
* revision is taken but not which actions took it, and no consumer rebases from `missing`
|
|
619
|
+
* anyway (it is only counted or logged). `conflict` conveys retryability directly instead.
|
|
620
|
+
*
|
|
621
|
+
* Confirmation is purely local: re-read the affected blocks from our own storage and require
|
|
622
|
+
* `latest.rev >= request.rev`. The signed reject-reason text is never consulted — it is
|
|
623
|
+
* free-form wire-visible prose and must not become control flow. Anything unconfirmed
|
|
624
|
+
* (including read errors during confirmation) stays a throw, preserving fail-fast for
|
|
625
|
+
* genuine validation faults.
|
|
626
|
+
*/
|
|
627
|
+
async classifyStaleRejection(error, request, blockIds) {
|
|
628
|
+
if (!(error instanceof ValidatorRejectionError) || request.rev === undefined)
|
|
629
|
+
return undefined;
|
|
630
|
+
let results;
|
|
631
|
+
try {
|
|
632
|
+
results = await this.storageRepo.get({ blockIds });
|
|
633
|
+
}
|
|
634
|
+
catch (readError) {
|
|
635
|
+
log('coordinator-repo:pend-stale-classify-read-error', {
|
|
636
|
+
actionId: request.actionId,
|
|
637
|
+
error: readError.message
|
|
638
|
+
});
|
|
639
|
+
return undefined;
|
|
640
|
+
}
|
|
641
|
+
for (const blockId of blockIds) {
|
|
642
|
+
const latest = results[blockId]?.state.latest;
|
|
643
|
+
if (latest && latest.rev >= request.rev) {
|
|
644
|
+
log('coordinator-repo:pend-stale-classified', {
|
|
645
|
+
actionId: request.actionId,
|
|
646
|
+
blockId,
|
|
647
|
+
latestRev: latest.rev,
|
|
648
|
+
requestedRev: request.rev
|
|
649
|
+
});
|
|
650
|
+
return { success: false, conflict: true, reason: `stale revision: block ${blockId} at rev ${latest.rev}, requested rev ${request.rev}` };
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
// NOTE: conservative — when only remote members saw the newer revision (local storage still
|
|
654
|
+
// behind), staleness can't be confirmed locally and the rejection stays a throw. If that
|
|
655
|
+
// shows up in practice, extend confirmation with a quorum read; never trust the reject text.
|
|
656
|
+
return undefined;
|
|
657
|
+
}
|
|
371
658
|
async cancel(actionRef, options) {
|
|
372
659
|
const blockIds = actionRef.blockIds;
|
|
373
660
|
await this.verifyResponsibility(blockIds);
|
|
@@ -412,25 +699,33 @@ export class CoordinatorRepo {
|
|
|
412
699
|
this.markBlocksSeen(blockIds);
|
|
413
700
|
return { success: true };
|
|
414
701
|
}
|
|
415
|
-
// Local cluster didn't execute during consensus. Attempt a local commit,
|
|
416
|
-
//
|
|
417
|
-
//
|
|
418
|
-
//
|
|
419
|
-
//
|
|
702
|
+
// Local cluster didn't execute during consensus. Attempt a local commit, but tolerate
|
|
703
|
+
// local divergence when the cluster already reached consensus — this coordinator was
|
|
704
|
+
// likely picked for commit after missing the pend phase (unreachable during pend, fresh
|
|
705
|
+
// join, etc.). The cluster's majority is authoritative; this peer catches up via sync.
|
|
706
|
+
//
|
|
707
|
+
// Divergence reaches us in BOTH shapes and both must be tolerated identically:
|
|
708
|
+
// - a THROW ("Pending action … not found"), when we never saw the pend;
|
|
709
|
+
// - a RETURNED `success:false` carrying `missing-base-revision`, when we saw the pend
|
|
710
|
+
// but not the revision that created the block (see StorageRepo.internalCommit).
|
|
711
|
+
// Only the throw was tolerated before the refusal existed. Reporting the refusal to the
|
|
712
|
+
// caller instead would surface a committed transaction as a stale loss: db-core's
|
|
713
|
+
// commitPhase treats any returned `success:false` as a permanent stale failure, so the
|
|
714
|
+
// client would retry an action the cluster already landed until it exhausted its budget.
|
|
420
715
|
try {
|
|
421
716
|
const result = await this.storageRepo.commit(request, options);
|
|
422
|
-
if (result.success)
|
|
717
|
+
if (result.success) {
|
|
423
718
|
this.markBlocksSeen(blockIds);
|
|
719
|
+
return result;
|
|
720
|
+
}
|
|
721
|
+
if (isMissingBaseRevisionFailure(result) && clusterReachedCommitConsensus(record)) {
|
|
722
|
+
return this.tolerateLocalCommitDivergence(request, blockIds, result.reason ?? MISSING_BASE_REVISION_REASON);
|
|
723
|
+
}
|
|
424
724
|
return result;
|
|
425
725
|
}
|
|
426
726
|
catch (err) {
|
|
427
727
|
if (clusterReachedCommitConsensus(record)) {
|
|
428
|
-
|
|
429
|
-
actionId: request.actionId,
|
|
430
|
-
error: err.message
|
|
431
|
-
});
|
|
432
|
-
this.markBlocksSeen(blockIds);
|
|
433
|
-
return { success: true };
|
|
728
|
+
return this.tolerateLocalCommitDivergence(request, blockIds, err.message);
|
|
434
729
|
}
|
|
435
730
|
throw err;
|
|
436
731
|
}
|
|
@@ -440,6 +735,16 @@ export class CoordinatorRepo {
|
|
|
440
735
|
throw error;
|
|
441
736
|
}
|
|
442
737
|
}
|
|
738
|
+
/**
|
|
739
|
+
* Report success for a commit the cluster carried but this peer could not apply locally. The
|
|
740
|
+
* blocks are marked seen so the read path treats them as freshness-checked; convergence comes
|
|
741
|
+
* from replication (cohort reconcile, or read-driven acquisition), not from replay here.
|
|
742
|
+
*/
|
|
743
|
+
tolerateLocalCommitDivergence(request, blockIds, detail) {
|
|
744
|
+
log('coordinator-repo:commit-local-failed-cluster-succeeded', { actionId: request.actionId, error: detail });
|
|
745
|
+
this.markBlocksSeen(blockIds);
|
|
746
|
+
return { success: true };
|
|
747
|
+
}
|
|
443
748
|
}
|
|
444
749
|
/** True if a simple majority of cluster peers signed an approving commit. */
|
|
445
750
|
function clusterReachedCommitConsensus(record) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinator-repo.js","sourceRoot":"","sources":["../../../src/repo/coordinator-repo.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"coordinator-repo.js","sourceRoot":"","sources":["../../../src/repo/coordinator-repo.ts"],"names":[],"mappings":"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"}
|