@peerbit/shared-log 12.2.0-874976b → 12.2.0-90d77b6

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.
Files changed (32) hide show
  1. package/dist/benchmark/pid-convergence.d.ts +2 -0
  2. package/dist/benchmark/pid-convergence.d.ts.map +1 -0
  3. package/dist/benchmark/pid-convergence.js +138 -0
  4. package/dist/benchmark/pid-convergence.js.map +1 -0
  5. package/dist/benchmark/rateless-iblt-sender-startsync.d.ts +2 -0
  6. package/dist/benchmark/rateless-iblt-sender-startsync.d.ts.map +1 -0
  7. package/dist/benchmark/rateless-iblt-sender-startsync.js +104 -0
  8. package/dist/benchmark/rateless-iblt-sender-startsync.js.map +1 -0
  9. package/dist/benchmark/rateless-iblt-startsync-cache.d.ts +2 -0
  10. package/dist/benchmark/rateless-iblt-startsync-cache.d.ts.map +1 -0
  11. package/dist/benchmark/rateless-iblt-startsync-cache.js +112 -0
  12. package/dist/benchmark/rateless-iblt-startsync-cache.js.map +1 -0
  13. package/dist/benchmark/sync-catchup.d.ts +3 -0
  14. package/dist/benchmark/sync-catchup.d.ts.map +1 -0
  15. package/dist/benchmark/sync-catchup.js +109 -0
  16. package/dist/benchmark/sync-catchup.js.map +1 -0
  17. package/dist/src/index.d.ts +14 -2
  18. package/dist/src/index.d.ts.map +1 -1
  19. package/dist/src/index.js +256 -82
  20. package/dist/src/index.js.map +1 -1
  21. package/dist/src/ranges.d.ts +1 -0
  22. package/dist/src/ranges.d.ts.map +1 -1
  23. package/dist/src/ranges.js +48 -18
  24. package/dist/src/ranges.js.map +1 -1
  25. package/dist/src/sync/rateless-iblt.d.ts +8 -0
  26. package/dist/src/sync/rateless-iblt.d.ts.map +1 -1
  27. package/dist/src/sync/rateless-iblt.js +109 -20
  28. package/dist/src/sync/rateless-iblt.js.map +1 -1
  29. package/package.json +18 -18
  30. package/src/index.ts +324 -125
  31. package/src/ranges.ts +97 -65
  32. package/src/sync/rateless-iblt.ts +138 -28
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pid-convergence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pid-convergence.d.ts","sourceRoot":"","sources":["../../benchmark/pid-convergence.ts"],"names":[],"mappings":""}
@@ -0,0 +1,138 @@
1
+ import { Bench } from "tinybench";
2
+ import { PIDReplicationController } from "../src/pid.js";
3
+ // Benchmarks PID convergence speed in a simplified simulation model.
4
+ //
5
+ // Run with:
6
+ // cd packages/programs/data/shared-log
7
+ // PID_WARMUP=2 PID_ITERATIONS=50 PID_RUNS=200 node --loader ts-node/esm ./benchmark/pid-convergence.ts
8
+ //
9
+ // Notes:
10
+ // - This is a *model* benchmark: it does not simulate network, pruning, or real memory measurements.
11
+ // - It is intended to catch regressions/improvements in the controller dynamics and step cost.
12
+ const parseNumberList = (value, defaults) => {
13
+ if (!value)
14
+ return defaults;
15
+ const parsed = value
16
+ .split(",")
17
+ .map((x) => Number.parseInt(x.trim(), 10))
18
+ .filter((x) => Number.isFinite(x) && x > 0);
19
+ return parsed.length > 0 ? parsed : defaults;
20
+ };
21
+ const warmupIterations = Number.parseInt(process.env.PID_WARMUP || "2", 10);
22
+ const iterations = Number.parseInt(process.env.PID_ITERATIONS || "50", 10);
23
+ const runsPerTask = Number.parseInt(process.env.PID_RUNS || "200", 10);
24
+ const maxSteps = Number.parseInt(process.env.PID_MAX_STEPS || "200", 10);
25
+ const peersList = parseNumberList(process.env.PID_PEERS, [2, 3, 5]);
26
+ const clamp01 = (value) => Math.max(0, Math.min(1, value));
27
+ const simulateConvergence = (properties) => {
28
+ const { controllers, initialFactors, cpuUsage, memoryUsage, expectedFactor, epsilon, } = properties;
29
+ for (const controller of controllers) {
30
+ controller.reset();
31
+ }
32
+ let factors = initialFactors.slice();
33
+ const peerCount = factors.length;
34
+ for (let step = 0; step < maxSteps; step++) {
35
+ const totalFactor = clamp01(factors.reduce((acc, f) => acc + f, 0));
36
+ const next = [];
37
+ for (let peerIndex = 0; peerIndex < peerCount; peerIndex++) {
38
+ next[peerIndex] = controllers[peerIndex].step({
39
+ memoryUsage: memoryUsage(peerIndex, factors[peerIndex]),
40
+ currentFactor: factors[peerIndex],
41
+ totalFactor,
42
+ peerCount,
43
+ cpuUsage: cpuUsage(peerIndex),
44
+ });
45
+ }
46
+ factors = next;
47
+ let ok = true;
48
+ for (let peerIndex = 0; peerIndex < peerCount; peerIndex++) {
49
+ const target = expectedFactor(peerIndex, peerCount);
50
+ if (Math.abs(factors[peerIndex] - target) > epsilon) {
51
+ ok = false;
52
+ break;
53
+ }
54
+ }
55
+ if (ok && Math.abs(factors.reduce((acc, f) => acc + f, 0) - 1) <= epsilon) {
56
+ return { converged: true, steps: step + 1 };
57
+ }
58
+ }
59
+ return { converged: false, steps: maxSteps };
60
+ };
61
+ const suite = new Bench({
62
+ name: "pid-convergence",
63
+ warmupIterations: Number.isFinite(warmupIterations) ? warmupIterations : 0,
64
+ iterations: Number.isFinite(iterations) ? iterations : undefined,
65
+ });
66
+ const makeControllers = (peerCount, options) => Array.from({ length: peerCount }, (_, i) => new PIDReplicationController(`p${i}`, options(i)));
67
+ for (const peerCount of peersList) {
68
+ const controllers = makeControllers(peerCount, () => ({}));
69
+ const epsilon = 0.02;
70
+ const target = (_i, n) => 1 / n;
71
+ const initialFactors = Array.from({ length: peerCount }, () => 0);
72
+ suite.add(`even (peers=${peerCount})`, () => {
73
+ for (let i = 0; i < runsPerTask; i++) {
74
+ const res = simulateConvergence({
75
+ controllers,
76
+ initialFactors,
77
+ cpuUsage: () => 0,
78
+ memoryUsage: () => 0,
79
+ expectedFactor: target,
80
+ epsilon,
81
+ });
82
+ if (!res.converged) {
83
+ throw new Error(`did not converge (peers=${peerCount})`);
84
+ }
85
+ }
86
+ });
87
+ }
88
+ // A constrained scenario (2 peers): peer 0 has a memory cap (ratio), peer 1 is unconstrained.
89
+ {
90
+ const peerCount = 2;
91
+ const totalSize = 1_000_000; // bytes
92
+ const memoryLimit = 250_000; // 25% of total
93
+ const limitRatio = memoryLimit / totalSize;
94
+ const epsilon = 0.03;
95
+ const controllers = makeControllers(peerCount, (peerIndex) => peerIndex === 0 ? { storage: { max: memoryLimit } } : {});
96
+ const initialFactors = [0.5, 0.5];
97
+ const expectedFactor = (peerIndex) => peerIndex === 0 ? limitRatio : 1 - limitRatio;
98
+ suite.add("memory-limited (2 peers, 25% cap)", () => {
99
+ for (let i = 0; i < runsPerTask; i++) {
100
+ const res = simulateConvergence({
101
+ controllers,
102
+ initialFactors,
103
+ cpuUsage: () => 0,
104
+ memoryUsage: (peerIndex, factor) => peerIndex === 0 ? totalSize * factor : 0,
105
+ expectedFactor,
106
+ epsilon,
107
+ });
108
+ if (!res.converged) {
109
+ throw new Error("did not converge (memory-limited)");
110
+ }
111
+ }
112
+ });
113
+ }
114
+ await suite.run();
115
+ if (process.env.BENCH_JSON === "1") {
116
+ const tasks = suite.tasks.map((task) => ({
117
+ name: task.name,
118
+ hz: task.result?.hz ?? null,
119
+ mean_ms: task.result?.mean ?? null,
120
+ rme: task.result?.rme ?? null,
121
+ samples: task.result?.samples?.length ?? null,
122
+ }));
123
+ process.stdout.write(JSON.stringify({
124
+ name: suite.name,
125
+ tasks,
126
+ meta: {
127
+ peersList,
128
+ warmupIterations,
129
+ iterations,
130
+ runsPerTask,
131
+ maxSteps,
132
+ },
133
+ }, null, 2));
134
+ }
135
+ else {
136
+ console.table(suite.table());
137
+ }
138
+ //# sourceMappingURL=pid-convergence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pid-convergence.js","sourceRoot":"","sources":["../../benchmark/pid-convergence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rateless-iblt-sender-startsync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateless-iblt-sender-startsync.d.ts","sourceRoot":"","sources":["../../benchmark/rateless-iblt-sender-startsync.ts"],"names":[],"mappings":""}
@@ -0,0 +1,104 @@
1
+ import { Cache } from "@peerbit/cache";
2
+ import { ready as ribltReady } from "@peerbit/riblt";
3
+ import { Bench } from "tinybench";
4
+ import { createNumbers } from "../src/integers.js";
5
+ import { RatelessIBLTSynchronizer } from "../src/sync/rateless-iblt.js";
6
+ // Benchmarks sender-side StartSync setup cost (sort + encoder build + initial symbols),
7
+ // by timing `RatelessIBLTSynchronizer.onMaybeMissingEntries()` for large batches.
8
+ //
9
+ // Run with:
10
+ // cd packages/programs/data/shared-log
11
+ // RIBLT_SIZES="1000,10000,50000" RIBLT_WARMUP=5 RIBLT_ITERATIONS=20 \\
12
+ // node --loader ts-node/esm ./benchmark/rateless-iblt-sender-startsync.ts
13
+ const parseNumberList = (value, defaults) => {
14
+ if (!value)
15
+ return defaults;
16
+ const parsed = value
17
+ .split(",")
18
+ .map((x) => Number.parseInt(x.trim(), 10))
19
+ .filter((x) => Number.isFinite(x) && x > 0);
20
+ return parsed.length > 0 ? parsed : defaults;
21
+ };
22
+ const sizes = parseNumberList(process.env.RIBLT_SIZES, [1_000, 10_000, 50_000]);
23
+ const warmupIterations = Number.parseInt(process.env.RIBLT_WARMUP || "5", 10);
24
+ const iterations = Number.parseInt(process.env.RIBLT_ITERATIONS || "20", 10);
25
+ const useRandomHashes = process.env.RIBLT_RANDOM === "1";
26
+ const U64_MASK = (1n << 64n) - 1n;
27
+ const createXorShift64Star = (seed) => {
28
+ let x = seed & U64_MASK;
29
+ return () => {
30
+ x ^= x >> 12n;
31
+ x ^= (x << 25n) & U64_MASK;
32
+ x ^= x >> 27n;
33
+ return (x * 2685821657736338717n) & U64_MASK;
34
+ };
35
+ };
36
+ const createEntries = (size) => {
37
+ const entries = new Map();
38
+ const rand = useRandomHashes
39
+ ? createXorShift64Star(88172645463393265n ^ BigInt(size))
40
+ : undefined;
41
+ for (let i = 0; i < size; i++) {
42
+ const hash = `h${i}`;
43
+ entries.set(hash, {
44
+ hash,
45
+ hashNumber: useRandomHashes ? rand() : BigInt(i + 1),
46
+ assignedToRangeBoundary: false,
47
+ });
48
+ }
49
+ return entries;
50
+ };
51
+ const createSync = (numbers) => {
52
+ const send = async () => { };
53
+ const rpc = { send };
54
+ return new RatelessIBLTSynchronizer({
55
+ rpc,
56
+ rangeIndex: {},
57
+ entryIndex: {},
58
+ log: {},
59
+ coordinateToHash: new Cache({ max: 10 }),
60
+ numbers,
61
+ });
62
+ };
63
+ const clearOutgoing = async (sync) => {
64
+ const ids = Array.from(sync.outgoingSyncProcesses.keys());
65
+ for (const id of ids) {
66
+ sync.outgoingSyncProcesses.get(id)?.free();
67
+ }
68
+ };
69
+ await ribltReady;
70
+ const numbers = createNumbers("u64");
71
+ const suite = new Bench({
72
+ name: "rateless-iblt-sender-startsync",
73
+ warmupIterations: Number.isFinite(warmupIterations) ? warmupIterations : 0,
74
+ iterations: Number.isFinite(iterations) ? iterations : undefined,
75
+ });
76
+ const sync = createSync(numbers);
77
+ for (const size of sizes) {
78
+ const entries = createEntries(size);
79
+ suite.add(`onMaybeMissingEntries (rateless IBLT, n=${size})`, async () => {
80
+ await clearOutgoing(sync);
81
+ await sync.onMaybeMissingEntries({ entries, targets: ["t"] });
82
+ await clearOutgoing(sync);
83
+ });
84
+ }
85
+ await suite.run();
86
+ if (process.env.BENCH_JSON === "1") {
87
+ const tasks = suite.tasks.map((task) => ({
88
+ name: task.name,
89
+ hz: task.result?.hz ?? null,
90
+ mean_ms: task.result?.mean ?? null,
91
+ rme: task.result?.rme ?? null,
92
+ samples: task.result?.samples?.length ?? null,
93
+ }));
94
+ process.stdout.write(JSON.stringify({
95
+ name: suite.name,
96
+ tasks,
97
+ meta: { sizes, warmupIterations, iterations },
98
+ }, null, 2));
99
+ }
100
+ else {
101
+ console.table(suite.table());
102
+ }
103
+ await sync.close();
104
+ //# sourceMappingURL=rateless-iblt-sender-startsync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateless-iblt-sender-startsync.js","sourceRoot":"","sources":["../../benchmark/rateless-iblt-sender-startsync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rateless-iblt-startsync-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateless-iblt-startsync-cache.d.ts","sourceRoot":"","sources":["../../benchmark/rateless-iblt-startsync-cache.ts"],"names":[],"mappings":""}
@@ -0,0 +1,112 @@
1
+ import { Cache } from "@peerbit/cache";
2
+ import { ready as ribltReady } from "@peerbit/riblt";
3
+ import { Bench } from "tinybench";
4
+ import { createNumbers } from "../src/integers.js";
5
+ import { RatelessIBLTSynchronizer } from "../src/sync/rateless-iblt.js";
6
+ // Run with:
7
+ // cd packages/programs/data/shared-log
8
+ // RIBLT_SIZES="1000,10000,50000" RIBLT_WARMUP=5 RIBLT_ITERATIONS=20 \
9
+ // node --loader ts-node/esm ./benchmark/rateless-iblt-startsync-cache.ts
10
+ const parseNumberList = (value, defaults) => {
11
+ if (!value)
12
+ return defaults;
13
+ const parsed = value
14
+ .split(",")
15
+ .map((x) => Number.parseInt(x.trim(), 10))
16
+ .filter((x) => Number.isFinite(x) && x > 0);
17
+ return parsed.length > 0 ? parsed : defaults;
18
+ };
19
+ const sizes = parseNumberList(process.env.RIBLT_SIZES, [1_000, 10_000, 50_000]);
20
+ const warmupIterations = Number.parseInt(process.env.RIBLT_WARMUP || "5", 10);
21
+ const iterations = Number.parseInt(process.env.RIBLT_ITERATIONS || "20", 10);
22
+ const createEntries = (size) => {
23
+ const entries = new Array(size);
24
+ for (let i = 0; i < size; i++) {
25
+ entries[i] = { value: { hash: `h${i}`, hashNumber: BigInt(i + 1) } };
26
+ }
27
+ return entries;
28
+ };
29
+ const createSync = (entries, numbers) => {
30
+ const entryIndex = {
31
+ iterate: () => ({
32
+ all: async () => entries,
33
+ }),
34
+ };
35
+ const send = async () => { };
36
+ const rpc = { send };
37
+ return new RatelessIBLTSynchronizer({
38
+ rpc,
39
+ rangeIndex: {},
40
+ entryIndex,
41
+ log: {},
42
+ coordinateToHash: new Cache({ max: 10 }),
43
+ numbers,
44
+ });
45
+ };
46
+ await ribltReady;
47
+ const numbers = createNumbers("u64");
48
+ const suite = new Bench({
49
+ name: "rateless-iblt-startsync-cache",
50
+ warmupIterations: Number.isFinite(warmupIterations) ? warmupIterations : 0,
51
+ iterations: Number.isFinite(iterations) ? iterations : undefined,
52
+ });
53
+ const syncsToClose = [];
54
+ for (const size of sizes) {
55
+ const entries = createEntries(size);
56
+ const range = {
57
+ start1: 0n,
58
+ end1: numbers.maxValue,
59
+ start2: 0n,
60
+ end2: 0n,
61
+ };
62
+ const coldSync = createSync(entries, numbers);
63
+ const warmSync = createSync(entries, numbers);
64
+ const warmDecoder = await warmSync.getLocalDecoderForRange(range);
65
+ if (warmDecoder) {
66
+ warmDecoder.free();
67
+ }
68
+ syncsToClose.push(() => coldSync.close());
69
+ syncsToClose.push(() => warmSync.close());
70
+ suite.add(`StartSync local decoder (cold, n=${size})`, async () => {
71
+ coldSync.invalidateLocalRangeEncoderCache();
72
+ const decoder = await coldSync.getLocalDecoderForRange(range);
73
+ if (decoder) {
74
+ decoder.free();
75
+ }
76
+ });
77
+ suite.add(`StartSync local decoder (warm, n=${size})`, async () => {
78
+ const decoder = await warmSync.getLocalDecoderForRange(range);
79
+ if (decoder) {
80
+ decoder.free();
81
+ }
82
+ });
83
+ suite.add(`StartSync local decoder (after invalidation, n=${size})`, async () => {
84
+ warmSync.invalidateLocalRangeEncoderCache();
85
+ const decoder = await warmSync.getLocalDecoderForRange(range);
86
+ if (decoder) {
87
+ decoder.free();
88
+ }
89
+ });
90
+ }
91
+ await suite.run();
92
+ if (process.env.BENCH_JSON === "1") {
93
+ const tasks = suite.tasks.map((task) => ({
94
+ name: task.name,
95
+ hz: task.result?.hz ?? null,
96
+ mean_ms: task.result?.mean ?? null,
97
+ rme: task.result?.rme ?? null,
98
+ samples: task.result?.samples?.length ?? null,
99
+ }));
100
+ process.stdout.write(JSON.stringify({
101
+ name: suite.name,
102
+ tasks,
103
+ meta: { sizes, warmupIterations, iterations },
104
+ }, null, 2));
105
+ }
106
+ else {
107
+ console.table(suite.table());
108
+ }
109
+ for (const closeSync of syncsToClose) {
110
+ await closeSync();
111
+ }
112
+ //# sourceMappingURL=rateless-iblt-startsync-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateless-iblt-startsync-cache.js","sourceRoot":"","sources":["../../benchmark/rateless-iblt-startsync-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { TestSetupConfig } from "../test/utils.js";
2
+ export declare const testSetups: TestSetupConfig<any>[];
3
+ //# sourceMappingURL=sync-catchup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-catchup.d.ts","sourceRoot":"","sources":["../../benchmark/sync-catchup.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAOxD,eAAO,MAAM,UAAU,EAAE,eAAe,CAAC,GAAG,CAAC,EAa5C,CAAC"}
@@ -0,0 +1,109 @@
1
+ // Benchmarks full catch-up sync time: one peer has N entries, the other starts empty.
2
+ //
3
+ // Run with:
4
+ // cd packages/programs/data/shared-log
5
+ // CATCHUP_COUNT=5000 CATCHUP_TIMEOUT=60000 node --loader ts-node/esm ./benchmark/sync-catchup.ts
6
+ //
7
+ // Notes:
8
+ // - This is an integration benchmark (network + sync + indexing). It is more variable than pure
9
+ // algorithmic benches; prefer running it a few times and comparing medians.
10
+ // - For CI regression tracking, consider smaller `CATCHUP_COUNT` values and low run counts.
11
+ import { keys } from "@libp2p/crypto";
12
+ import { TestSession } from "@peerbit/test-utils";
13
+ import { waitForResolved } from "@peerbit/time";
14
+ import { expect } from "chai";
15
+ import { performance } from "node:perf_hooks";
16
+ import { v4 as uuid } from "uuid";
17
+ import { createReplicationDomainHash } from "../src/replication-domain-hash.js";
18
+ import { RatelessIBLTSynchronizer } from "../src/sync/rateless-iblt.js";
19
+ import { SimpleSyncronizer } from "../src/sync/simple.js";
20
+ import { EventStore } from "../test/utils/stores/event-store.js";
21
+ const entryCount = Number.parseInt(process.env.CATCHUP_COUNT || "5000", 10);
22
+ const timeoutMs = Number.parseInt(process.env.CATCHUP_TIMEOUT || "60000", 10);
23
+ const runs = Number.parseInt(process.env.CATCHUP_RUNS || "1", 10);
24
+ export const testSetups = [
25
+ {
26
+ domain: createReplicationDomainHash("u32"),
27
+ type: "u32",
28
+ syncronizer: SimpleSyncronizer,
29
+ name: "u32-simple",
30
+ },
31
+ {
32
+ domain: createReplicationDomainHash("u64"),
33
+ type: "u64",
34
+ syncronizer: RatelessIBLTSynchronizer,
35
+ name: "u64-iblt",
36
+ },
37
+ ];
38
+ const fixedKeys = [
39
+ {
40
+ libp2p: {
41
+ privateKey: keys.privateKeyFromRaw(new Uint8Array([
42
+ 204, 234, 187, 172, 226, 232, 70, 175, 62, 211, 147, 91, 229, 157,
43
+ 168, 15, 45, 242, 144, 98, 75, 58, 208, 9, 223, 143, 251, 52, 252,
44
+ 159, 64, 83, 52, 197, 24, 246, 24, 234, 141, 183, 151, 82, 53, 142,
45
+ 57, 25, 148, 150, 26, 209, 223, 22, 212, 40, 201, 6, 191, 72, 148,
46
+ 82, 66, 138, 199, 185,
47
+ ])),
48
+ },
49
+ },
50
+ {
51
+ libp2p: {
52
+ privateKey: keys.privateKeyFromRaw(new Uint8Array([
53
+ 237, 55, 205, 86, 40, 44, 73, 169, 196, 118, 36, 69, 214, 122, 28,
54
+ 157, 208, 163, 15, 215, 104, 193, 151, 177, 62, 231, 253, 120, 122,
55
+ 222, 174, 242, 120, 50, 165, 97, 8, 235, 97, 186, 148, 251, 100, 168,
56
+ 49, 10, 119, 71, 246, 246, 174, 163, 198, 54, 224, 6, 174, 212, 159,
57
+ 187, 2, 137, 47, 192,
58
+ ])),
59
+ },
60
+ },
61
+ ];
62
+ const runOnce = async (setup) => {
63
+ const session = await TestSession.disconnected(2, fixedKeys);
64
+ const store = new EventStore();
65
+ const db1 = await session.peers[0].open(store.clone(), {
66
+ args: { replicate: { factor: 1 }, setup },
67
+ });
68
+ const db2 = await session.peers[1].open(store.clone(), {
69
+ args: { replicate: { factor: 1 }, setup },
70
+ });
71
+ for (let i = 0; i < entryCount; i++) {
72
+ await db1.add(uuid(), { meta: { next: [] } });
73
+ }
74
+ expect(db1.log.log.length).to.equal(entryCount);
75
+ await waitForResolved(() => session.peers[0].dial(session.peers[1].getMultiaddrs()));
76
+ const t0 = performance.now();
77
+ await waitForResolved(() => {
78
+ expect(db2.log.log.length).to.equal(entryCount);
79
+ }, { timeout: timeoutMs, delayInterval: 250 });
80
+ const dt = performance.now() - t0;
81
+ await session.stop();
82
+ return dt;
83
+ };
84
+ const tasks = [];
85
+ for (const setup of testSetups) {
86
+ const samples = [];
87
+ for (let i = 0; i < runs; i++) {
88
+ samples.push(await runOnce(setup));
89
+ }
90
+ const mean_ms = samples.reduce((acc, x) => acc + x, 0) / samples.length;
91
+ tasks.push({
92
+ name: `${setup.name} catchup (n=${entryCount})`,
93
+ mean_ms,
94
+ hz: mean_ms > 0 ? 1000 / mean_ms : 0,
95
+ rme: null,
96
+ samples: samples.length,
97
+ });
98
+ }
99
+ if (process.env.BENCH_JSON === "1") {
100
+ process.stdout.write(JSON.stringify({
101
+ name: "shared-log-sync-catchup",
102
+ tasks,
103
+ meta: { entryCount, timeoutMs, runs },
104
+ }, null, 2));
105
+ }
106
+ else {
107
+ console.table(tasks);
108
+ }
109
+ //# sourceMappingURL=sync-catchup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-catchup.js","sourceRoot":"","sources":["../../benchmark/sync-catchup.ts"],"names":[],"mappings":"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"}
@@ -92,6 +92,8 @@ export type SharedLogOptions<T, D extends ReplicationDomain<any, T, R>, R extend
92
92
  syncronizer?: SynchronizerConstructor<R>;
