@peerbit/shared-log 13.2.24 → 13.2.25
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/checked-prune.d.ts +12 -0
- package/dist/src/checked-prune.d.ts.map +1 -1
- package/dist/src/checked-prune.js +33 -0
- package/dist/src/checked-prune.js.map +1 -1
- package/dist/src/coordinate-persistence.d.ts +211 -0
- package/dist/src/coordinate-persistence.d.ts.map +1 -0
- package/dist/src/coordinate-persistence.js +1133 -0
- package/dist/src/coordinate-persistence.js.map +1 -0
- package/dist/src/errors.d.ts +1 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +19 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index.d.ts +127 -133
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1400 -4269
- package/dist/src/index.js.map +1 -1
- package/dist/src/instance-lifecycle.d.ts +117 -0
- package/dist/src/instance-lifecycle.d.ts.map +1 -0
- package/dist/src/instance-lifecycle.js +254 -0
- package/dist/src/instance-lifecycle.js.map +1 -0
- package/dist/src/join-warmup.d.ts +86 -0
- package/dist/src/join-warmup.d.ts.map +1 -0
- package/dist/src/join-warmup.js +351 -0
- package/dist/src/join-warmup.js.map +1 -0
- package/dist/src/native-write-through-block-store.d.ts +123 -0
- package/dist/src/native-write-through-block-store.d.ts.map +1 -0
- package/dist/src/native-write-through-block-store.js +989 -0
- package/dist/src/native-write-through-block-store.js.map +1 -0
- package/dist/src/peer-session.d.ts +117 -0
- package/dist/src/peer-session.d.ts.map +1 -0
- package/dist/src/peer-session.js +259 -0
- package/dist/src/peer-session.js.map +1 -0
- package/dist/src/replication-announcement.d.ts +116 -0
- package/dist/src/replication-announcement.d.ts.map +1 -0
- package/dist/src/replication-announcement.js +515 -0
- package/dist/src/replication-announcement.js.map +1 -0
- package/dist/src/replicator-liveness.d.ts +59 -0
- package/dist/src/replicator-liveness.d.ts.map +1 -0
- package/dist/src/replicator-liveness.js +304 -0
- package/dist/src/replicator-liveness.js.map +1 -0
- package/dist/src/sync/dispatch-lifecycle.d.ts +48 -0
- package/dist/src/sync/dispatch-lifecycle.d.ts.map +1 -0
- package/dist/src/sync/dispatch-lifecycle.js +141 -0
- package/dist/src/sync/dispatch-lifecycle.js.map +1 -0
- package/dist/src/sync/factory.d.ts +29 -0
- package/dist/src/sync/factory.d.ts.map +1 -0
- package/dist/src/sync/factory.js +87 -0
- package/dist/src/sync/factory.js.map +1 -0
- package/dist/src/sync/pending-sync-store.d.ts +105 -0
- package/dist/src/sync/pending-sync-store.d.ts.map +1 -0
- package/dist/src/sync/pending-sync-store.js +877 -0
- package/dist/src/sync/pending-sync-store.js.map +1 -0
- package/dist/src/sync/rateless-iblt.d.ts +4 -1
- package/dist/src/sync/rateless-iblt.d.ts.map +1 -1
- package/dist/src/sync/rateless-iblt.js +102 -106
- package/dist/src/sync/rateless-iblt.js.map +1 -1
- package/dist/src/sync/simple.d.ts +10 -41
- package/dist/src/sync/simple.d.ts.map +1 -1
- package/dist/src/sync/simple.js +259 -952
- package/dist/src/sync/simple.js.map +1 -1
- package/dist/src/sync/sync-peer-state.d.ts +16 -0
- package/dist/src/sync/sync-peer-state.d.ts.map +1 -0
- package/dist/src/sync/sync-peer-state.js +82 -0
- package/dist/src/sync/sync-peer-state.js.map +1 -0
- package/package.json +9 -9
- package/src/checked-prune.ts +35 -0
- package/src/coordinate-persistence.ts +1796 -0
- package/src/errors.ts +21 -0
- package/src/index.ts +4014 -7858
- package/src/instance-lifecycle.ts +351 -0
- package/src/join-warmup.ts +507 -0
- package/src/native-write-through-block-store.ts +1170 -0
- package/src/peer-session.ts +336 -0
- package/src/replication-announcement.ts +744 -0
- package/src/replicator-liveness.ts +439 -0
- package/src/sync/dispatch-lifecycle.ts +230 -0
- package/src/sync/factory.ts +154 -0
- package/src/sync/pending-sync-store.ts +1085 -0
- package/src/sync/rateless-iblt.ts +122 -132
- package/src/sync/simple.ts +334 -1144
- package/src/sync/sync-peer-state.ts +107 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-write-through-block-store.js","sourceRoot":"","sources":["../../src/native-write-through-block-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
export type PeerSessionKind = "opening" | "departing";
|
|
2
|
+
export type PeerSessionPhase = "opening" | "open" | "departing" | "superseded";
|
|
3
|
+
export type PeerSessionDeps = {
|
|
4
|
+
isReplicationLifecycleActive: (controller: AbortController | undefined) => boolean;
|
|
5
|
+
getReplicationLifecycleController: () => AbortController | undefined;
|
|
6
|
+
};
|
|
7
|
+
export type PeerReceiveAdmissionOptions = {
|
|
8
|
+
allowReplicationInfoBlocked?: boolean;
|
|
9
|
+
allowCleanupGate?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare class PeerSession {
|
|
12
|
+
private readonly registry;
|
|
13
|
+
readonly peerHash: string;
|
|
14
|
+
readonly kind: PeerSessionKind;
|
|
15
|
+
readonly replicationLifecycleController: AbortController | undefined;
|
|
16
|
+
phase: PeerSessionPhase;
|
|
17
|
+
replicatorRemoved: boolean;
|
|
18
|
+
openingBarrierActive: boolean;
|
|
19
|
+
readonly createdAt: number;
|
|
20
|
+
constructor(registry: PeerSessionRegistry, peerHash: string, kind: PeerSessionKind, replicationLifecycleController: AbortController | undefined);
|
|
21
|
+
/** ≡ former SharedLog.isCurrentSubscriptionEpoch(this.peerHash, this). */
|
|
22
|
+
isCurrent(): boolean;
|
|
23
|
+
/** Barrier window opens — ≡ the legacy
|
|
24
|
+
* `_subscriptionOpeningEpochByPeer.set(peerHash, thisSession)`. */
|
|
25
|
+
beginOpeningBarrier(): void;
|
|
26
|
+
/** Barrier window closes — ≡ the legacy identity-guarded
|
|
27
|
+
* `_subscriptionOpeningEpochByPeer.delete(peerHash)`. Unconditional:
|
|
28
|
+
* the map guard only avoided clobbering a NEWER peer-keyed entry, and
|
|
29
|
+
* per-session flags cannot collide (a newer barrier flags its own,
|
|
30
|
+
* already-rotated session). */
|
|
31
|
+
finishOpeningBarrier(): void;
|
|
32
|
+
/** ≡ ownsReplicationLifecycle() && ownsSubscriptionEpoch() with both
|
|
33
|
+
* captured at the epoch-advance. */
|
|
34
|
+
isActive(): boolean;
|
|
35
|
+
/** ≡ former SharedLog.isPeerReceiveAdmissionOpen(peerHash,
|
|
36
|
+
* this.replicationLifecycleController, this, options). */
|
|
37
|
+
isReceiveAdmissionOpen(options?: PeerReceiveAdmissionOptions): boolean;
|
|
38
|
+
}
|
|
39
|
+
export declare class PeerSessionRegistry {
|
|
40
|
+
readonly deps: PeerSessionDeps;
|
|
41
|
+
sessions: Map<string, PeerSession>;
|
|
42
|
+
_replicationInfoReceiveEpochByPeer: Map<string, object>;
|
|
43
|
+
_receiveCleanupGateByPeer: Map<string, number>;
|
|
44
|
+
_replicationInfoBlockedPeers: Set<string>;
|
|
45
|
+
constructor(deps: PeerSessionDeps);
|
|
46
|
+
/** open()-time re-init: REPLACE the map instances, matching today's
|
|
47
|
+
* `= new Map()` re-inits (index.ts ctor / open).
|
|
48
|
+
* The session map is intentionally NOT cleared at _close — tokens must
|
|
49
|
+
* stay current across close so a late continuation's epoch check resolves
|
|
50
|
+
* exactly as it does today (close-safety comes from the paired
|
|
51
|
+
* lifecycle-controller check, not the epoch). There is NO clearForClose()
|
|
52
|
+
* for sessions; the receive-epoch map, by contrast, IS cleared at close. */
|
|
53
|
+
resetForOpen(): void;
|
|
54
|
+
/** ≡ the legacy `this._replicationInfoBlockedPeers.add(peerHash)` (host
|
|
55
|
+
* Set, fence B5). */
|
|
56
|
+
blockReplicationInfo(peerHash: string): void;
|
|
57
|
+
/** ≡ the legacy `this._replicationInfoBlockedPeers.delete(peerHash)`. */
|
|
58
|
+
unblockReplicationInfo(peerHash: string): void;
|
|
59
|
+
/** ≡ the legacy `this._replicationInfoBlockedPeers.has(peerHash)`. */
|
|
60
|
+
isReplicationInfoBlocked(peerHash: string): boolean;
|
|
61
|
+
/** _close counterpart of the legacy
|
|
62
|
+
* `this._replicationInfoReceiveEpochByPeer?.clear()`: a receive-epoch
|
|
63
|
+
* capture held across close must compare against null, never against a
|
|
64
|
+
* surviving token. Sessions deliberately survive close (see
|
|
65
|
+
* resetForOpen); the paired membership-lifecycle term at every
|
|
66
|
+
* receive-epoch check site makes the ordering unobservable either way. */
|
|
67
|
+
clearReceiveEpochsForClose(): void;
|
|
68
|
+
/** _close counterpart of the legacy
|
|
69
|
+
* `this._receiveCleanupGateByPeer?.clear()`: an in-place clear (NOT a
|
|
70
|
+
* map replacement) so an in-flight removal's captured release still
|
|
71
|
+
* drains the instance it incremented — see acquireReceiveCleanupGate. */
|
|
72
|
+
clearCleanupGatesForClose(): void;
|
|
73
|
+
/** ≡ removeReplicator's inline `blockPeerReceiveAdmission` +
|
|
74
|
+
* release-in-`finally` pair (fence B6). Acquire captures the CURRENT
|
|
75
|
+
* gate-map instance and increments once; the returned release is
|
|
76
|
+
* idempotent and decrements the captured map, deleting the entry at 0.
|
|
77
|
+
* The map-instance capture is load-bearing: close/reopen replaces the
|
|
78
|
+
* map (resetForOpen), and a late release must drain the exact map it
|
|
79
|
+
* incremented — a release against a fresh open's map would corrupt that
|
|
80
|
+
* open's refcounts. The `?? 1` mirrors the legacy release: an entry
|
|
81
|
+
* cleared at _close decrements to 0 and stays deleted. */
|
|
82
|
+
acquireReceiveCleanupGate(peerHash: string): () => void;
|
|
83
|
+
/** ≡ the legacy `(this._receiveCleanupGateByPeer.get(peer) ?? 0) === 0`
|
|
84
|
+
* read (receive-admission term and prune final-confirmation filter). */
|
|
85
|
+
isReceiveCleanupGateOpen(peerHash: string): boolean;
|
|
86
|
+
/** ≡ legacy SharedLog.advanceReplicationInfoReceiveEpoch. Advances
|
|
87
|
+
* WITHOUT rotating the session — the recovery fence must survive
|
|
88
|
+
* removeReplicator, where the peer stays subscribed. */
|
|
89
|
+
advanceReceiveEpoch(peerHash: string): object;
|
|
90
|
+
/** ≡ legacy SharedLog.getReplicationInfoReceiveEpoch (`?? null`). */
|
|
91
|
+
receiveEpoch(peerHash: string): object | null;
|
|
92
|
+
/** ≡ legacy SharedLog.isCurrentReplicationInfoReceiveEpoch. */
|
|
93
|
+
isReceiveEpochCurrent(peerHash: string, epoch: object | null): boolean;
|
|
94
|
+
current(peerHash: string): PeerSession | null;
|
|
95
|
+
/** null is a VALID current value: a peer that never subscribed has no
|
|
96
|
+
* session, and the former host predicate admitted
|
|
97
|
+
* isCurrent(peer, null) === true. Preserved exactly. */
|
|
98
|
+
isCurrent(peerHash: string, session: object | null): boolean;
|
|
99
|
+
/** The only creation point. Supersedes (never deletes) the previous
|
|
100
|
+
* session — per-peer entries are never removed, matching today's map. */
|
|
101
|
+
rotate(peerHash: string, kind: PeerSessionKind): PeerSession;
|
|
102
|
+
/** Reconnect barrier completed. Identity-guarded phase mark; no-op when
|
|
103
|
+
* the expected token was superseded meanwhile. */
|
|
104
|
+
markOpen(peerHash: string, expectedSession: object): void;
|
|
105
|
+
/** Destructive removal committed for this peer. Mirrors the removal
|
|
106
|
+
* funnel's epoch scoping: an epoch-scoped removal only stamps the
|
|
107
|
+
* session it was scoped to — a reconnect during the removal's awaited
|
|
108
|
+
* lanes must not inherit the stamp. Undefined = unscoped removal,
|
|
109
|
+
* which stamps the current session as before; null scopes to "peer had
|
|
110
|
+
* no session at capture", so a session created meanwhile is never
|
|
111
|
+
* stamped. */
|
|
112
|
+
noteReplicatorRemoved(peerHash: string, expectedSession?: object | null): void;
|
|
113
|
+
/** Preserves the former SharedLog.isPeerReceiveAdmissionOpen predicate term
|
|
114
|
+
* for term. `session` may be null (pre-session peer). */
|
|
115
|
+
isReceiveAdmissionOpen(peerHash: string, session: object | null, replicationLifecycleController: AbortController | undefined, options?: PeerReceiveAdmissionOptions): boolean;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=peer-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-session.d.ts","sourceRoot":"","sources":["../../src/peer-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
// One PeerSession per peer connection-epoch. The session instance IS the
|
|
2
|
+
// opaque subscription-epoch token formerly stored by SharedLog: every `===`
|
|
3
|
+
// epoch comparison keeps working because tokens were always compared by
|
|
4
|
+
// identity and never inspected. Compound predicates now live on
|
|
5
|
+
// isCurrent()/isActive()/isReceiveAdmissionOpen().
|
|
6
|
+
export class PeerSession {
|
|
7
|
+
registry;
|
|
8
|
+
peerHash;
|
|
9
|
+
kind;
|
|
10
|
+
// The lifecycle controller live at rotation. All current seams pair the
|
|
11
|
+
// epoch check with a lifecycle check against a controller captured in the
|
|
12
|
+
// same synchronous window as the epoch advance; capturing it here
|
|
13
|
+
// reproduces that pairing exactly.
|
|
14
|
+
replicationLifecycleController;
|
|
15
|
+
phase;
|
|
16
|
+
// Diagnostics only in stage 2: the destructive removal funnel observed a
|
|
17
|
+
// committed replicator removal under this connection-epoch.
|
|
18
|
+
replicatorRemoved = false;
|
|
19
|
+
// Reconnect-barrier WINDOW sub-state (stage-3 home of the legacy
|
|
20
|
+
// _subscriptionOpeningEpochByPeer map entry, whose value was always this
|
|
21
|
+
// session). True exactly while the barrier window is open: set when
|
|
22
|
+
// handleSubscriptionChange starts the opening barrier (same synchronous
|
|
23
|
+
// window as the rotation that made this session current), cleared in the
|
|
24
|
+
// barrier's `finally` — including the barrier-throw path — where the map
|
|
25
|
+
// entry used to be deleted. Deliberately NOT derived from
|
|
26
|
+
// `phase === "opening"`: phase is "opening" from rotate() — BEFORE the
|
|
27
|
+
// barrier starts — and stays "opening" forever if the barrier throws
|
|
28
|
+
// (markOpen never runs), which would wrongly keep granting the opening
|
|
29
|
+
// lease bypasses that today's window drops.
|
|
30
|
+
openingBarrierActive = false;
|
|
31
|
+
createdAt = Date.now(); // diagnostics only
|
|
32
|
+
constructor(registry, peerHash, kind, replicationLifecycleController) {
|
|
33
|
+
this.registry = registry;
|
|
34
|
+
this.peerHash = peerHash;
|
|
35
|
+
this.kind = kind;
|
|
36
|
+
this.replicationLifecycleController = replicationLifecycleController;
|
|
37
|
+
this.phase = kind;
|
|
38
|
+
}
|
|
39
|
+
/** ≡ former SharedLog.isCurrentSubscriptionEpoch(this.peerHash, this). */
|
|
40
|
+
isCurrent() {
|
|
41
|
+
return this.registry.current(this.peerHash) === this;
|
|
42
|
+
}
|
|
43
|
+
/** Barrier window opens — ≡ the legacy
|
|
44
|
+
* `_subscriptionOpeningEpochByPeer.set(peerHash, thisSession)`. */
|
|
45
|
+
beginOpeningBarrier() {
|
|
46
|
+
this.openingBarrierActive = true;
|
|
47
|
+
}
|
|
48
|
+
/** Barrier window closes — ≡ the legacy identity-guarded
|
|
49
|
+
* `_subscriptionOpeningEpochByPeer.delete(peerHash)`. Unconditional:
|
|
50
|
+
* the map guard only avoided clobbering a NEWER peer-keyed entry, and
|
|
51
|
+
* per-session flags cannot collide (a newer barrier flags its own,
|
|
52
|
+
* already-rotated session). */
|
|
53
|
+
finishOpeningBarrier() {
|
|
54
|
+
this.openingBarrierActive = false;
|
|
55
|
+
}
|
|
56
|
+
/** ≡ ownsReplicationLifecycle() && ownsSubscriptionEpoch() with both
|
|
57
|
+
* captured at the epoch-advance. */
|
|
58
|
+
isActive() {
|
|
59
|
+
return (this.isCurrent() &&
|
|
60
|
+
this.registry.deps.isReplicationLifecycleActive(this.replicationLifecycleController));
|
|
61
|
+
}
|
|
62
|
+
/** ≡ former SharedLog.isPeerReceiveAdmissionOpen(peerHash,
|
|
63
|
+
* this.replicationLifecycleController, this, options). */
|
|
64
|
+
isReceiveAdmissionOpen(options) {
|
|
65
|
+
return this.registry.isReceiveAdmissionOpen(this.peerHash, this, this.replicationLifecycleController, options);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export class PeerSessionRegistry {
|
|
69
|
+
deps;
|
|
70
|
+
// The per-peer session map (formerly _subscriptionEpochByPeer; renamed
|
|
71
|
+
// once the last raw-token comparison in index.ts was gone — the values
|
|
72
|
+
// ARE the legacy epoch tokens, compared by identity and never inspected).
|
|
73
|
+
// The rename retires the map's fence-ratchet baseline entry: session
|
|
74
|
+
// identity is the mechanism the ratchet drains fences INTO, not a fence.
|
|
75
|
+
sessions;
|
|
76
|
+
// Moved from SharedLog (fence B2, same name — the sanctioned file-to-file
|
|
77
|
+
// ratchet move). Local receive generations fence replication-info handlers
|
|
78
|
+
// that were admitted before a liveness eviction but reach the per-peer
|
|
79
|
+
// apply lane after it. Per-PEER, not per-session, on purpose: the token
|
|
80
|
+
// advances at removeReplicator, where the session does NOT rotate (the
|
|
81
|
+
// peer stays subscribed), and it must also fence a peer that never had a
|
|
82
|
+
// session. Unlike sessions this map IS cleared at _close (see
|
|
83
|
+
// clearReceiveEpochsForClose) and replaced at open.
|
|
84
|
+
_replicationInfoReceiveEpochByPeer;
|
|
85
|
+
// Moved from SharedLog (fence B6, same name — the sanctioned file-to-file
|
|
86
|
+
// ratchet move). Refcount of in-flight destructive peer cleanups: while
|
|
87
|
+
// non-zero, receive admission for the peer is closed and prune final
|
|
88
|
+
// confirmations ignore the peer. Per-PEER, not per-session, on purpose:
|
|
89
|
+
// the gate is held across removeReplicator's awaited lanes while a
|
|
90
|
+
// reconnect may rotate the session; a fresh session with a zero gate
|
|
91
|
+
// would reopen receive admission mid-drain. The map instance is replaced
|
|
92
|
+
// only at open (resetForOpen) and cleared in place at _close.
|
|
93
|
+
_receiveCleanupGateByPeer;
|
|
94
|
+
// Moved from SharedLog (fence B5, same name). Peers whose replication-info
|
|
95
|
+
// is fenced: added when a departure/unsubscribe rotation or a reconnect
|
|
96
|
+
// barrier starts, removed only when an opening barrier commits. Per-PEER,
|
|
97
|
+
// not per-session, on purpose (same reasoning as B2/B6 above): the block
|
|
98
|
+
// is set under one session (the departing rotation) and cleared under a
|
|
99
|
+
// LATER one (the opening barrier), so its lifetime deliberately spans
|
|
100
|
+
// session identities; readers (prune final-confirmation filter,
|
|
101
|
+
// announcement repair targeting, pruneOfflineReplicators) ask about peers
|
|
102
|
+
// that may have no session at all; and the `??`-fallback rotation in
|
|
103
|
+
// handleSubscriptionChange rotates WITHOUT touching blocked state — a
|
|
104
|
+
// per-session flag would silently reset it there. Replaced only at open
|
|
105
|
+
// (resetForOpen); deliberately NOT cleared at _close, matching the legacy
|
|
106
|
+
// host field site-for-site. Kept as a public field so existing tests can
|
|
107
|
+
// keep instrumenting the raw Set instance (events.spec.ts spies on its
|
|
108
|
+
// `delete`).
|
|
109
|
+
_replicationInfoBlockedPeers;
|
|
110
|
+
constructor(deps) {
|
|
111
|
+
this.deps = deps;
|
|
112
|
+
this.resetForOpen();
|
|
113
|
+
}
|
|
114
|
+
/** open()-time re-init: REPLACE the map instances, matching today's
|
|
115
|
+
* `= new Map()` re-inits (index.ts ctor / open).
|
|
116
|
+
* The session map is intentionally NOT cleared at _close — tokens must
|
|
117
|
+
* stay current across close so a late continuation's epoch check resolves
|
|
118
|
+
* exactly as it does today (close-safety comes from the paired
|
|
119
|
+
* lifecycle-controller check, not the epoch). There is NO clearForClose()
|
|
120
|
+
* for sessions; the receive-epoch map, by contrast, IS cleared at close. */
|
|
121
|
+
resetForOpen() {
|
|
122
|
+
this.sessions = new Map();
|
|
123
|
+
this._replicationInfoReceiveEpochByPeer = new Map();
|
|
124
|
+
this._receiveCleanupGateByPeer = new Map();
|
|
125
|
+
this._replicationInfoBlockedPeers = new Set();
|
|
126
|
+
}
|
|
127
|
+
/** ≡ the legacy `this._replicationInfoBlockedPeers.add(peerHash)` (host
|
|
128
|
+
* Set, fence B5). */
|
|
129
|
+
blockReplicationInfo(peerHash) {
|
|
130
|
+
this._replicationInfoBlockedPeers.add(peerHash);
|
|
131
|
+
}
|
|
132
|
+
/** ≡ the legacy `this._replicationInfoBlockedPeers.delete(peerHash)`. */
|
|
133
|
+
unblockReplicationInfo(peerHash) {
|
|
134
|
+
this._replicationInfoBlockedPeers.delete(peerHash);
|
|
135
|
+
}
|
|
136
|
+
/** ≡ the legacy `this._replicationInfoBlockedPeers.has(peerHash)`. */
|
|
137
|
+
isReplicationInfoBlocked(peerHash) {
|
|
138
|
+
return this._replicationInfoBlockedPeers.has(peerHash);
|
|
139
|
+
}
|
|
140
|
+
/** _close counterpart of the legacy
|
|
141
|
+
* `this._replicationInfoReceiveEpochByPeer?.clear()`: a receive-epoch
|
|
142
|
+
* capture held across close must compare against null, never against a
|
|
143
|
+
* surviving token. Sessions deliberately survive close (see
|
|
144
|
+
* resetForOpen); the paired membership-lifecycle term at every
|
|
145
|
+
* receive-epoch check site makes the ordering unobservable either way. */
|
|
146
|
+
clearReceiveEpochsForClose() {
|
|
147
|
+
this._replicationInfoReceiveEpochByPeer.clear();
|
|
148
|
+
}
|
|
149
|
+
/** _close counterpart of the legacy
|
|
150
|
+
* `this._receiveCleanupGateByPeer?.clear()`: an in-place clear (NOT a
|
|
151
|
+
* map replacement) so an in-flight removal's captured release still
|
|
152
|
+
* drains the instance it incremented — see acquireReceiveCleanupGate. */
|
|
153
|
+
clearCleanupGatesForClose() {
|
|
154
|
+
this._receiveCleanupGateByPeer.clear();
|
|
155
|
+
}
|
|
156
|
+
/** ≡ removeReplicator's inline `blockPeerReceiveAdmission` +
|
|
157
|
+
* release-in-`finally` pair (fence B6). Acquire captures the CURRENT
|
|
158
|
+
* gate-map instance and increments once; the returned release is
|
|
159
|
+
* idempotent and decrements the captured map, deleting the entry at 0.
|
|
160
|
+
* The map-instance capture is load-bearing: close/reopen replaces the
|
|
161
|
+
* map (resetForOpen), and a late release must drain the exact map it
|
|
162
|
+
* incremented — a release against a fresh open's map would corrupt that
|
|
163
|
+
* open's refcounts. The `?? 1` mirrors the legacy release: an entry
|
|
164
|
+
* cleared at _close decrements to 0 and stays deleted. */
|
|
165
|
+
acquireReceiveCleanupGate(peerHash) {
|
|
166
|
+
const gates = this._receiveCleanupGateByPeer;
|
|
167
|
+
gates.set(peerHash, (gates.get(peerHash) ?? 0) + 1);
|
|
168
|
+
let released = false;
|
|
169
|
+
return () => {
|
|
170
|
+
if (released) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
released = true;
|
|
174
|
+
const remaining = (gates.get(peerHash) ?? 1) - 1;
|
|
175
|
+
if (remaining > 0) {
|
|
176
|
+
gates.set(peerHash, remaining);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
gates.delete(peerHash);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/** ≡ the legacy `(this._receiveCleanupGateByPeer.get(peer) ?? 0) === 0`
|
|
184
|
+
* read (receive-admission term and prune final-confirmation filter). */
|
|
185
|
+
isReceiveCleanupGateOpen(peerHash) {
|
|
186
|
+
return (this._receiveCleanupGateByPeer.get(peerHash) ?? 0) === 0;
|
|
187
|
+
}
|
|
188
|
+
/** ≡ legacy SharedLog.advanceReplicationInfoReceiveEpoch. Advances
|
|
189
|
+
* WITHOUT rotating the session — the recovery fence must survive
|
|
190
|
+
* removeReplicator, where the peer stays subscribed. */
|
|
191
|
+
advanceReceiveEpoch(peerHash) {
|
|
192
|
+
const next = {};
|
|
193
|
+
this._replicationInfoReceiveEpochByPeer.set(peerHash, next);
|
|
194
|
+
return next;
|
|
195
|
+
}
|
|
196
|
+
/** ≡ legacy SharedLog.getReplicationInfoReceiveEpoch (`?? null`). */
|
|
197
|
+
receiveEpoch(peerHash) {
|
|
198
|
+
return this._replicationInfoReceiveEpochByPeer.get(peerHash) ?? null;
|
|
199
|
+
}
|
|
200
|
+
/** ≡ legacy SharedLog.isCurrentReplicationInfoReceiveEpoch. */
|
|
201
|
+
isReceiveEpochCurrent(peerHash, epoch) {
|
|
202
|
+
return this.receiveEpoch(peerHash) === epoch;
|
|
203
|
+
}
|
|
204
|
+
current(peerHash) {
|
|
205
|
+
return this.sessions.get(peerHash) ?? null;
|
|
206
|
+
}
|
|
207
|
+
/** null is a VALID current value: a peer that never subscribed has no
|
|
208
|
+
* session, and the former host predicate admitted
|
|
209
|
+
* isCurrent(peer, null) === true. Preserved exactly. */
|
|
210
|
+
isCurrent(peerHash, session) {
|
|
211
|
+
return this.current(peerHash) === session;
|
|
212
|
+
}
|
|
213
|
+
/** The only creation point. Supersedes (never deletes) the previous
|
|
214
|
+
* session — per-peer entries are never removed, matching today's map. */
|
|
215
|
+
rotate(peerHash, kind) {
|
|
216
|
+
const previous = this.sessions.get(peerHash);
|
|
217
|
+
if (previous) {
|
|
218
|
+
previous.phase = "superseded";
|
|
219
|
+
}
|
|
220
|
+
const next = new PeerSession(this, peerHash, kind, this.deps.getReplicationLifecycleController());
|
|
221
|
+
this.sessions.set(peerHash, next);
|
|
222
|
+
return next;
|
|
223
|
+
}
|
|
224
|
+
/** Reconnect barrier completed. Identity-guarded phase mark; no-op when
|
|
225
|
+
* the expected token was superseded meanwhile. */
|
|
226
|
+
markOpen(peerHash, expectedSession) {
|
|
227
|
+
const current = this.sessions.get(peerHash);
|
|
228
|
+
if (current !== undefined &&
|
|
229
|
+
current === expectedSession &&
|
|
230
|
+
current.kind === "opening") {
|
|
231
|
+
current.phase = "open";
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/** Destructive removal committed for this peer. Mirrors the removal
|
|
235
|
+
* funnel's epoch scoping: an epoch-scoped removal only stamps the
|
|
236
|
+
* session it was scoped to — a reconnect during the removal's awaited
|
|
237
|
+
* lanes must not inherit the stamp. Undefined = unscoped removal,
|
|
238
|
+
* which stamps the current session as before; null scopes to "peer had
|
|
239
|
+
* no session at capture", so a session created meanwhile is never
|
|
240
|
+
* stamped. */
|
|
241
|
+
noteReplicatorRemoved(peerHash, expectedSession) {
|
|
242
|
+
const current = this.sessions.get(peerHash);
|
|
243
|
+
if (current &&
|
|
244
|
+
(expectedSession === undefined || current === expectedSession)) {
|
|
245
|
+
current.replicatorRemoved = true;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/** Preserves the former SharedLog.isPeerReceiveAdmissionOpen predicate term
|
|
249
|
+
* for term. `session` may be null (pre-session peer). */
|
|
250
|
+
isReceiveAdmissionOpen(peerHash, session, replicationLifecycleController, options) {
|
|
251
|
+
return (this.deps.isReplicationLifecycleActive(replicationLifecycleController) &&
|
|
252
|
+
this.isCurrent(peerHash, session) &&
|
|
253
|
+
(options?.allowReplicationInfoBlocked === true ||
|
|
254
|
+
!this.isReplicationInfoBlocked(peerHash)) &&
|
|
255
|
+
(options?.allowCleanupGate === true ||
|
|
256
|
+
this.isReceiveCleanupGateOpen(peerHash)));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=peer-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-session.js","sourceRoot":"","sources":["../../src/peer-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { PublicSignKey } from "@peerbit/crypto";
|
|
2
|
+
import type { RPC } from "@peerbit/rpc";
|
|
3
|
+
import { debounceFixedInterval } from "@peerbit/time";
|
|
4
|
+
import type { TransportMessage } from "./message.js";
|
|
5
|
+
import type { ReplicationRangeIndexable } from "./ranges.js";
|
|
6
|
+
import { AddedReplicationSegmentMessage, AllReplicatingSegmentsMessage, StoppedReplicating } from "./replication.js";
|
|
7
|
+
/**
|
|
8
|
+
* Replication announcements are best-effort convergence messages. A detached
|
|
9
|
+
* fanout shard can time out even though the shared log itself remains open.
|
|
10
|
+
* Keep retries deliberately limited to concrete TimeoutErrors: abort/close and
|
|
11
|
+
* unexpected programming/data errors must retain their existing semantics.
|
|
12
|
+
*
|
|
13
|
+
* Exact constructor/name checks complement `instanceof` for errors crossing
|
|
14
|
+
* worker or duplicate-package boundaries in browsers.
|
|
15
|
+
*/
|
|
16
|
+
export declare const isTransientReplicationAnnouncementError: (error: unknown, seen?: Set<unknown>) => boolean;
|
|
17
|
+
/**
|
|
18
|
+
* One session per announcement window — rotated at exactly the sites that
|
|
19
|
+
* bumped the legacy retry-generation counter: construction, resetForOpen,
|
|
20
|
+
* cancelCurrentReplicationStateAnnouncementRetry, and the pre-send bump in
|
|
21
|
+
* sendReplicationAnnouncement. Identity comparison replaces every numeric
|
|
22
|
+
* generation compare. Unlike the number, identity cannot alias across open
|
|
23
|
+
* cycles (the legacy reset-to-0 was safe only by the convention that a
|
|
24
|
+
* companion controller check accompanied every compare site).
|
|
25
|
+
*/
|
|
26
|
+
export declare class AnnouncementWorkerSession {
|
|
27
|
+
readonly createdAt: number;
|
|
28
|
+
}
|
|
29
|
+
type ReplicationAnnouncementRepairTarget = {
|
|
30
|
+
key: PublicSignKey;
|
|
31
|
+
session: AnnouncementWorkerSession;
|
|
32
|
+
attempts: number;
|
|
33
|
+
done: boolean;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Repair-side adoption of a session. Replaces the legacy compound of the
|
|
37
|
+
* repair generation number, its generation controller, and the repair
|
|
38
|
+
* pending / targets / cohort-selected fields. One binding per adopted
|
|
39
|
+
* session; every rotation aborts the old binding's controller FIRST, then
|
|
40
|
+
* reassigns (abort listeners run synchronously and must observe
|
|
41
|
+
* pre-rotation state, as before). The fair cursor hash and max attempts
|
|
42
|
+
* deliberately stay OUTSIDE the binding: the cursor rotates best-effort
|
|
43
|
+
* coverage ACROSS generations, and max-attempts is a setup-scoped tunable.
|
|
44
|
+
*/
|
|
45
|
+
export type ReplicationAnnouncementRepairBinding = {
|
|
46
|
+
session: AnnouncementWorkerSession;
|
|
47
|
+
controller: AbortController;
|
|
48
|
+
pending: boolean;
|
|
49
|
+
targets: Map<string, ReplicationAnnouncementRepairTarget>;
|
|
50
|
+
cohortSelected: boolean;
|
|
51
|
+
};
|
|
52
|
+
export type ReplicationAnnouncementRepairWorkerContext = {
|
|
53
|
+
session: AnnouncementWorkerSession;
|
|
54
|
+
lifecycleController: AbortController;
|
|
55
|
+
binding: ReplicationAnnouncementRepairBinding;
|
|
56
|
+
};
|
|
57
|
+
export type ReplicationAnnouncementDeps<R extends "u32" | "u64"> = {
|
|
58
|
+
isClosed: () => boolean;
|
|
59
|
+
getCloseSignal: () => AbortSignal;
|
|
60
|
+
getMyReplicationSegments: () => Promise<ReplicationRangeIndexable<R>[]>;
|
|
61
|
+
validatePersistedReplicationRangeSnapshot: (ranges: readonly {
|
|
62
|
+
mode: unknown;
|
|
63
|
+
}[]) => void;
|
|
64
|
+
getSubscribers: () => Promise<PublicSignKey[] | undefined> | PublicSignKey[] | undefined;
|
|
65
|
+
getSelfHash: () => string;
|
|
66
|
+
isBlockedPeer: (hash: string) => boolean;
|
|
67
|
+
getRpc: () => RPC<TransportMessage, TransportMessage>;
|
|
68
|
+
captureReplicationOwnershipLifecycle: () => AbortController;
|
|
69
|
+
throwIfReplicationOwnershipLifecycleInactive: (controller: AbortController) => void;
|
|
70
|
+
isAdaptiveReplicating: () => boolean;
|
|
71
|
+
callRebalanceParticipationDebounced: () => unknown;
|
|
72
|
+
queueCurrentReplicationStateAnnouncementRepair: () => void;
|
|
73
|
+
queueCurrentReplicationStateAnnouncementRetry: (error: unknown) => boolean;
|
|
74
|
+
};
|
|
75
|
+
export declare class ReplicationAnnouncementCoordinator<R extends "u32" | "u64"> {
|
|
76
|
+
private readonly deps;
|
|
77
|
+
replicationAnnouncementRetryDebounced: ReturnType<typeof debounceFixedInterval> | undefined;
|
|
78
|
+
_replicationAnnouncementRetryPending: boolean;
|
|
79
|
+
_announcementSession: AnnouncementWorkerSession;
|
|
80
|
+
_replicationAnnouncementRetryController: AbortController;
|
|
81
|
+
_replicationAnnouncementSendTails?: WeakMap<AbortController, Promise<void>>;
|
|
82
|
+
replicationAnnouncementRepairDebounced: ReturnType<typeof debounceFixedInterval> | undefined;
|
|
83
|
+
_announcementRepairBinding: ReplicationAnnouncementRepairBinding;
|
|
84
|
+
_replicationAnnouncementRepairFairCursorHash: string | undefined;
|
|
85
|
+
_replicationAnnouncementRepairMaxAttempts: number;
|
|
86
|
+
_replicationAnnouncementRepairController: AbortController;
|
|
87
|
+
constructor(deps: ReplicationAnnouncementDeps<R>);
|
|
88
|
+
private rotateAnnouncementSession;
|
|
89
|
+
private createRepairBinding;
|
|
90
|
+
resetForOpen(): void;
|
|
91
|
+
queueCurrentReplicationStateAnnouncementRetry(error: unknown): boolean;
|
|
92
|
+
setupReplicationAnnouncementRetryFunction(interval?: number): void;
|
|
93
|
+
setupReplicationAnnouncementRepairFunction(interval?: number, maxAttempts?: number): void;
|
|
94
|
+
cancelCurrentReplicationStateAnnouncementRepair(): void;
|
|
95
|
+
advanceCurrentReplicationStateAnnouncementRepairGeneration(): void;
|
|
96
|
+
queueCurrentReplicationStateAnnouncementRepair(): void;
|
|
97
|
+
/**
|
|
98
|
+
* Single validity predicate for announcement-repair workers. "stale":
|
|
99
|
+
* the store closed or a lifecycle controller aborted — exit silently.
|
|
100
|
+
* "superseded": a newer announcement session took over — the worker
|
|
101
|
+
* must requeue so the current session gets serviced. The binding
|
|
102
|
+
* identity comparison stays at the one call site that historically
|
|
103
|
+
* required it; folding it in here is a stage-5 semantic decision, not a
|
|
104
|
+
* consolidation.
|
|
105
|
+
*/
|
|
106
|
+
private announcementRepairWorkerStatus;
|
|
107
|
+
runCurrentReplicationStateAnnouncementRepair(): Promise<void>;
|
|
108
|
+
repairCurrentReplicationStateAnnouncement(context?: ReplicationAnnouncementRepairWorkerContext): Promise<void>;
|
|
109
|
+
cancelCurrentReplicationStateAnnouncementRetry(): void;
|
|
110
|
+
sendReplicationAnnouncement(message: AllReplicatingSegmentsMessage | AddedReplicationSegmentMessage | StoppedReplicating, ownershipLifecycleController?: AbortController, options?: {
|
|
111
|
+
shouldSend?: () => boolean;
|
|
112
|
+
}): Promise<void>;
|
|
113
|
+
retryCurrentReplicationStateAnnouncement(): Promise<void>;
|
|
114
|
+
}
|
|
115
|
+
export {};
|
|
116
|
+
//# sourceMappingURL=replication-announcement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replication-announcement.d.ts","sourceRoot":"","sources":["../../src/replication-announcement.ts"],"names":[],"mappings":"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"}
|