@peerbit/shared-log 12.2.0 → 12.3.0-2ed894b

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 (40) 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 +16 -3
  18. package/dist/src/index.d.ts.map +1 -1
  19. package/dist/src/index.js +259 -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/index.d.ts +14 -0
  26. package/dist/src/sync/index.d.ts.map +1 -1
  27. package/dist/src/sync/rateless-iblt.d.ts +14 -22
  28. package/dist/src/sync/rateless-iblt.d.ts.map +1 -1
  29. package/dist/src/sync/rateless-iblt.js +137 -22
  30. package/dist/src/sync/rateless-iblt.js.map +1 -1
  31. package/dist/src/sync/simple.d.ts +3 -1
  32. package/dist/src/sync/simple.d.ts.map +1 -1
  33. package/dist/src/sync/simple.js +23 -1
  34. package/dist/src/sync/simple.js.map +1 -1
  35. package/package.json +20 -20
  36. package/src/index.ts +333 -126
  37. package/src/ranges.ts +97 -65
  38. package/src/sync/index.ts +19 -0
  39. package/src/sync/rateless-iblt.ts +187 -41
  40. package/src/sync/simple.ts +25 -2
@@ -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":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAgB,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAExE,wFAAwF;AACxF,kFAAkF;AAClF,EAAE;AACF,YAAY;AACZ,yCAAyC;AACzC,yEAAyE;AACzE,8EAA8E;AAE9E,MAAM,eAAe,GAAG,CAAC,KAAyB,EAAE,QAAkB,EAAE,EAAE;IACzE,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAC5B,MAAM,MAAM,GAAG,KAAK;SAClB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;SACzC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAChF,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;AAC9E,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;AAE7E,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,GAAG,CAAC;AACzD,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;AAClC,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAE,EAAE;IAC7C,IAAI,CAAC,GAAG,IAAI,GAAG,QAAQ,CAAC;IACxB,OAAO,GAAG,EAAE;QACX,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QACd,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC;QAC3B,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QACd,OAAO,CAAC,CAAC,GAAG,oBAAoB,CAAC,GAAG,QAAQ,CAAC;IAC9C,CAAC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAA0B,IAAY,EAAE,EAAE;IAC/D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAe,CAAC;IACvC,MAAM,IAAI,GAAG,eAAe;QAC3B,CAAC,CAAC,oBAAoB,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC,CAAC,SAAS,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE;YACjB,IAAI;YACJ,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,IAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;YACrD,uBAAuB,EAAE,KAAK;SAC9B,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,OAA2B,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAA0B,OAAmB,EAAE,EAAE;IACnE,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;IAC5B,MAAM,GAAG,GAAG,EAAE,IAAI,EAAS,CAAC;IAE5B,OAAO,IAAI,wBAAwB,CAAI;QACtC,GAAG;QACH,UAAU,EAAE,EAAS;QACrB,UAAU,EAAE,EAAS;QACrB,GAAG,EAAE,EAAS;QACd,gBAAgB,EAAE,IAAI,KAAK,CAAS,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAChD,OAAO;KACP,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,KAAK,EAAE,IAAmC,EAAE,EAAE;IACnE,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,UAAU,CAAC;AAEjB,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAmB,CAAC;AAEvD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;IACvB,IAAI,EAAE,gCAAgC;IACtC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC1E,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;CAChE,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAEpC,KAAK,CAAC,GAAG,CAAC,2CAA2C,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,IAAI,CAAC,qBAAqB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;AAElB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI;QAC3B,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI;QAClC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI;QAC7B,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI;KAC7C,CAAC,CAAC,CAAC;IACJ,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB,IAAI,CAAC,SAAS,CACb;QACC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK;QACL,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE;KAC7C,EACD,IAAI,EACJ,CAAC,CACD,CACD,CAAC;AACH,CAAC;KAAM,CAAC;IACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC"}
@@ -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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"}
@@ -16,7 +16,7 @@ import { type ReplicationDomainHash, createReplicationDomainHash } from "./repli
16
16
  import { type ReplicationDomainTime, createReplicationDomainTime } from "./replication-domain-time.js";