93
93
  timeUntilRoleMaturity?: number;
94
94
  waitForReplicatorTimeout?: number;
95
+ waitForReplicatorRequestIntervalMs?: number;
96
+ waitForReplicatorRequestMaxAttempts?: number;
95
97
  waitForPruneDelay?: number;
96
98
  distributionDebounceTime?: number;
97
99
  compatibility?: number;
@@ -103,7 +105,9 @@ export type SharedLogOptions<T, D extends ReplicationDomain<any, T, R>, R extend
103
105
  export declare const DEFAULT_MIN_REPLICAS = 2;
104
106
  export declare const WAIT_FOR_REPLICATOR_TIMEOUT = 9000;
105
107
  export declare const WAIT_FOR_ROLE_MATURITY = 5000;
106
- export declare const WAIT_FOR_PRUNE_DELAY = 5000;
108
+ export declare const WAIT_FOR_REPLICATOR_REQUEST_INTERVAL = 1000;
109
+ export declare const WAIT_FOR_REPLICATOR_REQUEST_MIN_ATTEMPTS = 3;
110
+ export declare const WAIT_FOR_PRUNE_DELAY = 0;
107
111
  export type Args<T, D extends ReplicationDomain<any, T, R>, R extends "u32" | "u64" = D extends ReplicationDomain<any, T, infer I> ? I : "u32"> = LogProperties<T> & LogEvents<T> & SharedLogOptions<T, D, R>;
