@peerbit/shared-log 12.1.3 → 12.2.0-3333888

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 +10 -3
  18. package/dist/src/index.d.ts.map +1 -1
  19. package/dist/src/index.js +66 -32
  20. package/dist/src/index.js.map +1 -1
  21. package/dist/src/like.d.ts +71 -0
  22. package/dist/src/like.d.ts.map +1 -0
  23. package/dist/src/like.js +2 -0
  24. package/dist/src/like.js.map +1 -0
  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 +139 -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 +24 -2
  34. package/dist/src/sync/simple.js.map +1 -1
  35. package/package.json +20 -20
  36. package/src/index.ts +95 -37
  37. package/src/like.ts +84 -0
  38. package/src/sync/index.ts +19 -0
  39. package/src/sync/rateless-iblt.ts +193 -40
  40. package/src/sync/simple.ts +26 -3
@@ -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,10 +16,11 @@ 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";
23
+ export type { LogLike, LogResultsIterator, SharedLogLike, SharedLogReplicationIndexLike, } from "./like.js";
23
24
  export { type ReplicationRangeIndexable, ReplicationRangeIndexableU32, ReplicationRangeIndexableU64, type EntryReplicated, EntryReplicatedU32, EntryReplicatedU64, type CoverRange, NoPeersError, };
24
25
  export { MAX_U32, MAX_U64, type NumberFromType };
25
26
  export declare const logger: import("@libp2p/interface").Logger;
@@ -87,6 +88,7 @@ export type SharedLogOptions<T, D extends ReplicationDomain<any, T, R>, R extend
87
88
  respondToIHaveTimeout?: number;
88
89
  canReplicate?: (publicKey: PublicSignKey) => Promise<boolean> | boolean;
89
90
  keep?: (entry: ShallowOrFullEntry<T> | EntryReplicated<R>) => Promise<boolean> | boolean;
91
+ sync?: SyncOptions<R>;
90
92
  syncronizer?: SynchronizerConstructor<R>;
91
93
  timeUntilRoleMaturity?: number;
92
94
  waitForReplicatorTimeout?: number;
@@ -101,7 +103,7 @@ export type SharedLogOptions<T, D extends ReplicationDomain<any, T, R>, R extend
101
103
  export declare const DEFAULT_MIN_REPLICAS = 2;
102
104
  export declare const WAIT_FOR_REPLICATOR_TIMEOUT = 9000;
103
105
  export declare const WAIT_FOR_ROLE_MATURITY = 5000;
104
- export declare const WAIT_FOR_PRUNE_DELAY = 5000;
106
+ export declare const WAIT_FOR_PRUNE_DELAY = 0;
105
107
  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>;
106
108
  export type DeliveryOptions = {
107
109
  settle?: true | {
@@ -354,7 +356,12 @@ export declare class SharedLog<T, D extends ReplicationDomain<any, T, R> = any,
354
356
  rebalanceAll(options?: {
355
357
  clearCache?: boolean;
356
358
  }): Promise<false | undefined>;
357
- waitForPruned(): Promise<void>;
359
+ waitForPruned(options?: {
360
+ timeout?: number;
361
+ signal?: AbortSignal;
362
+ delayInterval?: number;
363
+ timeoutMessage?: string;
364
+ }): Promise<void>;
358
365
  onReplicationChange(changeOrChanges: ReplicationChanges<ReplicationRangeIndexable<R>> | ReplicationChanges<ReplicationRangeIndexable<R>>[]): Promise<false | undefined>;
359
366
  _onUnsubscription(evt: CustomEvent<UnsubcriptionEvent>): Promise<void>;
360
367
  _onSubscription(evt: CustomEvent<SubscriptionEvent>): Promise<void>;