@peerbit/shared-log 16.0.32 → 16.0.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -0
- package/dist/src/errors.d.ts +1 -1
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +4 -2
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/package.json +14 -14
- package/src/errors.ts +4 -2
- package/src/index.ts +1 -1
package/README.md
CHANGED
|
@@ -4,6 +4,32 @@ A log that can be replicated
|
|
|
4
4
|
|
|
5
5
|
## Persisted delivery recovery
|
|
6
6
|
|
|
7
|
+
Transport connections, topic coverage, and persisted-receipt capability are not
|
|
8
|
+
entry-leader eligibility. If the first fresh persisted-delivery leader plan for
|
|
9
|
+
any committed entry is empty or contains only the writer, delivery still fails
|
|
10
|
+
immediately with `NoPeersError` as the cause of `PersistedDeliveryError`; it does
|
|
11
|
+
not wait for initial leader discovery or maturity. The error identifies missing
|
|
12
|
+
eligible remote entry leaders, not necessarily missing network connections.
|
|
13
|
+
|
|
14
|
+
Before a new write, applications can use each relevant log's
|
|
15
|
+
`waitForReplicator(remoteKey, { timeout, signal })`, retaining its default role
|
|
16
|
+
maturity, followed by `waitForPersistedReceiptPeerReadiness(remoteKey, ...)`.
|
|
17
|
+
Do not substitute `waitForReplicators({ coverageThreshold: 1 })`: a full local
|
|
18
|
+
replica can satisfy that coverage without a remote. The default role maturity
|
|
19
|
+
is at least five seconds for replicating writers and can increase with the gap
|
|
20
|
+
between known role timestamps; non-replicating writers use zero. Readiness on
|
|
21
|
+
one log therefore does not establish readiness on another log with a different
|
|
22
|
+
replication role.
|
|
23
|
+
|
|
24
|
+
These waits are advisory, not a guarantee that a future entry will have the
|
|
25
|
+
requested remote leaders. Readiness without `entries` does not check entry
|
|
26
|
+
leadership or role maturity. For already committed entries, its `entries` option
|
|
27
|
+
also requires a fresh leader plan using `replicas` (the total leader-plan degree,
|
|
28
|
+
not `minAcks`). Only the following persisted delivery proves durability. A
|
|
29
|
+
`PersistedDeliveryError` retains exact `committedHashes`,
|
|
30
|
+
`localCommitSucceeded: true`, and `retrySafe: false`; never replay the original
|
|
31
|
+
write merely because its delivery failed.
|
|
32
|
+
|
|
7
33
|
Persisted delivery maintains bounded advisory recovery for currently selected
|
|
8
34
|
entry leaders, including incomplete capability/receive state and unconfirmed or
|
|
9
35
|
replacement V2 sessions. It reuses the persisted-readiness watchdog; readiness
|
package/dist/src/errors.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare const isNotStartedError: (e: Error) => boolean;
|
|
2
2
|
export declare class NoPeersError extends Error {
|
|
3
|
-
constructor(topic: string);
|
|
3
|
+
constructor(topic: string, delivery?: "persisted");
|
|
4
4
|
}
|
|
5
5
|
/**
|
|
6
6
|
* A persisted-delivery request failed after the entries were committed locally.
|
package/dist/src/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iBAAiB,GAAI,GAAG,KAAK,YAczC,CAAC;AAEF,qBAAa,YAAa,SAAQ,KAAK;gBAC1B,KAAK,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iBAAiB,GAAI,GAAG,KAAK,YAczC,CAAC;AAEF,qBAAa,YAAa,SAAQ,KAAK;gBAC1B,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW;CAOjD;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAChD,QAAQ,CAAC,oBAAoB,QAAQ;IACrC,QAAQ,CAAC,SAAS,SAAS;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;gBAEhC,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC;CAuB7D;AAED;;;;;;;GAOG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;gBAC3C,KAAK,EAAE,OAAO;CAQ1B;AAED;;;;;GAKG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,QAAQ,CAAC,mBAAmB,QAAQ;IACpC,QAAQ,CAAC,SAAS,SAAS;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAW;gBAGxC,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE;QACT,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC9B;CAwCF"}
|
package/dist/src/errors.js
CHANGED
|
@@ -18,8 +18,10 @@ export const isNotStartedError = (e) => {
|
|
|
18
18
|
return false;
|
|
19
19
|
};
|
|
20
20
|
export class NoPeersError extends Error {
|
|
21
|
-
constructor(topic) {
|
|
22
|
-
super(
|
|
21
|
+
constructor(topic, delivery) {
|
|
22
|
+
super(delivery === "persisted"
|
|
23
|
+
? `No currently eligible remote entry leaders for persisted delivery on topic ${topic}. Transport connectivity and receipt capability alone do not establish entry-leader eligibility.`
|
|
24
|
+
: `No peers found for topic ${topic}. Please make sure you are connected to the network and try again.`);
|
|
23
25
|
}
|
|
24
26
|
}
|
|
25
27
|
/**
|
package/dist/src/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAQ,EAAE,EAAE;IAC7C,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,CAAC,YAAY,eAAe,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,CAAC,YAAY,oBAAoB,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,CAAC,YAAY,WAAW,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,OAAO,YAAa,SAAQ,KAAK;IACtC,YAAY,KAAa;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAQ,EAAE,EAAE;IAC7C,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,CAAC,YAAY,eAAe,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,CAAC,YAAY,oBAAoB,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,CAAC,YAAY,WAAW,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,OAAO,YAAa,SAAQ,KAAK;IACtC,YAAY,KAAa,EAAE,QAAsB;QAChD,KAAK,CACJ,QAAQ,KAAK,WAAW;YACvB,CAAC,CAAC,8EAA8E,KAAK,kGAAkG;YACvL,CAAC,CAAC,4BAA4B,KAAK,oEAAoE,CACxG,CAAC;IACH,CAAC;CACD;AAED;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACvC,oBAAoB,GAAG,IAAI,CAAC;IAC5B,SAAS,GAAG,KAAK,CAAC;IAClB,KAAK,CAAU;IACf,eAAe,CAAoB;IAE5C,YAAY,KAAc,EAAE,eAAiC;QAC5D,MAAM,QAAQ,GACb,KAAK,YAAY,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,MAAM,SAAS,GACd,KAAK,YAAY,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/D,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;QACvD,KAAK,CACJ,qFACC,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAClE,GACC,eAAe,CAAC,MAAM,GAAG,CAAC;YACzB,CAAC,CAAC,uBAAuB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GACjD,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC,CAAC,EACtC,GAAG;YACJ,CAAC,CAAC,EACJ,EAAE,CACF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;IAC/B,CAAC;CACD;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACvD,YAAY,KAAc;QACzB,KAAK,CACJ,mHAAmH;YAClH,2BAA2B,MAAM,CAAC,KAAK,CAAC,uCAAuC;YAC/E,qHAAqH,CACtH,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAC7C,CAAC;CACD;AAED;;;;;GAKG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACzC,mBAAmB,GAAG,IAAI,CAAC;IAC3B,SAAS,GAAG,KAAK,CAAC;IAClB,KAAK,CAAU;IACf,aAAa,CAAoB;IACjC,UAAU,CAAoB;IACtB,gBAAgB,CAAW;IAC3B,aAAa,CAAW;IAEzC,YACC,KAAc,EACd,OAGC;QAED,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,IAAI,aAAa,CAAC,CAAC,CAAC;QAC/D,KAAK,CACJ,yFACC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACtD,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5E,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC;QACtC,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC;QAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;IACtC,CAAC;IAED,6EAA6E;IAC7E,gBAAgB,CACf,OAGC,EACD,UAA8C;QAE9C,MAAM,KAAK,GAAG,CACb,MAAgB,EAChB,QAAsC,EAC/B,EAAE;YACT,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,OAAO;YACR,CAAC;YACD,MAAM,MAAM,GAAG,UAAU,EAAE,mBAAmB;gBAC7C,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC;gBAC1B,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC;YAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;CACD"}
|
package/dist/src/index.js
CHANGED
|
@@ -3826,7 +3826,7 @@ let SharedLog = (() => {
|
|
|
3826
3826
|
needsInitialLeaderCheck = false;
|
|
3827
3827
|
if (leadersByEntry.some((leaders) => leaders.size === 0 ||
|
|
3828
3828
|
(leaders.size === 1 && leaders.has(selfHash)))) {
|
|
3829
|
-
throw new NoPeersError(this.rpc.topic);
|
|
3829
|
+
throw new NoPeersError(this.rpc.topic, "persisted");
|
|
3830
3830
|
}
|
|
3831
3831
|
}
|
|
3832
3832
|
for (let index = 0; index < entryArray.length; index++) {
|