@optimystic/db-p2p 1.0.0-beta.3 → 1.1.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 +73 -1
- package/dist/src/cluster/block-transfer-service.d.ts.map +1 -1
- package/dist/src/cluster/block-transfer-service.js +70 -3
- package/dist/src/cluster/block-transfer-service.js.map +1 -1
- package/dist/src/cluster/block-transfer.d.ts +16 -1
- package/dist/src/cluster/block-transfer.d.ts.map +1 -1
- package/dist/src/cluster/block-transfer.js +73 -72
- package/dist/src/cluster/block-transfer.js.map +1 -1
- package/dist/src/cluster/client.d.ts +4 -6
- package/dist/src/cluster/client.d.ts.map +1 -1
- package/dist/src/cluster/client.js +8 -13
- package/dist/src/cluster/client.js.map +1 -1
- package/dist/src/cluster/cluster-policy.d.ts +2 -1
- package/dist/src/cluster/cluster-policy.d.ts.map +1 -1
- package/dist/src/cluster/cluster-policy.js.map +1 -1
- package/dist/src/cluster/cluster-repo.d.ts +155 -9
- package/dist/src/cluster/cluster-repo.d.ts.map +1 -1
- package/dist/src/cluster/cluster-repo.js +446 -58
- package/dist/src/cluster/cluster-repo.js.map +1 -1
- package/dist/src/cluster/commit-proof.js +2 -2
- package/dist/src/cluster/race-resolution.d.ts +51 -7
- package/dist/src/cluster/race-resolution.d.ts.map +1 -1
- package/dist/src/cluster/race-resolution.js +71 -7
- package/dist/src/cluster/race-resolution.js.map +1 -1
- package/dist/src/cluster/rebalance-monitor.d.ts +67 -5
- package/dist/src/cluster/rebalance-monitor.d.ts.map +1 -1
- package/dist/src/cluster/rebalance-monitor.js +120 -26
- package/dist/src/cluster/rebalance-monitor.js.map +1 -1
- package/dist/src/cluster/spread-on-churn.d.ts.map +1 -1
- package/dist/src/cluster/spread-on-churn.js +34 -47
- 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 -6
- package/dist/src/cohort-topic/host.js.map +1 -1
- package/dist/src/cohort-topic/membership-source.js +1 -1
- package/dist/src/cohort-topic/membership-source.js.map +1 -1
- package/dist/src/cohort-topic/peer-codec.d.ts.map +1 -1
- package/dist/src/cohort-topic/peer-codec.js +5 -2
- package/dist/src/cohort-topic/peer-codec.js.map +1 -1
- package/dist/src/cohort-topic/stream-util.d.ts +24 -3
- package/dist/src/cohort-topic/stream-util.d.ts.map +1 -1
- package/dist/src/cohort-topic/stream-util.js +36 -3
- package/dist/src/cohort-topic/stream-util.js.map +1 -1
- package/dist/src/cohort-topic/topic-router.d.ts +9 -0
- package/dist/src/cohort-topic/topic-router.d.ts.map +1 -1
- package/dist/src/cohort-topic/topic-router.js +12 -2
- package/dist/src/cohort-topic/topic-router.js.map +1 -1
- package/dist/src/dispute/client.d.ts.map +1 -1
- package/dist/src/dispute/client.js +15 -3
- package/dist/src/dispute/client.js.map +1 -1
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/libp2p-key-network.d.ts +78 -17
- package/dist/src/libp2p-key-network.d.ts.map +1 -1
- package/dist/src/libp2p-key-network.js +234 -147
- package/dist/src/libp2p-key-network.js.map +1 -1
- package/dist/src/libp2p-node-base.d.ts +35 -1
- package/dist/src/libp2p-node-base.d.ts.map +1 -1
- package/dist/src/libp2p-node-base.js +151 -26
- package/dist/src/libp2p-node-base.js.map +1 -1
- package/dist/src/libp2p-node-rn.d.ts +2 -2
- package/dist/src/libp2p-node-rn.d.ts.map +1 -1
- package/dist/src/libp2p-node-rn.js.map +1 -1
- package/dist/src/libp2p-node.d.ts +2 -2
- package/dist/src/libp2p-node.d.ts.map +1 -1
- package/dist/src/libp2p-node.js.map +1 -1
- package/dist/src/logger.d.ts.map +1 -1
- package/dist/src/logger.js +6 -1
- package/dist/src/logger.js.map +1 -1
- package/dist/src/matchmaking/query-transport.d.ts +3 -4
- package/dist/src/matchmaking/query-transport.d.ts.map +1 -1
- package/dist/src/matchmaking/query-transport.js +9 -9
- package/dist/src/matchmaking/query-transport.js.map +1 -1
- package/dist/src/network/network-manager-service.d.ts +10 -5
- package/dist/src/network/network-manager-service.d.ts.map +1 -1
- package/dist/src/network/network-manager-service.js +11 -2
- package/dist/src/network/network-manager-service.js.map +1 -1
- package/dist/src/network/relay-reservation.d.ts +170 -0
- package/dist/src/network/relay-reservation.d.ts.map +1 -0
- package/dist/src/network/relay-reservation.js +527 -0
- package/dist/src/network/relay-reservation.js.map +1 -0
- package/dist/src/pend-validation.d.ts +3 -2
- package/dist/src/pend-validation.d.ts.map +1 -1
- package/dist/src/pend-validation.js +3 -2
- package/dist/src/pend-validation.js.map +1 -1
- package/dist/src/protocol-client.d.ts +8 -1
- package/dist/src/protocol-client.d.ts.map +1 -1
- package/dist/src/protocol-client.js +11 -0
- package/dist/src/protocol-client.js.map +1 -1
- package/dist/src/reactivity/forwarder-host.d.ts +2 -1
- package/dist/src/reactivity/forwarder-host.d.ts.map +1 -1
- package/dist/src/reactivity/forwarder-host.js +2 -1
- package/dist/src/reactivity/forwarder-host.js.map +1 -1
- package/dist/src/reactivity/origination-manager.d.ts +3 -3
- package/dist/src/reactivity/origination-manager.js +3 -3
- package/dist/src/reactivity/recover-transport.d.ts +22 -14
- package/dist/src/reactivity/recover-transport.d.ts.map +1 -1
- package/dist/src/reactivity/recover-transport.js +32 -19
- package/dist/src/reactivity/recover-transport.js.map +1 -1
- package/dist/src/reactivity/subscription-manager.d.ts +2 -2
- package/dist/src/reactivity/topic-bytes.d.ts +6 -7
- package/dist/src/reactivity/topic-bytes.d.ts.map +1 -1
- package/dist/src/reactivity/topic-bytes.js +8 -9
- package/dist/src/reactivity/topic-bytes.js.map +1 -1
- package/dist/src/repo/client.d.ts +5 -2
- package/dist/src/repo/client.d.ts.map +1 -1
- package/dist/src/repo/client.js +49 -40
- package/dist/src/repo/client.js.map +1 -1
- package/dist/src/repo/cluster-coordinator.d.ts +96 -11
- package/dist/src/repo/cluster-coordinator.d.ts.map +1 -1
- package/dist/src/repo/cluster-coordinator.js +164 -25
- package/dist/src/repo/cluster-coordinator.js.map +1 -1
- package/dist/src/repo/coordinator-repo.d.ts +240 -122
- package/dist/src/repo/coordinator-repo.d.ts.map +1 -1
- package/dist/src/repo/coordinator-repo.js +627 -473
- package/dist/src/repo/coordinator-repo.js.map +1 -1
- package/dist/src/repo/i-under-replication-ledger.d.ts +87 -0
- package/dist/src/repo/i-under-replication-ledger.d.ts.map +1 -0
- package/dist/src/repo/i-under-replication-ledger.js +2 -0
- package/dist/src/repo/i-under-replication-ledger.js.map +1 -0
- package/dist/src/repo/kv-under-replication-ledger.d.ts +91 -0
- package/dist/src/repo/kv-under-replication-ledger.d.ts.map +1 -0
- package/dist/src/repo/kv-under-replication-ledger.js +287 -0
- package/dist/src/repo/kv-under-replication-ledger.js.map +1 -0
- package/dist/src/repo/responsibility.d.ts +37 -0
- package/dist/src/repo/responsibility.d.ts.map +1 -0
- package/dist/src/repo/responsibility.js +37 -0
- package/dist/src/repo/responsibility.js.map +1 -0
- package/dist/src/repo/service.d.ts +44 -15
- package/dist/src/repo/service.d.ts.map +1 -1
- package/dist/src/repo/service.js +64 -27
- package/dist/src/repo/service.js.map +1 -1
- package/dist/src/repo/stuck-reservation.d.ts +127 -0
- package/dist/src/repo/stuck-reservation.d.ts.map +1 -0
- package/dist/src/repo/stuck-reservation.js +179 -0
- package/dist/src/repo/stuck-reservation.js.map +1 -0
- package/dist/src/repo/under-replication-drain.d.ts +208 -0
- package/dist/src/repo/under-replication-drain.d.ts.map +1 -0
- package/dist/src/repo/under-replication-drain.js +461 -0
- package/dist/src/repo/under-replication-drain.js.map +1 -0
- package/dist/src/rn.d.ts +5 -0
- package/dist/src/rn.d.ts.map +1 -1
- package/dist/src/rn.js +5 -0
- package/dist/src/rn.js.map +1 -1
- package/dist/src/storage/block-latch.d.ts +3 -2
- package/dist/src/storage/block-latch.d.ts.map +1 -1
- package/dist/src/storage/block-latch.js +7 -4
- package/dist/src/storage/block-latch.js.map +1 -1
- package/dist/src/storage/block-storage.d.ts +45 -3
- package/dist/src/storage/block-storage.d.ts.map +1 -1
- package/dist/src/storage/block-storage.js +156 -9
- package/dist/src/storage/block-storage.js.map +1 -1
- package/dist/src/storage/i-block-storage.d.ts +57 -5
- package/dist/src/storage/i-block-storage.d.ts.map +1 -1
- package/dist/src/storage/i-block-storage.js.map +1 -1
- package/dist/src/storage/pending-claim.d.ts +167 -0
- package/dist/src/storage/pending-claim.d.ts.map +1 -0
- package/dist/src/storage/pending-claim.js +156 -0
- package/dist/src/storage/pending-claim.js.map +1 -0
- package/dist/src/storage/raw-store-codec.d.ts +13 -0
- package/dist/src/storage/raw-store-codec.d.ts.map +1 -1
- package/dist/src/storage/raw-store-codec.js +24 -3
- package/dist/src/storage/raw-store-codec.js.map +1 -1
- package/dist/src/storage/restoration-coordinator.d.ts.map +1 -1
- package/dist/src/storage/restoration-coordinator.js +2 -1
- package/dist/src/storage/restoration-coordinator.js.map +1 -1
- package/dist/src/storage/ring-shift-coordinator.d.ts.map +1 -1
- package/dist/src/storage/ring-shift-coordinator.js +3 -3
- package/dist/src/storage/ring-shift-coordinator.js.map +1 -1
- package/dist/src/storage/storage-repo.d.ts +122 -5
- package/dist/src/storage/storage-repo.d.ts.map +1 -1
- package/dist/src/storage/storage-repo.js +245 -68
- package/dist/src/storage/storage-repo.js.map +1 -1
- package/dist/src/storage/struct.d.ts +58 -0
- package/dist/src/storage/struct.d.ts.map +1 -1
- package/dist/src/testing/mesh-harness.d.ts +77 -11
- package/dist/src/testing/mesh-harness.d.ts.map +1 -1
- package/dist/src/testing/mesh-harness.js +226 -100
- package/dist/src/testing/mesh-harness.js.map +1 -1
- package/package.json +2 -2
- package/readme.md +27 -3
- package/src/cluster/block-transfer-service.ts +132 -4
- package/src/cluster/block-transfer.ts +79 -84
- package/src/cluster/client.ts +115 -119
- package/src/cluster/cluster-policy.ts +2 -1
- package/src/cluster/cluster-repo.ts +493 -65
- package/src/cluster/commit-proof.ts +2 -2
- package/src/cluster/race-resolution.ts +76 -7
- package/src/cluster/rebalance-monitor.ts +677 -539
- package/src/cluster/spread-on-churn.ts +34 -54
- package/src/cohort-topic/host.ts +8 -6
- package/src/cohort-topic/membership-source.ts +1 -1
- package/src/cohort-topic/peer-codec.ts +34 -31
- package/src/cohort-topic/stream-util.ts +39 -4
- package/src/cohort-topic/topic-router.ts +12 -2
- package/src/dispute/client.ts +17 -7
- package/src/index.ts +64 -59
- package/src/libp2p-key-network.ts +1377 -1260
- package/src/libp2p-node-base.ts +186 -27
- package/src/libp2p-node-rn.ts +31 -30
- package/src/libp2p-node.ts +37 -36
- package/src/logger.ts +6 -1
- package/src/matchmaking/query-transport.ts +9 -9
- package/src/network/network-manager-service.ts +16 -5
- package/src/network/relay-reservation.ts +636 -0
- package/src/pend-validation.ts +3 -2
- package/src/protocol-client.ts +13 -1
- package/src/reactivity/forwarder-host.ts +2 -1
- package/src/reactivity/origination-manager.ts +3 -3
- package/src/reactivity/recover-transport.ts +39 -22
- package/src/reactivity/subscription-manager.ts +2 -2
- package/src/reactivity/topic-bytes.ts +35 -37
- package/src/repo/client.ts +172 -173
- package/src/repo/cluster-coordinator.ts +183 -25
- package/src/repo/coordinator-repo.ts +656 -506
- package/src/repo/i-under-replication-ledger.ts +89 -0
- package/src/repo/kv-under-replication-ledger.ts +302 -0
- package/src/repo/responsibility.ts +48 -0
- package/src/repo/service.ts +76 -39
- package/src/repo/stuck-reservation.ts +224 -0
- package/src/repo/under-replication-drain.ts +582 -0
- package/src/rn.ts +74 -69
- package/src/storage/block-latch.ts +7 -4
- package/src/storage/block-storage.ts +161 -10
- package/src/storage/i-block-storage.ts +60 -5
- package/src/storage/pending-claim.ts +200 -0
- package/src/storage/raw-store-codec.ts +26 -3
- package/src/storage/restoration-coordinator.ts +212 -211
- package/src/storage/ring-shift-coordinator.ts +271 -271
- package/src/storage/storage-repo.ts +280 -72
- package/src/storage/struct.ts +58 -0
- package/src/testing/mesh-harness.ts +293 -112
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import type { Startable, Libp2p } from '@libp2p/interface';
|
|
2
2
|
import type { FretService } from 'p2p-fret';
|
|
3
|
+
import type { IKeyNetwork } from '@optimystic/db-core';
|
|
3
4
|
import type { PartitionDetector } from './partition-detector.js';
|
|
4
5
|
import type { ArachnodeFretAdapter, ArachnodeInfo } from '../storage/arachnode-fret-adapter.js';
|
|
5
6
|
export interface RebalanceEvent {
|
|
6
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Block IDs this node has gained responsibility for (the reaction pulls each). A block first seen
|
|
9
|
+
* through a commit this node holds ({@link RebalanceMonitor.recordCommittedHolders}) is not
|
|
10
|
+
* reported: there is nothing to pull.
|
|
11
|
+
*/
|
|
7
12
|
gained: string[];
|
|
8
13
|
/** Block IDs this node has lost responsibility for */
|
|
9
14
|
lost: string[];
|
|
@@ -44,6 +49,21 @@ export interface GrowthOutcome {
|
|
|
44
49
|
/** True when nothing about this block is still owed a push. */
|
|
45
50
|
complete: boolean;
|
|
46
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* What an acknowledged commit proved about who holds its blocks, reported by the node that holds them.
|
|
54
|
+
* Only ever reported for a commit THIS node's own storage durably holds, so a block named here needs
|
|
55
|
+
* no pull. See {@link RebalanceMonitor.recordCommittedHolders}.
|
|
56
|
+
*/
|
|
57
|
+
export interface CommittedHolders {
|
|
58
|
+
blockIds: readonly string[];
|
|
59
|
+
/** Peers evidenced to hold the committed revision. Self may appear; it is ignored. */
|
|
60
|
+
holders: readonly string[];
|
|
61
|
+
/**
|
|
62
|
+
* Cohort members the commit's coordinator knows did NOT confirm holding the revision. Withdraws
|
|
63
|
+
* any earlier record of them as holders, so the growth arm pushes them the block.
|
|
64
|
+
*/
|
|
65
|
+
unconfirmed?: readonly string[];
|
|
66
|
+
}
|
|
47
67
|
export interface RebalanceMonitorConfig {
|
|
48
68
|
/** Debounce window for topology changes (ms). Default: 5000 */
|
|
49
69
|
debounceMs?: number;
|
|
@@ -93,6 +113,20 @@ export interface RebalanceMonitorDeps {
|
|
|
93
113
|
* was-responsible memory, not owned-block tracking).
|
|
94
114
|
*/
|
|
95
115
|
trackedBlocks?: Set<string>;
|
|
116
|
+
/**
|
|
117
|
+
* The node's key network. When provided, a block's cohort is `findCluster` on its routing key —
|
|
118
|
+
* the rule the writer routes by, the coordinator refuses writes by, and `RepoService` redirects
|
|
119
|
+
* by — so the monitor never calls a peer responsible (and pushes it a replica) that the rest of
|
|
120
|
+
* the node does not, nor releases a block the node is still responsible for. Omit for standalone
|
|
121
|
+
* construction (unit tests): the cohort is then FRET's nearest {@link RebalanceMonitor.getCohortSize}.
|
|
122
|
+
*/
|
|
123
|
+
keyNetwork?: Pick<IKeyNetwork, 'findCluster'>;
|
|
124
|
+
/**
|
|
125
|
+
* The node's resolved `clusterSize`. Caps {@link RebalanceMonitor.getCohortSize}: a floor wider
|
|
126
|
+
* than the cohort can never be confirmed (a lost block would never be released), and on the
|
|
127
|
+
* standalone path it would assemble peers outside the configured cohort.
|
|
128
|
+
*/
|
|
129
|
+
clusterSize?: number;
|
|
96
130
|
}
|
|
97
131
|
type RebalanceHandler = (event: RebalanceEvent) => void;
|
|
98
132
|
export declare class RebalanceMonitor implements Startable {
|
|
@@ -100,6 +134,7 @@ export declare class RebalanceMonitor implements Startable {
|
|
|
100
134
|
private running;
|
|
101
135
|
private readonly trackedBlocks;
|
|
102
136
|
private readonly responsibilitySnapshot;
|
|
137
|
+
private readonly commitEvidence;
|
|
103
138
|
private readonly handlers;
|
|
104
139
|
private debounceTimer;
|
|
105
140
|
private recheckTimer;
|
|
@@ -132,6 +167,22 @@ export declare class RebalanceMonitor implements Startable {
|
|
|
132
167
|
* leaves the block's state untouched so the next check retries.
|
|
133
168
|
*/
|
|
134
169
|
recordGrowthOutcome(blockId: string, outcome: GrowthOutcome): void;
|
|
170
|
+
/**
|
|
171
|
+
* Evidence from an acknowledged commit that this node's storage holds: `holders` are recorded as
|
|
172
|
+
* confirmed co-holders of each block at the next check, and the block is not reported `gained`
|
|
173
|
+
* then (this node already holds it, so there is nothing to pull). Without this, every freshly
|
|
174
|
+
* committed block has no growth memory, so the next check reports the whole cohort grown and
|
|
175
|
+
* pushes the block back to the members that stored it as part of the commit — and reports it
|
|
176
|
+
* gained, pulling it back from them.
|
|
177
|
+
*
|
|
178
|
+
* Later evidence for the same block overrides earlier evidence about the same peer, so the
|
|
179
|
+
* coordinator's durability-checked answer corrects the member-side signer list recorded moments
|
|
180
|
+
* before it on the coordinating node. Ignored while stopped: nothing would consume it.
|
|
181
|
+
*
|
|
182
|
+
* Does not affect the founder case: a commit no other peer confirmed names no holders, so the
|
|
183
|
+
* cohort is still reported grown once peers appear.
|
|
184
|
+
*/
|
|
185
|
+
recordCommittedHolders(committed: CommittedHolders): void;
|
|
135
186
|
/**
|
|
136
187
|
* Growth-arm observability: how many tracked blocks still await confirmation on reported peers,
|
|
137
188
|
* how many (block, peer) pairs have been given up on, and whether the re-check timer is armed.
|
|
@@ -154,10 +205,21 @@ export declare class RebalanceMonitor implements Startable {
|
|
|
154
205
|
private maybeRebalance;
|
|
155
206
|
private performRebalanceCheck;
|
|
156
207
|
/**
|
|
157
|
-
* The
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
208
|
+
* The peers responsible for a block, nearest first. With a key network wired this is its
|
|
209
|
+
* `findCluster` cohort (see {@link RebalanceMonitorDeps.keyNetwork}); otherwise FRET's nearest
|
|
210
|
+
* {@link getCohortSize} ring members.
|
|
211
|
+
*
|
|
212
|
+
* NOTE: one `findCluster` (peer-store reads for each cohort member) per tracked block per pass, where
|
|
213
|
+
* FRET's cohort was one synchronous call; fine under the pass throttle; if passes on nodes holding many
|
|
214
|
+
* blocks ever show up as slow, share the lookup with the coordinator's responsibility cache.
|
|
215
|
+
*/
|
|
216
|
+
private cohortFor;
|
|
217
|
+
/**
|
|
218
|
+
* The replication floor `N`. Public so the ring-shift handoff and the rebalance reaction can gate
|
|
219
|
+
* release on confirming replication to this many holders (`docs/arachnode-ring-handoff.md`
|
|
220
|
+
* § Replication floor). Derives from FRET's network-size estimate: `clamp(ceil(sqrt(n_est)), 1, 3)`,
|
|
221
|
+
* defaulting to 3 when no confident estimate exists — and never above the configured `clusterSize`,
|
|
222
|
+
* since no block has more responsible holders than that to confirm on.
|
|
161
223
|
*/
|
|
162
224
|
getCohortSize(): number;
|
|
163
225
|
private emitEvent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rebalance-monitor.d.ts","sourceRoot":"","sources":["../../../src/cluster/rebalance-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"rebalance-monitor.d.ts","sourceRoot":"","sources":["../../../src/cluster/rebalance-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { hashKey } from 'p2p-fret';
|
|
2
|
+
import { routingKeyForBlock } from '@optimystic/db-core';
|
|
2
3
|
import { createLogger } from '../logger.js';
|
|
3
4
|
const log = createLogger('rebalance-monitor');
|
|
4
|
-
const textEncoder = new TextEncoder();
|
|
5
5
|
const emptyGrowthState = (responsible) => ({
|
|
6
6
|
responsible,
|
|
7
7
|
cohortPeers: new Set(),
|
|
@@ -14,15 +14,21 @@ const intersect = (remembered, current) => new Set([...(remembered ?? [])].filte
|
|
|
14
14
|
* Carry a still-responsible block's growth state into the next check, intersecting both remembered
|
|
15
15
|
* peer sets against the CURRENT cohort: a peer that left drops out of `cohortPeers` (so its return
|
|
16
16
|
* is re-detected — the departure self-heal) and out of `abandonedPeers` (so a rejoin is retried from
|
|
17
|
-
* scratch).
|
|
17
|
+
* scratch). Commit evidence gathered since the last check is folded into `cohortPeers` first.
|
|
18
|
+
* `pendingPeers` is always rebuilt from this check's own report, never carried.
|
|
18
19
|
*/
|
|
19
|
-
const carryGrowthState = (prior, currentPeers) =>
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
const carryGrowthState = (prior, currentPeers, evidence) => {
|
|
21
|
+
const confirmed = new Set([...(prior?.cohortPeers ?? []), ...(evidence?.holders ?? [])]);
|
|
22
|
+
for (const peerId of evidence?.unconfirmed ?? [])
|
|
23
|
+
confirmed.delete(peerId);
|
|
24
|
+
return {
|
|
25
|
+
responsible: true,
|
|
26
|
+
cohortPeers: intersect(confirmed, currentPeers),
|
|
27
|
+
pendingPeers: new Set(),
|
|
28
|
+
growthAttempts: prior?.growthAttempts ?? 0,
|
|
29
|
+
abandonedPeers: intersect(prior?.abandonedPeers, currentPeers)
|
|
30
|
+
};
|
|
31
|
+
};
|
|
26
32
|
export class RebalanceMonitor {
|
|
27
33
|
deps;
|
|
28
34
|
running = false;
|
|
@@ -38,9 +44,14 @@ export class RebalanceMonitor {
|
|
|
38
44
|
// reports the whole non-self cohort as grown — that is what heals the founder case (A alone
|
|
39
45
|
// commits; B joins → first check pushes to B) and the restarted-holder case (snapshot memory is
|
|
40
46
|
// process-local, so a restarted holder re-pushes to everyone once). Peers enter the set only
|
|
41
|
-
// through recordGrowthOutcome
|
|
42
|
-
// re-detected on the next check
|
|
47
|
+
// through recordGrowthOutcome or a commit's confirmed holders (recordCommittedHolders) — a
|
|
48
|
+
// reported-but-unconfirmed peer stays out, so a failed push is re-detected on the next check
|
|
49
|
+
// instead of being recorded as done.
|
|
43
50
|
responsibilitySnapshot = new Map();
|
|
51
|
+
// Commit evidence (recordCommittedHolders) waiting for the next check, which consumes each block's
|
|
52
|
+
// entry once its cohort lookup succeeds and drops entries for blocks no longer tracked. Held apart
|
|
53
|
+
// from the snapshot because a commit does not say whether this node is responsible — only a check does.
|
|
54
|
+
commitEvidence = new Map();
|
|
44
55
|
handlers = [];
|
|
45
56
|
debounceTimer = null;
|
|
46
57
|
recheckTimer = null;
|
|
@@ -94,6 +105,7 @@ export class RebalanceMonitor {
|
|
|
94
105
|
this.recheckTimer = null;
|
|
95
106
|
}
|
|
96
107
|
this.pendingTopologyChange = false;
|
|
108
|
+
this.commitEvidence.clear();
|
|
97
109
|
log('stopped');
|
|
98
110
|
}
|
|
99
111
|
onRebalance(handler) {
|
|
@@ -105,6 +117,7 @@ export class RebalanceMonitor {
|
|
|
105
117
|
untrackBlock(blockId) {
|
|
106
118
|
this.trackedBlocks.delete(blockId);
|
|
107
119
|
this.responsibilitySnapshot.delete(blockId);
|
|
120
|
+
this.commitEvidence.delete(blockId);
|
|
108
121
|
}
|
|
109
122
|
getTrackedBlockCount() {
|
|
110
123
|
return this.trackedBlocks.size;
|
|
@@ -156,6 +169,40 @@ export class RebalanceMonitor {
|
|
|
156
169
|
}
|
|
157
170
|
this.updateRecheckTimer();
|
|
158
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* Evidence from an acknowledged commit that this node's storage holds: `holders` are recorded as
|
|
174
|
+
* confirmed co-holders of each block at the next check, and the block is not reported `gained`
|
|
175
|
+
* then (this node already holds it, so there is nothing to pull). Without this, every freshly
|
|
176
|
+
* committed block has no growth memory, so the next check reports the whole cohort grown and
|
|
177
|
+
* pushes the block back to the members that stored it as part of the commit — and reports it
|
|
178
|
+
* gained, pulling it back from them.
|
|
179
|
+
*
|
|
180
|
+
* Later evidence for the same block overrides earlier evidence about the same peer, so the
|
|
181
|
+
* coordinator's durability-checked answer corrects the member-side signer list recorded moments
|
|
182
|
+
* before it on the coordinating node. Ignored while stopped: nothing would consume it.
|
|
183
|
+
*
|
|
184
|
+
* Does not affect the founder case: a commit no other peer confirmed names no holders, so the
|
|
185
|
+
* cohort is still reported grown once peers appear.
|
|
186
|
+
*/
|
|
187
|
+
recordCommittedHolders(committed) {
|
|
188
|
+
if (!this.running)
|
|
189
|
+
return;
|
|
190
|
+
for (const blockId of committed.blockIds) {
|
|
191
|
+
let evidence = this.commitEvidence.get(blockId);
|
|
192
|
+
if (!evidence) {
|
|
193
|
+
evidence = { holders: new Set(), unconfirmed: new Set() };
|
|
194
|
+
this.commitEvidence.set(blockId, evidence);
|
|
195
|
+
}
|
|
196
|
+
for (const peerId of committed.holders) {
|
|
197
|
+
evidence.holders.add(peerId);
|
|
198
|
+
evidence.unconfirmed.delete(peerId);
|
|
199
|
+
}
|
|
200
|
+
for (const peerId of committed.unconfirmed ?? []) {
|
|
201
|
+
evidence.unconfirmed.add(peerId);
|
|
202
|
+
evidence.holders.delete(peerId);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
159
206
|
/**
|
|
160
207
|
* Growth-arm observability: how many tracked blocks still await confirmation on reported peers,
|
|
161
208
|
* how many (block, peer) pairs have been given up on, and whether the re-check timer is armed.
|
|
@@ -219,6 +266,13 @@ export class RebalanceMonitor {
|
|
|
219
266
|
if (this.debounceTimer) {
|
|
220
267
|
clearTimeout(this.debounceTimer);
|
|
221
268
|
}
|
|
269
|
+
// NOTE: the check samples FRET's cohort once, debounceMs after the last connection event. A joiner
|
|
270
|
+
// FRET has not admitted by then is not reported grown, and nothing re-checks until the next
|
|
271
|
+
// connection event outside minRebalanceIntervalMs — so a machine that wrote alone would not push its
|
|
272
|
+
// blocks to its new backup. Over loopback FRET admits well inside the default (the backup phase of
|
|
273
|
+
// `small-deployment-lifecycle.integration.spec.ts` lands in ~10s); if a slower link, such as a phone
|
|
274
|
+
// pair over a relay, ever shows a joiner that never receives the founder's blocks, re-check when FRET
|
|
275
|
+
// reports the peer instead of on this timer alone.
|
|
222
276
|
this.debounceTimer = setTimeout(() => {
|
|
223
277
|
this.debounceTimer = null;
|
|
224
278
|
this.pendingTopologyChange = false;
|
|
@@ -249,6 +303,7 @@ export class RebalanceMonitor {
|
|
|
249
303
|
// Nothing left to grow, so any prior deferral is moot — drop it and let the re-check timer
|
|
250
304
|
// disarm, rather than re-arming forever against blocks that were untracked out from under it.
|
|
251
305
|
this.lastGrowthDeferred = 0;
|
|
306
|
+
this.commitEvidence.clear();
|
|
252
307
|
this.updateRecheckTimer();
|
|
253
308
|
return null;
|
|
254
309
|
}
|
|
@@ -258,16 +313,31 @@ export class RebalanceMonitor {
|
|
|
258
313
|
const newOwners = new Map();
|
|
259
314
|
const grown = new Map();
|
|
260
315
|
let growthDeferred = 0;
|
|
316
|
+
let lookupFailed = 0;
|
|
261
317
|
const growthCandidates = [];
|
|
262
318
|
for (const blockId of this.trackedBlocks) {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
319
|
+
let cohort;
|
|
320
|
+
try {
|
|
321
|
+
cohort = await this.cohortFor(blockId);
|
|
322
|
+
}
|
|
323
|
+
catch (err) {
|
|
324
|
+
// Responsibility is undetermined: leave this block's state untouched (never guess lost or
|
|
325
|
+
// gained off a failed lookup) and count it as outstanding so the re-check timer retries it.
|
|
326
|
+
log('cohort lookup failed: block=%s %o', blockId, err);
|
|
327
|
+
lookupFailed++;
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
267
330
|
const isResponsible = cohort.includes(selfId);
|
|
268
331
|
const prior = this.responsibilitySnapshot.get(blockId);
|
|
269
332
|
const wasResponsible = prior?.responsible ?? false;
|
|
270
|
-
|
|
333
|
+
// Consumed only once the lookup succeeded, so a failed lookup leaves it for the next check.
|
|
334
|
+
// NOTE: a block enters trackedBlocks at storage apply, but its evidence arrives only after the
|
|
335
|
+
// durable verdict (member) or cohort acknowledgement (coordinator); a check landing in that
|
|
336
|
+
// window still reports it gained + grown, the pre-evidence behaviour. If relay traces show
|
|
337
|
+
// post-commit transfers surviving, skip a block's first check while a commit touching it is in flight.
|
|
338
|
+
const evidence = this.commitEvidence.get(blockId);
|
|
339
|
+
this.commitEvidence.delete(blockId);
|
|
340
|
+
if (isResponsible && !wasResponsible && !evidence) {
|
|
271
341
|
gained.push(blockId);
|
|
272
342
|
}
|
|
273
343
|
else if (!isResponsible && wasResponsible) {
|
|
@@ -287,7 +357,7 @@ export class RebalanceMonitor {
|
|
|
287
357
|
let state;
|
|
288
358
|
if (isResponsible) {
|
|
289
359
|
const currentSet = new Set(cohort.filter(id => id !== selfId));
|
|
290
|
-
state = carryGrowthState(prior, currentSet);
|
|
360
|
+
state = carryGrowthState(prior, currentSet, evidence);
|
|
291
361
|
const newPeers = [...currentSet].filter(id => !state.cohortPeers.has(id) && !state.abandonedPeers.has(id));
|
|
292
362
|
if (newPeers.length > 0) {
|
|
293
363
|
growthCandidates.push({ blockId, newPeers, state });
|
|
@@ -308,6 +378,12 @@ export class RebalanceMonitor {
|
|
|
308
378
|
}
|
|
309
379
|
this.responsibilitySnapshot.set(blockId, state);
|
|
310
380
|
}
|
|
381
|
+
// Evidence for a block that is not tracked has no consumer: a commit this node does not hold
|
|
382
|
+
// as an owned block, or one untracked since.
|
|
383
|
+
for (const blockId of [...this.commitEvidence.keys()]) {
|
|
384
|
+
if (!this.trackedBlocks.has(blockId))
|
|
385
|
+
this.commitEvidence.delete(blockId);
|
|
386
|
+
}
|
|
311
387
|
// Fill the growth budget in two passes: fresh growth (no failed attempts yet) first, retrying
|
|
312
388
|
// blocks with what remains — otherwise a stuck retry set at the front of the tracked-block
|
|
313
389
|
// insertion order would starve peers that just joined.
|
|
@@ -325,7 +401,7 @@ export class RebalanceMonitor {
|
|
|
325
401
|
growthDeferred++;
|
|
326
402
|
}
|
|
327
403
|
}
|
|
328
|
-
this.lastGrowthDeferred = growthDeferred;
|
|
404
|
+
this.lastGrowthDeferred = growthDeferred + lookupFailed;
|
|
329
405
|
this.lastRebalanceAt = Date.now();
|
|
330
406
|
if (growthDeferred > 0) {
|
|
331
407
|
// Deferred blocks drain one budget-full per check. Checks fire on libp2p connection events
|
|
@@ -341,18 +417,36 @@ export class RebalanceMonitor {
|
|
|
341
417
|
return { gained, lost, newOwners, grown, floor: this.getCohortSize(), triggeredAt };
|
|
342
418
|
}
|
|
343
419
|
/**
|
|
344
|
-
* The
|
|
345
|
-
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
420
|
+
* The peers responsible for a block, nearest first. With a key network wired this is its
|
|
421
|
+
* `findCluster` cohort (see {@link RebalanceMonitorDeps.keyNetwork}); otherwise FRET's nearest
|
|
422
|
+
* {@link getCohortSize} ring members.
|
|
423
|
+
*
|
|
424
|
+
* NOTE: one `findCluster` (peer-store reads for each cohort member) per tracked block per pass, where
|
|
425
|
+
* FRET's cohort was one synchronous call; fine under the pass throttle; if passes on nodes holding many
|
|
426
|
+
* blocks ever show up as slow, share the lookup with the coordinator's responsibility cache.
|
|
427
|
+
*/
|
|
428
|
+
async cohortFor(blockId) {
|
|
429
|
+
const key = routingKeyForBlock(blockId);
|
|
430
|
+
if (this.deps.keyNetwork) {
|
|
431
|
+
return Object.keys(await this.deps.keyNetwork.findCluster(key));
|
|
432
|
+
}
|
|
433
|
+
return this.deps.fret.assembleCohort(await hashKey(key), this.getCohortSize());
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* The replication floor `N`. Public so the ring-shift handoff and the rebalance reaction can gate
|
|
437
|
+
* release on confirming replication to this many holders (`docs/arachnode-ring-handoff.md`
|
|
438
|
+
* § Replication floor). Derives from FRET's network-size estimate: `clamp(ceil(sqrt(n_est)), 1, 3)`,
|
|
439
|
+
* defaulting to 3 when no confident estimate exists — and never above the configured `clusterSize`,
|
|
440
|
+
* since no block has more responsible holders than that to confirm on.
|
|
348
441
|
*/
|
|
349
442
|
getCohortSize() {
|
|
350
443
|
const diag = this.deps.fret.getDiagnostics?.();
|
|
351
444
|
const estimate = diag?.estimate ?? diag?.n;
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
445
|
+
const size = typeof estimate === 'number' && Number.isFinite(estimate) && estimate > 0
|
|
446
|
+
? Math.max(1, Math.min(3, Math.ceil(Math.sqrt(estimate))))
|
|
447
|
+
: 3;
|
|
448
|
+
const cap = this.deps.clusterSize;
|
|
449
|
+
return cap != null && cap >= 1 ? Math.min(size, cap) : size;
|
|
356
450
|
}
|
|
357
451
|
emitEvent(event) {
|
|
358
452
|
for (const handler of this.handlers) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rebalance-monitor.js","sourceRoot":"","sources":["../../../src/cluster/rebalance-monitor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rebalance-monitor.js","sourceRoot":"","sources":["../../../src/cluster/rebalance-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spread-on-churn.d.ts","sourceRoot":"","sources":["../../../src/cluster/spread-on-churn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"spread-on-churn.d.ts","sourceRoot":"","sources":["../../../src/cluster/spread-on-churn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAQrE,MAAM,WAAW,mBAAmB;IACnC,gEAAgE;IAChE,OAAO,EAAE,OAAO,CAAA;IAChB,wEAAwE;IACxE,cAAc,EAAE,MAAM,CAAA;IACtB,sEAAsE;IACtE,qBAAqB,EAAE,OAAO,CAAA;IAC9B,kFAAkF;IAClF,eAAe,EAAE,MAAM,CAAA;IACvB,kEAAkE;IAClE,mBAAmB,EAAE,MAAM,CAAA;IAC3B,oEAAoE;IACpE,aAAa,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAA;IACzB;;;;;OAKG;IACH,qBAAqB,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,iBAAiB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,WAAW,CAAA;IACjB,iBAAiB,EAAE,iBAAiB,CAAA;IACpC;;;;OAIG;IACH,IAAI,EAAE,kBAAkB,CAAA;IACxB,WAAW,EAAE,YAAY,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC3B;AAED,MAAM,WAAW,WAAW;IAC3B,8BAA8B;IAC9B,MAAM,EAAE,KAAK,CAAC;QACb,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,EAAE,CAAA;QACjB,SAAS,EAAE,MAAM,EAAE,CAAA;QACnB,MAAM,EAAE,MAAM,EAAE,CAAA;KAChB,CAAC,CAAA;IACF,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAA;CACnB;AAED,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;AAiBjD,qBAAa,oBAAqB,YAAW,SAAS;IAYpD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAXtB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAa;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,aAAa,CAA6C;IAClE,OAAO,CAAC,mBAAmB,CAAe;IAC1C,OAAO,CAAC,kBAAkB,CAAI;IAE9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAY;gBAG5B,IAAI,EAAE,iBAAiB,EACxC,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAWpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3B,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAItC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAInC,oBAAoB,IAAI,MAAM;IAI9B,4DAA4D;IACtD,QAAQ,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAM7C,OAAO,CAAC,eAAe;YA2BT,aAAa;IA+F3B,OAAO,CAAC,iBAAiB;IAiCzB,OAAO,CAAC,SAAS;CASjB"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
import { routingKeyForBlock } from '@optimystic/db-core';
|
|
1
2
|
import { hashKey } from 'p2p-fret';
|
|
2
|
-
import {
|
|
3
|
-
import { BlockTransferClient, sourceBlockCertification } from './block-transfer-service.js';
|
|
3
|
+
import { pushBlockToPeers } from './block-transfer-service.js';
|
|
4
4
|
import { createLogger } from '../logger.js';
|
|
5
5
|
const log = createLogger('spread-on-churn');
|
|
6
|
-
const textEncoder = new TextEncoder();
|
|
7
6
|
// ── Defaults ─────────────────────────────────────────────────────────
|
|
8
7
|
const DEFAULT_CONFIG = {
|
|
9
8
|
enabled: true,
|
|
@@ -108,7 +107,7 @@ export class SpreadOnChurnMonitor {
|
|
|
108
107
|
const effectiveD = this.computeEffectiveD();
|
|
109
108
|
const spreadResults = [];
|
|
110
109
|
for (const blockId of this.trackedBlocks) {
|
|
111
|
-
const key =
|
|
110
|
+
const key = routingKeyForBlock(blockId);
|
|
112
111
|
const coord = await hashKey(key);
|
|
113
112
|
// Check eligibility: only middle peers spread
|
|
114
113
|
const rank = this.deps.fret.neighborDistance(selfId, coord, this.deps.clusterSize);
|
|
@@ -121,18 +120,33 @@ export class SpreadOnChurnMonitor {
|
|
|
121
120
|
const targets = expanded.filter(id => !cohortSet.has(id) && id !== selfId);
|
|
122
121
|
if (targets.length === 0)
|
|
123
122
|
continue;
|
|
124
|
-
//
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
123
|
+
// The shared read-certify-push loop, to every target. Both per-target deadlines are set:
|
|
124
|
+
// a target that connects but never replies would otherwise hang this sequential loop
|
|
125
|
+
// forever during churn (exactly when slow/dying peers are common). A receiver running
|
|
126
|
+
// the default `requirePushCertificate` rejects an uncertified push, so a block this node
|
|
127
|
+
// holds no proof for simply fails to spread (logged by the receiver as
|
|
128
|
+
// `push:reject-uncertified`) rather than being planted.
|
|
129
|
+
//
|
|
130
|
+
// NOTE: no memory of earlier spreads — every debounced departure re-pushes every eligible block
|
|
131
|
+
// to every expansion target, including targets a previous pass already confirmed. Targets are
|
|
132
|
+
// only peers OUTSIDE the cohort, so a deployment no larger than its cohort (a two-member pair)
|
|
133
|
+
// spreads nothing. If churn on a larger network shows the same (block, target) pushed pass
|
|
134
|
+
// after pass, remember confirmed targets per block the way RebalanceMonitor's `cohortPeers` does.
|
|
135
|
+
const outcome = await pushBlockToPeers(this.deps.repo, this.deps.peerNetwork, blockId, targets, {
|
|
136
|
+
reason: 'replication',
|
|
137
|
+
protocolPrefix: this.deps.protocolPrefix,
|
|
138
|
+
dialTimeoutMs: this.config.pushDialTimeoutMs,
|
|
139
|
+
responseTimeoutMs: this.config.pushResponseTimeoutMs,
|
|
140
|
+
});
|
|
141
|
+
if (outcome.status === 'unavailable') {
|
|
128
142
|
// The repo could not work out whether it still holds this block (unmaterializable
|
|
129
143
|
// history / failed restore). Untracking on that answer would silently drop the block
|
|
130
144
|
// from the spread set on a guess, and only a later re-commit would put it back — so
|
|
131
145
|
// keep it tracked and let the next sweep (or a heal) settle it.
|
|
132
|
-
log('unavailable block=%s reason=%s (keeping tracked)', blockId,
|
|
146
|
+
log('unavailable block=%s reason=%s (keeping tracked)', blockId, outcome.reason);
|
|
133
147
|
continue;
|
|
134
148
|
}
|
|
135
|
-
if (
|
|
149
|
+
if (outcome.status === 'no-local-data') {
|
|
136
150
|
// The block has left local storage. No deletion event exists today to evict it
|
|
137
151
|
// from the tracked set, so prune here. Deleting the current element of a Set mid
|
|
138
152
|
// for...of is safe - it does not disturb the rest of the iteration. A later
|
|
@@ -141,44 +155,17 @@ export class SpreadOnChurnMonitor {
|
|
|
141
155
|
this.trackedBlocks.delete(blockId);
|
|
142
156
|
continue;
|
|
143
157
|
}
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const succeeded = [];
|
|
153
|
-
const failed = [];
|
|
154
|
-
for (const targetId of targets) {
|
|
155
|
-
try {
|
|
156
|
-
const peerId = peerIdFromString(targetId);
|
|
157
|
-
const client = new BlockTransferClient(peerId, this.deps.peerNetwork, this.deps.protocolPrefix);
|
|
158
|
-
// Bound both the dial and the response read. A target that connects but
|
|
159
|
-
// never replies would otherwise hang this sequential loop forever during
|
|
160
|
-
// churn (exactly when slow/dying peers are common); the deadline makes the
|
|
161
|
-
// push throw, which the catch below records as `failed` so the pass advances.
|
|
162
|
-
const response = await client.pushBlocks([blockId], [blockData], 'replication', certification, {
|
|
163
|
-
dialTimeoutMs: this.config.pushDialTimeoutMs,
|
|
164
|
-
responseTimeoutMs: this.config.pushResponseTimeoutMs,
|
|
165
|
-
});
|
|
166
|
-
// A round-trip that does not throw still does not mean the replica
|
|
167
|
-
// landed: handlePush reports a block in `missing` when it could not
|
|
168
|
-
// parse or persist it. Treat that as a failed push so the resilience
|
|
169
|
-
// mechanism does not falsely count the new owner as holding the block.
|
|
170
|
-
if (response.missing.includes(blockId)) {
|
|
171
|
-
failed.push(targetId);
|
|
172
|
-
log('push:rejected block=%s target=%s (receiver did not persist)', blockId, targetId);
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
succeeded.push(targetId);
|
|
176
|
-
log('push:ok block=%s target=%s', blockId, targetId);
|
|
177
|
-
}
|
|
158
|
+
const succeeded = outcome.confirmed;
|
|
159
|
+
const failed = outcome.refusals.map(refusal => refusal.peerId);
|
|
160
|
+
for (const targetId of succeeded) {
|
|
161
|
+
log('push:ok block=%s target=%s', blockId, targetId);
|
|
162
|
+
}
|
|
163
|
+
for (const refusal of outcome.refusals) {
|
|
164
|
+
if (refusal.reason === 'rejected') {
|
|
165
|
+
log('push:rejected block=%s target=%s (receiver did not persist)', blockId, refusal.peerId);
|
|
178
166
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
log('push:fail block=%s target=%s err=%s', blockId, targetId, err.message);
|
|
167
|
+
else {
|
|
168
|
+
log('push:fail block=%s target=%s err=%s', blockId, refusal.peerId, refusal.error);
|
|
182
169
|
}
|
|
183
170
|
}
|
|
184
171
|
spreadResults.push({ blockId, targets, succeeded, failed });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spread-on-churn.js","sourceRoot":"","sources":["../../../src/cluster/spread-on-churn.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"spread-on-churn.js","sourceRoot":"","sources":["../../../src/cluster/spread-on-churn.ts"],"names":[],"mappings":"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"}
|