17
17
  import { type CoverRange, type ExtractDomainArgs, type ReplicationDomain, type ReplicationDomainConstructor } from "./replication-domain.js";
18
18
  import { AbsoluteReplicas, AddedReplicationSegmentMessage, AllReplicatingSegmentsMessage, type ReplicationLimits } from "./replication.js";
19
- import type { SynchronizerConstructor, Syncronizer } from "./sync/index.js";
19
+ import type { SyncOptions, SynchronizerConstructor, Syncronizer } from "./sync/index.js";
20
20
  export { type ReplicationDomain, type ReplicationDomainHash, type ReplicationDomainTime, createReplicationDomainHash, createReplicationDomainTime, };
21
21
  export { type CPUUsage, CPUUsageIntervalLag };
22
22
  export * from "./replication.js";
@@ -88,9 +88,12 @@ export type SharedLogOptions<T, D extends ReplicationDomain<any, T, R>, R extend
88
88
  respondToIHaveTimeout?: number;
89
89
  canReplicate?: (publicKey: PublicSignKey) => Promise<boolean> | boolean;
90
90
  keep?: (entry: ShallowOrFullEntry<T> | EntryReplicated<R>) => Promise<boolean> | boolean;
91
+ sync?: SyncOptions<R>;
91
92
  syncronizer?: SynchronizerConstructor<R>;
92
93
  timeUntilRoleMaturity?: number;
93
94
  waitForReplicatorTimeout?: number;
95
+ waitForReplicatorRequestIntervalMs?: number;
96
+ waitForReplicatorRequestMaxAttempts?: number;
94
97
  waitForPruneDelay?: number;
95
98
  distributionDebounceTime?: number;
96
99
  compatibility?: number;
@@ -102,7 +105,9 @@ export type SharedLogOptions<T, D extends ReplicationDomain<any, T, R>, R extend
102
105
  export declare const DEFAULT_MIN_REPLICAS = 2;
103
106
  export declare const WAIT_FOR_REPLICATOR_TIMEOUT = 9000;
104
107
  export declare const WAIT_FOR_ROLE_MATURITY = 5000;
105
- 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;
106
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>;
107
112
  export type DeliveryOptions = {
108
113
  settle?: true | {
@@ -146,6 +151,7 @@ export declare class SharedLog<T, D extends ReplicationDomain<any, T, R> = any,
146
151
  private coordinateToHash;
147
152
  private recentlyRebalanced;
148
153
  uniqueReplicators: Set<string>;
154
+ private _replicatorsReconciled;
149
155
  _gidPeersHistory: Map<string, Set<string>>;
150
156
  private _onSubscriptionFn;
151
157
  private _onUnsubscriptionFn;
@@ -179,6 +185,8 @@ export declare class SharedLog<T, D extends ReplicationDomain<any, T, R> = any,
179
185
  private cpuUsage?;
180
186
  timeUntilRoleMaturity: number;
181
187
  waitForReplicatorTimeout: number;
188
+ waitForReplicatorRequestIntervalMs: number;
189
+ waitForReplicatorRequestMaxAttempts?: number;
182
190
  waitForPruneDelay: number;
183
191
  distributionDebounceTime: number;
184
192
  replicationController: PIDReplicationController;
@@ -355,7 +363,12 @@ export declare class SharedLog<T, D extends ReplicationDomain<any, T, R> = any,
355
363
  rebalanceAll(options?: {
356
364
  clearCache?: boolean;
357
365
  }): Promise<false | undefined>;
358
- waitForPruned(): Promise<void>;
366
+ waitForPruned(options?: {
367
+ timeout?: number;
368
+ signal?: AbortSignal;
369
+ delayInterval?: number;
370
+ timeoutMessage?: string;
371
+ }): Promise<void>;
359
372
  onReplicationChange(changeOrChanges: ReplicationChanges<ReplicationRangeIndexable<R>> | ReplicationChanges<ReplicationRangeIndexable<R>>[]): Promise<false | undefined>;
360
373
  _onUnsubscription(evt: CustomEvent<UnsubcriptionEvent>): Promise<void>;
361
374
  _onSubscription(evt: CustomEvent<SubscriptionEvent>): Promise<void>;