108
112
  export type DeliveryOptions = {
109
113
  settle?: true | {
@@ -147,6 +151,7 @@ export declare class SharedLog<T, D extends ReplicationDomain<any, T, R> = any,
147
151
  private coordinateToHash;
148
152
  private recentlyRebalanced;
149
153
  uniqueReplicators: Set<string>;
154
+ private _replicatorsReconciled;
150
155
  _gidPeersHistory: Map<string, Set<string>>;
151
156
  private _onSubscriptionFn;
152
157
  private _onUnsubscriptionFn;
@@ -180,6 +185,8 @@ export declare class SharedLog<T, D extends ReplicationDomain<any, T, R> = any,
180
185
  private cpuUsage?;
181
186
  timeUntilRoleMaturity: number;
182
187
  waitForReplicatorTimeout: number;
188
+ waitForReplicatorRequestIntervalMs: number;
189
+ waitForReplicatorRequestMaxAttempts?: number;
183
190
  waitForPruneDelay: number;
184
191
  distributionDebounceTime: number;
185
192
  replicationController: PIDReplicationController;
@@ -356,7 +363,12 @@ export declare class SharedLog<T, D extends ReplicationDomain<any, T, R> = any,
356
363
  rebalanceAll(options?: {
357
364
  clearCache?: boolean;
358
365
  }): Promise<false | undefined>;
359
- waitForPruned(): Promise<void>;
366
+ waitForPruned(options?: {
367
+ timeout?: number;
368
+ signal?: AbortSignal;
369
+ delayInterval?: number;
370
+ timeoutMessage?: string;
371
+ }): Promise<void>;
360
372
  onReplicationChange(changeOrChanges: ReplicationChanges<ReplicationRangeIndexable<R>> | ReplicationChanges<ReplicationRangeIndexable<R>>[]): Promise<false | undefined>;
361
373
  _onUnsubscription(evt: CustomEvent<UnsubcriptionEvent>): Promise<void>;
362
374
  _onSubscription(evt: CustomEvent<SubscriptionEvent>): Promise<void>;