@peerbit/stream
Advanced tools
| /** | ||
| * In-memory "real DirectStream" simulator. | ||
| * | ||
| * Goal: run most of @peerbit/stream's real logic (routing, ACK learning, dialer, | ||
| * pruning) but swap the underlying libp2p transport for a lightweight, in-memory | ||
| * shim so we can explore 100s–1000s of nodes. | ||
| * | ||
| * Run: | ||
| * node --loader ts-node/esm ./packages/transport/stream/benchmark/directstream-sim.ts --nodes 200 --degree 4 --messages 20 --targets 5 --redundancy 2 --seed 1 | ||
| */ | ||
| export {}; | ||
| //# sourceMappingURL=directstream-sim.d.ts.map |
| {"version":3,"file":"directstream-sim.d.ts","sourceRoot":"","sources":["../../benchmark/directstream-sim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"} |
| /** | ||
| * In-memory "real DirectStream" simulator. | ||
| * | ||
| * Goal: run most of @peerbit/stream's real logic (routing, ACK learning, dialer, | ||
| * pruning) but swap the underlying libp2p transport for a lightweight, in-memory | ||
| * shim so we can explore 100s–1000s of nodes. | ||
| * | ||
| * Run: | ||
| * node --loader ts-node/esm ./packages/transport/stream/benchmark/directstream-sim.ts --nodes 200 --degree 4 --messages 20 --targets 5 --redundancy 2 --seed 1 | ||
| */ | ||
| import { AcknowledgeDelivery } from "@peerbit/stream-interface"; | ||
| import { PreHash, SignatureWithKey } from "@peerbit/crypto"; | ||
| import { delay } from "@peerbit/time"; | ||
| import { DirectStream } from "../src/index.js"; | ||
| import { InMemoryConnectionManager, InMemoryNetwork, } from "@peerbit/libp2p-test-utils/inmemory-libp2p.js"; | ||
| const mulberry32 = (seed) => { | ||
| let t = seed >>> 0; | ||
| return () => { | ||
| t += 0x6d2b79f5; | ||
| let x = t; | ||
| x = Math.imul(x ^ (x >>> 15), x | 1); | ||
| x ^= x + Math.imul(x ^ (x >>> 7), x | 61); | ||
| return ((x ^ (x >>> 14)) >>> 0) / 4294967296; | ||
| }; | ||
| }; | ||
| const int = (rng, maxExclusive) => Math.floor(rng() * maxExclusive); | ||
| const pickDistinct = (rng, n, k, exclude) => { | ||
| const out = new Set(); | ||
| while (out.size < k) { | ||
| const candidate = int(rng, n); | ||
| if (candidate === exclude) | ||
| continue; | ||
| out.add(candidate); | ||
| } | ||
| return [...out]; | ||
| }; | ||
| const buildRandomGraph = (n, targetDegree, rng) => { | ||
| if (n <= 0) | ||
| throw new Error("nodes must be > 0"); | ||
| if (targetDegree < 0) | ||
| throw new Error("degree must be >= 0"); | ||
| if (targetDegree >= n) { | ||
| throw new Error("degree must be < nodes for a simple graph"); | ||
| } | ||
| const adj = Array.from({ length: n }, () => new Set()); | ||
| const degree = new Uint16Array(n); | ||
| const connect = (a, b) => { | ||
| if (a === b) | ||
| return false; | ||
| if (adj[a].has(b)) | ||
| return false; | ||
| if (degree[a] >= targetDegree || degree[b] >= targetDegree) | ||
| return false; | ||
| adj[a].add(b); | ||
| adj[b].add(a); | ||
| degree[a] += 1; | ||
| degree[b] += 1; | ||
| return true; | ||
| }; | ||
| // Seed connectivity. | ||
| if (targetDegree >= 2 && n >= 3) { | ||
| for (let i = 0; i < n; i++) | ||
| connect(i, (i + 1) % n); | ||
| } | ||
| else if (targetDegree >= 1 && n >= 2) { | ||
| for (let i = 0; i < n - 1; i++) | ||
| connect(i, i + 1); | ||
| } | ||
| const available = []; | ||
| const pos = new Int32Array(n).fill(-1); | ||
| for (let i = 0; i < n; i++) { | ||
| if (degree[i] < targetDegree) { | ||
| pos[i] = available.length; | ||
| available.push(i); | ||
| } | ||
| } | ||
| const removeAvailable = (id) => { | ||
| const p = pos[id]; | ||
| if (p < 0) | ||
| return; | ||
| const last = available.pop(); | ||
| if (last !== id) { | ||
| available[p] = last; | ||
| pos[last] = p; | ||
| } | ||
| pos[id] = -1; | ||
| }; | ||
| const maxAttempts = n * Math.max(1, targetDegree) * 200; | ||
| let attempts = 0; | ||
| while (available.length > 1 && attempts < maxAttempts) { | ||
| attempts++; | ||
| const a = available[int(rng, available.length)]; | ||
| const b = available[int(rng, available.length)]; | ||
| if (a === b) | ||
| continue; | ||
| if (!connect(a, b)) | ||
| continue; | ||
| if (degree[a] >= targetDegree) | ||
| removeAvailable(a); | ||
| if (degree[b] >= targetDegree) | ||
| removeAvailable(b); | ||
| } | ||
| return adj.map((s) => [...s]); | ||
| }; | ||
| class SimDirectStream extends DirectStream { | ||
| constructor(c, opts) { | ||
| super(c, ["sim/stream/0.0.0"], { | ||
| canRelayMessage: true, | ||
| connectionManager: { | ||
| // Keep it simple by default; can be expanded later. | ||
| dialer: opts.dialer ? { retryDelay: 1_000 } : false, | ||
| pruner: opts.pruner | ||
| ? { | ||
| interval: opts.prunerIntervalMs, | ||
| maxBuffer: opts.prunerMaxBufferBytes, | ||
| } | ||
| : false, | ||
| maxConnections: Number.MAX_SAFE_INTEGER, | ||
| minConnections: 0, | ||
| }, | ||
| }); | ||
| // Fast/mock signing: we only need the signer identity to flow through the | ||
| // signatures list for routing semantics; crypto verification is skipped. | ||
| this.sign = async () => new SignatureWithKey({ | ||
| signature: new Uint8Array([0]), | ||
| publicKey: this.publicKey, | ||
| prehash: PreHash.NONE, | ||
| }); | ||
| } | ||
| async verifyAndProcess(message) { | ||
| // Skip expensive crypto verify for large sims, but keep session handling | ||
| // behavior consistent with the real implementation. | ||
| const from = message.header.signatures.publicKeys[0]; | ||
| if (this.peers.has(from.hashcode())) { | ||
| // do nothing | ||
| } | ||
| else { | ||
| this.updateSession(from, Number(message.header.session)); | ||
| } | ||
| return true; | ||
| } | ||
| } | ||
| const parseArgs = (argv) => { | ||
| const get = (key) => { | ||
| const idx = argv.indexOf(key); | ||
| if (idx === -1) | ||
| return undefined; | ||
| return argv[idx + 1]; | ||
| }; | ||
| if (argv.includes("--help") || argv.includes("-h")) { | ||
| console.log([ | ||
| "directstream-sim.ts", | ||
| "", | ||
| "Args:", | ||
| " --nodes N number of nodes (default: 200)", | ||
| " --degree K target undirected degree (default: 4)", | ||
| " --messages M number of seek waves (default: 20)", | ||
| " --targets T targets per message (default: 5)", | ||
| " --redundancy R seek redundancy (default: 2)", | ||
| " --seed S RNG seed (default: 1)", | ||
| " --dialer 0|1 enable autodial (default: 1)", | ||
| " --pruner 0|1 enable pruning (default: 0)", | ||
| " --prunerIntervalMs X pruner interval (default: 50)", | ||
| " --prunerMaxBufferBytes B prune when queued bytes > B (default: 65536)", | ||
| " --dialDelayMs X artificial dial delay (default: 0)", | ||
| " --streamRxDelayMs X per-chunk inbound delay in shim (default: 0)", | ||
| " --streamHighWaterMarkBytes B backpressure threshold (default: 262144)", | ||
| "", | ||
| "Example:", | ||
| " node --loader ts-node/esm ./packages/transport/stream/benchmark/directstream-sim.ts --nodes 500 --degree 6 --messages 50 --targets 20 --redundancy 2 --seed 42", | ||
| ].join("\n")); | ||
| process.exit(0); | ||
| } | ||
| return { | ||
| nodes: Number(get("--nodes") ?? 200), | ||
| degree: Number(get("--degree") ?? 4), | ||
| messages: Number(get("--messages") ?? 20), | ||
| targetsPerMessage: Number(get("--targets") ?? 5), | ||
| redundancy: Number(get("--redundancy") ?? 2), | ||
| seed: Number(get("--seed") ?? 1), | ||
| dialer: String(get("--dialer") ?? "1") !== "0", | ||
| pruner: String(get("--pruner") ?? "0") === "1", | ||
| prunerIntervalMs: Number(get("--prunerIntervalMs") ?? 50), | ||
| prunerMaxBufferBytes: Number(get("--prunerMaxBufferBytes") ?? 64 * 1024), | ||
| dialDelayMs: Number(get("--dialDelayMs") ?? 0), | ||
| streamRxDelayMs: Number(get("--streamRxDelayMs") ?? 0), | ||
| streamHighWaterMarkBytes: Number(get("--streamHighWaterMarkBytes") ?? 256 * 1024), | ||
| }; | ||
| }; | ||
| const waitForProtocolStreams = async (peers, timeoutMs = 30_000) => { | ||
| const start = Date.now(); | ||
| while (Date.now() - start < timeoutMs) { | ||
| let missing = 0; | ||
| for (const p of peers) { | ||
| const protocols = p.stream.multicodecs; | ||
| for (const conn of p.stream.components.connectionManager.getConnections()) { | ||
| const streams = conn.streams; | ||
| const hasOutbound = streams.some((s) => s.protocol && protocols.includes(s.protocol) && s.direction === "outbound"); | ||
| const hasInbound = streams.some((s) => s.protocol && protocols.includes(s.protocol) && s.direction === "inbound"); | ||
| if (!hasOutbound || !hasInbound) | ||
| missing++; | ||
| } | ||
| } | ||
| if (missing === 0) | ||
| return; | ||
| await delay(0); | ||
| } | ||
| throw new Error("Timeout waiting for protocol streams to become duplex"); | ||
| }; | ||
| const main = async () => { | ||
| const params = parseArgs(process.argv.slice(2)); | ||
| const rng = mulberry32(params.seed); | ||
| const graph = buildRandomGraph(params.nodes, params.degree, rng); | ||
| const network = new InMemoryNetwork({ | ||
| streamRxDelayMs: params.streamRxDelayMs, | ||
| streamHighWaterMarkBytes: params.streamHighWaterMarkBytes, | ||
| dialDelayMs: params.dialDelayMs, | ||
| }); | ||
| const peers = []; | ||
| const basePort = 30_000; | ||
| for (let i = 0; i < params.nodes; i++) { | ||
| const port = basePort + i; | ||
| const { runtime } = InMemoryNetwork.createPeer({ index: i, port, network }); | ||
| runtime.connectionManager = new InMemoryConnectionManager(network, runtime); | ||
| network.registerPeer(runtime, port); | ||
| const components = { | ||
| peerId: runtime.peerId, | ||
| privateKey: runtime.privateKey, | ||
| addressManager: runtime.addressManager, | ||
| registrar: runtime.registrar, | ||
| connectionManager: runtime.connectionManager, | ||
| peerStore: runtime.peerStore, | ||
| events: runtime.events, | ||
| }; | ||
| peers.push({ | ||
| peerId: runtime.peerId, | ||
| stream: new SimDirectStream(components, { | ||
| dialer: params.dialer, | ||
| pruner: params.pruner, | ||
| prunerIntervalMs: params.prunerIntervalMs, | ||
| prunerMaxBufferBytes: params.prunerMaxBufferBytes, | ||
| }), | ||
| }); | ||
| } | ||
| await Promise.all(peers.map((p) => p.stream.start())); | ||
| // Establish initial graph via dials. | ||
| for (let a = 0; a < graph.length; a++) { | ||
| for (const b of graph[a]) { | ||
| if (b <= a) | ||
| continue; | ||
| const addrB = peers[b].stream.components.addressManager.getAddresses()[0]; | ||
| await peers[a].stream.components.connectionManager.openConnection(addrB); | ||
| } | ||
| } | ||
| await waitForProtocolStreams(peers); | ||
| let delivered = 0; | ||
| for (let i = 0; i < params.messages; i++) { | ||
| const source = int(rng, params.nodes); | ||
| const targets = pickDistinct(rng, params.nodes, Math.min(params.targetsPerMessage, params.nodes - 1), source); | ||
| const to = targets.map((t) => peers[t].stream.publicKey); | ||
| await peers[source].stream.publish(new Uint8Array([1]), { | ||
| mode: new AcknowledgeDelivery({ | ||
| to, | ||
| redundancy: params.redundancy, | ||
| }), | ||
| }); | ||
| delivered += to.length; | ||
| } | ||
| // Allow any dialer follow-ups / pruning timers to run briefly. | ||
| await delay(50); | ||
| const m = network.metrics; | ||
| let peerEdges = 0; | ||
| let neighbourSum = 0; | ||
| let routeSum = 0; | ||
| for (const p of peers) { | ||
| peerEdges += p.stream.components.connectionManager.getConnections().length; | ||
| neighbourSum += p.stream.peers.size; | ||
| routeSum += p.stream.routes.count(); | ||
| } | ||
| const connectionsNow = peerEdges / 2; | ||
| const avgNeighbours = neighbourSum / peers.length; | ||
| const avgRoutes = routeSum / peers.length; | ||
| const lines = []; | ||
| lines.push("stream directstream-sim results"); | ||
| lines.push(`- nodes: ${params.nodes}, degree: ${params.degree}`); | ||
| lines.push(`- messages: ${params.messages}, targets/message: ${params.targetsPerMessage}, redundancy: ${params.redundancy}`); | ||
| lines.push(`- dialer: ${params.dialer ? "on" : "off"}, pruner: ${params.pruner ? "on" : "off"} (interval=${params.prunerIntervalMs}ms, maxBuffer=${params.prunerMaxBufferBytes}B)`); | ||
| lines.push(`- transport: rxDelay=${params.streamRxDelayMs}ms, hwm=${params.streamHighWaterMarkBytes}B`); | ||
| lines.push(`- target deliveries attempted: ${delivered}`); | ||
| lines.push(`- connections: opened=${m.connectionsOpened}, closed=${m.connectionsClosed}, dials=${m.dials}`); | ||
| lines.push(`- connections now: ${connectionsNow} (avg neighbours/node=${avgNeighbours.toFixed(2)}, avg routes/node=${avgRoutes.toFixed(2)})`); | ||
| lines.push(`- protocol streams opened: ${m.streamsOpened}`); | ||
| lines.push(`- frames sent: total=${m.framesSent} (data=${m.dataFramesSent}, ack=${m.ackFramesSent}, goodbye=${m.goodbyeFramesSent}, other=${m.otherFramesSent})`); | ||
| lines.push(`- bytes sent: ${m.bytesSent}`); | ||
| console.log(lines.join("\n")); | ||
| await Promise.all(peers.map((p) => p.stream.stop())); | ||
| }; | ||
| await main(); | ||
| //# sourceMappingURL=directstream-sim.js.map |
| {"version":3,"file":"directstream-sim.js","sourceRoot":"","sources":["../../benchmark/directstream-sim.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Benchmark entrypoint (wired to `pnpm -C packages/transport/stream run bench`). | ||
| * | ||
| * Examples: | ||
| * pnpm -C packages/transport/stream run bench -- directstream-sim --nodes 500 --degree 6 | ||
| * pnpm -C packages/transport/stream run bench -- topology-sim --nodes 2000 --degree 4 | ||
| * pnpm -C packages/transport/stream run bench -- transfer | ||
| */ | ||
| export {}; | ||
| //# sourceMappingURL=index.d.ts.map |
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../benchmark/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"} |
| /** | ||
| * Benchmark entrypoint (wired to `pnpm -C packages/transport/stream run bench`). | ||
| * | ||
| * Examples: | ||
| * pnpm -C packages/transport/stream run bench -- directstream-sim --nodes 500 --degree 6 | ||
| * pnpm -C packages/transport/stream run bench -- topology-sim --nodes 2000 --degree 4 | ||
| * pnpm -C packages/transport/stream run bench -- transfer | ||
| */ | ||
| const argv = process.argv.slice(2); | ||
| const bench = argv[0] === "--" ? argv[1] : argv[0]; | ||
| const usage = () => { | ||
| console.log([ | ||
| "@peerbit/stream benchmarks", | ||
| "", | ||
| "Usage:", | ||
| " pnpm -C packages/transport/stream run bench -- <benchmark> [args]", | ||
| "", | ||
| "Benchmarks:", | ||
| " directstream-sim in-memory DirectStream network sim", | ||
| " topology-sim discrete-event topology/routing sim", | ||
| " transfer small real-libp2p throughput microbench", | ||
| "", | ||
| "Examples:", | ||
| " pnpm -C packages/transport/stream run bench -- directstream-sim --nodes 500 --degree 6", | ||
| " pnpm -C packages/transport/stream run bench -- topology-sim --nodes 2000 --degree 4", | ||
| " pnpm -C packages/transport/stream run bench -- transfer", | ||
| ].join("\n")); | ||
| }; | ||
| if (!bench || bench === "--help" || bench === "-h") { | ||
| usage(); | ||
| process.exit(1); | ||
| } | ||
| switch (bench) { | ||
| case "directstream-sim": | ||
| await import("./directstream-sim.js"); | ||
| break; | ||
| case "topology-sim": | ||
| await import("./topology-sim.js"); | ||
| break; | ||
| case "transfer": | ||
| await import("./transfer.js"); | ||
| break; | ||
| default: | ||
| usage(); | ||
| process.exit(1); | ||
| } | ||
| export {}; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../benchmark/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEnD,MAAM,KAAK,GAAG,GAAG,EAAE;IAClB,OAAO,CAAC,GAAG,CACV;QACC,4BAA4B;QAC5B,EAAE;QACF,QAAQ;QACR,qEAAqE;QACrE,EAAE;QACF,aAAa;QACb,wDAAwD;QACxD,yDAAyD;QACzD,6DAA6D;QAC7D,EAAE;QACF,WAAW;QACX,0FAA0F;QAC1F,uFAAuF;QACvF,2DAA2D;KAC3D,CAAC,IAAI,CAAC,IAAI,CAAC,CACZ,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;IACpD,KAAK,EAAE,CAAC;IACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,QAAQ,KAAK,EAAE,CAAC;IACf,KAAK,kBAAkB;QACtB,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACtC,MAAM;IACP,KAAK,cAAc;QAClB,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAClC,MAAM;IACP,KAAK,UAAU;QACd,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAC9B,MAAM;IACP;QACC,KAAK,EAAE,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"} |
| /** | ||
| * Lightweight discrete-event simulator for @peerbit/stream-style routing. | ||
| * | ||
| * This is intentionally NOT libp2p-backed. It is meant for 1k–10k+ node | ||
| * experiments (topology / convergence / message overhead) that would be | ||
| * infeasible with real libp2p peers. | ||
| * | ||
| * Run: | ||
| * node --loader ts-node/esm ./packages/transport/stream/benchmark/topology-sim.ts --nodes 2000 --degree 4 --messages 200 --targets 10 --redundancy 2 --seed 1 | ||
| */ | ||
| export {}; | ||
| //# sourceMappingURL=topology-sim.d.ts.map |
| {"version":3,"file":"topology-sim.d.ts","sourceRoot":"","sources":["../../benchmark/topology-sim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"} |
| /** | ||
| * Lightweight discrete-event simulator for @peerbit/stream-style routing. | ||
| * | ||
| * This is intentionally NOT libp2p-backed. It is meant for 1k–10k+ node | ||
| * experiments (topology / convergence / message overhead) that would be | ||
| * infeasible with real libp2p peers. | ||
| * | ||
| * Run: | ||
| * node --loader ts-node/esm ./packages/transport/stream/benchmark/topology-sim.ts --nodes 2000 --degree 4 --messages 200 --targets 10 --redundancy 2 --seed 1 | ||
| */ | ||
| import { computeSeekAckRouteUpdate, selectSeekRelayTargets, shouldAcknowledgeDataMessage, shouldIgnoreDataMessage, } from "../src/core/seek-routing.js"; | ||
| class MinHeap { | ||
| compare; | ||
| heap = []; | ||
| constructor(compare) { | ||
| this.compare = compare; | ||
| } | ||
| get size() { | ||
| return this.heap.length; | ||
| } | ||
| push(item) { | ||
| this.heap.push(item); | ||
| this.bubbleUp(this.heap.length - 1); | ||
| } | ||
| pop() { | ||
| if (this.heap.length === 0) | ||
| return undefined; | ||
| const root = this.heap[0]; | ||
| const last = this.heap.pop(); | ||
| if (this.heap.length > 0) { | ||
| this.heap[0] = last; | ||
| this.bubbleDown(0); | ||
| } | ||
| return root; | ||
| } | ||
| bubbleUp(index) { | ||
| while (index > 0) { | ||
| const parentIndex = (index - 1) >> 1; | ||
| if (this.compare(this.heap[index], this.heap[parentIndex]) >= 0) | ||
| break; | ||
| [this.heap[index], this.heap[parentIndex]] = [ | ||
| this.heap[parentIndex], | ||
| this.heap[index], | ||
| ]; | ||
| index = parentIndex; | ||
| } | ||
| } | ||
| bubbleDown(index) { | ||
| const length = this.heap.length; | ||
| for (;;) { | ||
| const left = index * 2 + 1; | ||
| const right = left + 1; | ||
| let smallest = index; | ||
| if (left < length && | ||
| this.compare(this.heap[left], this.heap[smallest]) < 0) { | ||
| smallest = left; | ||
| } | ||
| if (right < length && | ||
| this.compare(this.heap[right], this.heap[smallest]) < 0) { | ||
| smallest = right; | ||
| } | ||
| if (smallest === index) | ||
| break; | ||
| [this.heap[index], this.heap[smallest]] = [ | ||
| this.heap[smallest], | ||
| this.heap[index], | ||
| ]; | ||
| index = smallest; | ||
| } | ||
| } | ||
| } | ||
| const mulberry32 = (seed) => { | ||
| let t = seed >>> 0; | ||
| return () => { | ||
| t += 0x6d2b79f5; | ||
| let x = t; | ||
| x = Math.imul(x ^ (x >>> 15), x | 1); | ||
| x ^= x + Math.imul(x ^ (x >>> 7), x | 61); | ||
| return ((x ^ (x >>> 14)) >>> 0) / 4294967296; | ||
| }; | ||
| }; | ||
| const int = (rng, maxExclusive) => Math.floor(rng() * maxExclusive); | ||
| const intBetween = (rng, minInclusive, maxInclusive) => minInclusive + int(rng, maxInclusive - minInclusive + 1); | ||
| const pickDistinct = (rng, n, k, exclude) => { | ||
| const out = new Set(); | ||
| while (out.size < k) { | ||
| const candidate = int(rng, n); | ||
| if (candidate === exclude) | ||
| continue; | ||
| out.add(candidate); | ||
| } | ||
| return [...out]; | ||
| }; | ||
| const buildRandomGraph = (n, targetDegree, rng) => { | ||
| if (n <= 0) | ||
| throw new Error("nodes must be > 0"); | ||
| if (targetDegree < 0) | ||
| throw new Error("degree must be >= 0"); | ||
| if (targetDegree >= n) { | ||
| throw new Error("degree must be < nodes for a simple graph"); | ||
| } | ||
| const adj = Array.from({ length: n }, () => new Set()); | ||
| const degree = new Uint16Array(n); | ||
| const connect = (a, b) => { | ||
| if (a === b) | ||
| return false; | ||
| if (adj[a].has(b)) | ||
| return false; | ||
| if (degree[a] >= targetDegree || degree[b] >= targetDegree) | ||
| return false; | ||
| adj[a].add(b); | ||
| adj[b].add(a); | ||
| degree[a] += 1; | ||
| degree[b] += 1; | ||
| return true; | ||
| }; | ||
| // Seed connectivity so we don't start disconnected. | ||
| if (targetDegree >= 2 && n >= 3) { | ||
| for (let i = 0; i < n; i++) | ||
| connect(i, (i + 1) % n); | ||
| } | ||
| else if (targetDegree >= 1 && n >= 2) { | ||
| for (let i = 0; i < n - 1; i++) | ||
| connect(i, i + 1); | ||
| } | ||
| const available = []; | ||
| const pos = new Int32Array(n).fill(-1); | ||
| for (let i = 0; i < n; i++) { | ||
| if (degree[i] < targetDegree) { | ||
| pos[i] = available.length; | ||
| available.push(i); | ||
| } | ||
| } | ||
| const removeAvailable = (id) => { | ||
| const p = pos[id]; | ||
| if (p < 0) | ||
| return; | ||
| const last = available.pop(); | ||
| if (last !== id) { | ||
| available[p] = last; | ||
| pos[last] = p; | ||
| } | ||
| pos[id] = -1; | ||
| }; | ||
| const maxAttempts = n * Math.max(1, targetDegree) * 200; | ||
| let attempts = 0; | ||
| while (available.length > 1 && attempts < maxAttempts) { | ||
| attempts++; | ||
| const a = available[int(rng, available.length)]; | ||
| const b = available[int(rng, available.length)]; | ||
| if (a === b) | ||
| continue; | ||
| if (!connect(a, b)) | ||
| continue; | ||
| if (degree[a] >= targetDegree) | ||
| removeAvailable(a); | ||
| if (degree[b] >= targetDegree) | ||
| removeAvailable(b); | ||
| } | ||
| return adj.map((s) => [...s]); | ||
| }; | ||
| const addRoute = (routesByFrom, from, target, via, distance, maxPerTarget = 8) => { | ||
| let byTarget = routesByFrom.get(from); | ||
| if (!byTarget) { | ||
| byTarget = new Map(); | ||
| routesByFrom.set(from, byTarget); | ||
| } | ||
| let list = byTarget.get(target); | ||
| if (!list) { | ||
| list = []; | ||
| byTarget.set(target, list); | ||
| } | ||
| const existing = list.find((x) => x.via === via); | ||
| if (existing) { | ||
| existing.distance = Math.min(existing.distance, distance); | ||
| } | ||
| else { | ||
| list.push({ via, distance }); | ||
| } | ||
| list.sort((a, b) => a.distance - b.distance); | ||
| if (list.length > maxPerTarget) { | ||
| list.length = maxPerTarget; | ||
| } | ||
| }; | ||
| const traceHas = (trace, node) => { | ||
| let current = trace; | ||
| while (current) { | ||
| if (current.node === node) | ||
| return true; | ||
| current = current.prev; | ||
| } | ||
| return false; | ||
| }; | ||
| const simulate = (params) => { | ||
| const rng = mulberry32(params.seed); | ||
| const graph = buildRandomGraph(params.nodes, params.degree, rng); | ||
| const warn = graph.some((nbs) => nbs.length < Math.min(params.degree, params.nodes - 1)) && | ||
| "graph generation hit degree constraints (some nodes < --degree)"; | ||
| const routes = Array.from({ length: params.nodes }, () => new Map()); | ||
| // Seed direct neighbor routes: from=self -> target=neighbor via neighbor at distance=-1. | ||
| for (let u = 0; u < params.nodes; u++) { | ||
| for (const v of graph[u]) { | ||
| addRoute(routes[u], u, v, v, -1); | ||
| } | ||
| } | ||
| let dataTx = 0; | ||
| let ackTx = 0; | ||
| let targetDeliveries = 0; | ||
| let targetExpected = 0; | ||
| let firstHopSum = 0; | ||
| let firstHopCount = 0; | ||
| const seen = new Uint8Array(params.nodes); | ||
| const deliveredToTarget = new Uint8Array(params.nodes); | ||
| const heap = new MinHeap((a, b) => a.t - b.t); | ||
| const scheduleData = (now, from, to, signer, hop) => { | ||
| if (params.dropRate > 0 && rng() < params.dropRate) | ||
| return; | ||
| const delay = intBetween(rng, params.minDelay, params.maxDelay); | ||
| dataTx++; | ||
| heap.push({ t: now + delay, kind: "data", from, to, signer, hop }); | ||
| }; | ||
| const scheduleAck = (now, from, to, trace, target, seenCounter) => { | ||
| if (params.dropRate > 0 && rng() < params.dropRate) | ||
| return; | ||
| const delay = intBetween(rng, params.minDelay, params.maxDelay); | ||
| ackTx++; | ||
| heap.push({ | ||
| t: now + delay, | ||
| kind: "ack", | ||
| from, | ||
| to, | ||
| trace, | ||
| target, | ||
| seenCounter, | ||
| }); | ||
| }; | ||
| for (let msg = 0; msg < params.messages; msg++) { | ||
| seen.fill(0); | ||
| deliveredToTarget.fill(0); | ||
| while (heap.pop() != null) { | ||
| // drain any leftover events (shouldn't happen since we drain per message) | ||
| } | ||
| const source = int(rng, params.nodes); | ||
| const targets = pickDistinct(rng, params.nodes, Math.min(params.targetsPerMessage, params.nodes - 1), source); | ||
| const targetsSet = new Set(targets); | ||
| targetExpected += targets.length; | ||
| const sourceSigner = { node: source }; | ||
| const t0 = 0; | ||
| for (const nb of graph[source]) { | ||
| scheduleData(t0, source, nb, sourceSigner, 1); | ||
| } | ||
| while (heap.size > 0) { | ||
| const ev = heap.pop(); | ||
| if (ev.kind === "data") { | ||
| const to = ev.to; | ||
| const seenBefore = seen[to]; | ||
| const ignored = shouldIgnoreDataMessage({ | ||
| signedBySelf: traceHas(ev.signer, to), | ||
| seenBefore, | ||
| mode: { kind: "seek", redundancy: params.redundancy }, | ||
| }); | ||
| if (ignored) { | ||
| continue; | ||
| } | ||
| seen[to] = Math.min(255, seenBefore + 1); | ||
| if (shouldAcknowledgeDataMessage({ | ||
| isRecipient: targetsSet.has(to), | ||
| seenBefore, | ||
| redundancy: params.redundancy, | ||
| })) { | ||
| if (deliveredToTarget[to] === 0) { | ||
| deliveredToTarget[to] = 1; | ||
| targetDeliveries++; | ||
| firstHopSum += ev.hop; | ||
| firstHopCount++; | ||
| } | ||
| // ACK travels backwards along the signer trace. | ||
| scheduleAck(ev.t, to, ev.signer.node, ev.signer, to, seenBefore); | ||
| } | ||
| // Redundant forwarding: forward until local seenBefore reaches redundancy. | ||
| const newSigner = { node: to, prev: ev.signer }; | ||
| const relayTo = selectSeekRelayTargets({ | ||
| candidates: graph[to], | ||
| getCandidateId: (id) => id, | ||
| inboundId: ev.from, | ||
| hasSigned: (id) => traceHas(ev.signer, id), | ||
| }); | ||
| for (const nb of relayTo) { | ||
| scheduleData(ev.t, to, nb, newSigner, ev.hop + 1); | ||
| } | ||
| } | ||
| else { | ||
| // ACK processing at `ev.to` (a signer on the trace). | ||
| const current = ev.to; | ||
| if (ev.trace.node !== current) { | ||
| // Should not happen; indicates a bug in the simulator. | ||
| continue; | ||
| } | ||
| const upstream = ev.trace.prev?.node; | ||
| const routeUpdate = computeSeekAckRouteUpdate({ | ||
| current, | ||
| upstream, | ||
| downstream: ev.from, | ||
| target: ev.target, | ||
| distance: ev.seenCounter, | ||
| }); | ||
| addRoute(routes[current], routeUpdate.from, routeUpdate.target, routeUpdate.neighbour, routeUpdate.distance); | ||
| if (upstream != null) { | ||
| scheduleAck(ev.t, current, upstream, ev.trace.prev, ev.target, ev.seenCounter); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| let totalRouteEntries = 0; | ||
| let totalRouteTargets = 0; | ||
| for (let i = 0; i < params.nodes; i++) { | ||
| for (const [_from, byTarget] of routes[i]) { | ||
| totalRouteTargets += byTarget.size; | ||
| for (const [_target, list] of byTarget) { | ||
| totalRouteEntries += list.length; | ||
| } | ||
| } | ||
| } | ||
| return { | ||
| dataTx, | ||
| ackTx, | ||
| targetDeliveries, | ||
| targetExpected, | ||
| firstHopSum, | ||
| firstHopCount, | ||
| avgRouteEntriesPerNode: totalRouteEntries / params.nodes, | ||
| avgRouteTargetsPerNode: totalRouteTargets / params.nodes, | ||
| warn: warn || undefined, | ||
| }; | ||
| }; | ||
| const parseArgs = (argv) => { | ||
| const get = (key) => { | ||
| const idx = argv.indexOf(key); | ||
| if (idx === -1) | ||
| return undefined; | ||
| return argv[idx + 1]; | ||
| }; | ||
| const has = (key) => argv.includes(key); | ||
| if (has("--help") || has("-h")) { | ||
| console.log([ | ||
| "topology-sim.ts", | ||
| "", | ||
| "Args:", | ||
| " --nodes N number of nodes (default: 2000)", | ||
| " --degree K target undirected degree (default: 4)", | ||
| " --messages M number of seek waves (default: 200)", | ||
| " --targets T targets per message (default: 10)", | ||
| " --redundancy R seek redundancy (default: 2)", | ||
| " --seed S RNG seed (default: 1)", | ||
| " --drop P per-edge drop rate [0..1] (default: 0)", | ||
| " --minDelay MS min per-edge delay (default: 1)", | ||
| " --maxDelay MS max per-edge delay (default: 5)", | ||
| "", | ||
| "Example:", | ||
| " node --loader ts-node/esm ./packages/transport/stream/benchmark/topology-sim.ts --nodes 5000 --degree 6 --messages 500 --targets 20 --redundancy 2 --drop 0.01 --seed 42", | ||
| ].join("\n")); | ||
| process.exit(0); | ||
| } | ||
| const nodes = Number(get("--nodes") ?? 2000); | ||
| const degree = Number(get("--degree") ?? 4); | ||
| const messages = Number(get("--messages") ?? 200); | ||
| const targetsPerMessage = Number(get("--targets") ?? 10); | ||
| const redundancy = Number(get("--redundancy") ?? 2); | ||
| const seed = Number(get("--seed") ?? 1); | ||
| const dropRate = Number(get("--drop") ?? 0); | ||
| const minDelay = Number(get("--minDelay") ?? 1); | ||
| const maxDelay = Number(get("--maxDelay") ?? 5); | ||
| return { | ||
| nodes, | ||
| degree, | ||
| messages, | ||
| targetsPerMessage, | ||
| redundancy, | ||
| seed, | ||
| dropRate, | ||
| minDelay, | ||
| maxDelay, | ||
| }; | ||
| }; | ||
| const main = async () => { | ||
| const params = parseArgs(process.argv.slice(2)); | ||
| const started = Date.now(); | ||
| const result = simulate(params); | ||
| const elapsedMs = Date.now() - started; | ||
| const deliveryPct = result.targetExpected === 0 | ||
| ? 100 | ||
| : (result.targetDeliveries / result.targetExpected) * 100; | ||
| const avgFirstHop = result.firstHopCount === 0 ? 0 : result.firstHopSum / result.firstHopCount; | ||
| const lines = []; | ||
| lines.push("stream topology-sim results"); | ||
| lines.push(`- nodes: ${params.nodes}, degree: ${params.degree}`); | ||
| lines.push(`- messages: ${params.messages}, targets/message: ${params.targetsPerMessage}, redundancy: ${params.redundancy}`); | ||
| lines.push(`- drop: ${params.dropRate}, delay: ${params.minDelay}..${params.maxDelay} (sim units)`); | ||
| lines.push(`- tx: data=${result.dataTx}, ack=${result.ackTx}`); | ||
| lines.push(`- delivery: ${result.targetDeliveries}/${result.targetExpected} (${deliveryPct.toFixed(2)}%)`); | ||
| lines.push(`- avg first-delivery hop: ${avgFirstHop.toFixed(2)}`); | ||
| lines.push(`- avg route targets/node: ${result.avgRouteTargetsPerNode.toFixed(2)}, entries/node: ${result.avgRouteEntriesPerNode.toFixed(2)}`); | ||
| if (result.warn) { | ||
| lines.push(`- warn: ${result.warn}`); | ||
| } | ||
| lines.push(`- wall time: ${elapsedMs}ms`); | ||
| console.log(lines.join("\n")); | ||
| }; | ||
| await main(); | ||
| //# sourceMappingURL=topology-sim.js.map |
| {"version":3,"file":"topology-sim.js","sourceRoot":"","sources":["../../benchmark/topology-sim.ts"],"names":[],"mappings":"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"} |
| export type SeekRoutingMode = { | ||
| kind: "seek"; | ||
| redundancy: number; | ||
| } | { | ||
| kind: "non-seek"; | ||
| }; | ||
| export type ShouldIgnoreDataMessageArgs = { | ||
| signedBySelf: boolean; | ||
| seenBefore: number; | ||
| mode: SeekRoutingMode; | ||
| }; | ||
| export declare const shouldIgnoreDataMessage: (args: ShouldIgnoreDataMessageArgs) => boolean; | ||
| export type SelectSeekRelayTargetsArgs<T, Id extends string | number> = { | ||
| candidates: Iterable<T>; | ||
| getCandidateId: (candidate: T) => Id; | ||
| inboundId: Id; | ||
| hasSigned: (candidateId: Id) => boolean; | ||
| }; | ||
| export declare const selectSeekRelayTargets: <T, Id extends string | number>(args: SelectSeekRelayTargetsArgs<T, Id>) => T[]; | ||
| export type ShouldAcknowledgeDataMessageArgs = { | ||
| isRecipient: boolean; | ||
| seenBefore: number; | ||
| redundancy: number; | ||
| }; | ||
| export declare const shouldAcknowledgeDataMessage: (args: ShouldAcknowledgeDataMessageArgs) => boolean; | ||
| export type SeekAckRouteUpdate<Id extends string | number> = { | ||
| from: Id; | ||
| neighbour: Id; | ||
| target: Id; | ||
| distance: number; | ||
| }; | ||
| export declare const computeSeekAckRouteUpdate: <Id extends string | number>(args: { | ||
| current: Id; | ||
| upstream?: Id; | ||
| downstream: Id; | ||
| target: Id; | ||
| distance: number; | ||
| }) => SeekAckRouteUpdate<Id>; | ||
| //# sourceMappingURL=seek-routing.d.ts.map |
| {"version":3,"file":"seek-routing.d.ts","sourceRoot":"","sources":["../../../src/core/seek-routing.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GACxB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAExB,MAAM,MAAM,2BAA2B,GAAG;IACzC,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,eAAe,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,MAAM,2BAA2B,YAUxE,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,CAAC,EAAE,EAAE,SAAS,MAAM,GAAG,MAAM,IAAI;IACvE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxB,cAAc,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC;IACrC,SAAS,EAAE,EAAE,CAAC;IACd,SAAS,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,OAAO,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,CAAC,EAAE,EAAE,SAAS,MAAM,GAAG,MAAM,EACnE,MAAM,0BAA0B,CAAC,CAAC,EAAE,EAAE,CAAC,KACrC,CAAC,EASH,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC9C,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACxC,MAAM,gCAAgC,YAGtC,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,IAAI;IAC5D,IAAI,EAAE,EAAE,CAAC;IACT,SAAS,EAAE,EAAE,CAAC;IACd,MAAM,EAAE,EAAE,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,EAAE,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM;IAC3E,OAAO,EAAE,EAAE,CAAC;IACZ,QAAQ,CAAC,EAAE,EAAE,CAAC;IACd,UAAU,EAAE,EAAE,CAAC;IACf,MAAM,EAAE,EAAE,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CACjB,KAAG,kBAAkB,CAAC,EAAE,CAOxB,CAAC"} |
| export const shouldIgnoreDataMessage = (args) => { | ||
| if (args.signedBySelf) { | ||
| return true; | ||
| } | ||
| if (args.mode.kind === "seek") { | ||
| return args.seenBefore >= args.mode.redundancy; | ||
| } | ||
| return args.seenBefore > 0; | ||
| }; | ||
| export const selectSeekRelayTargets = (args) => { | ||
| const out = []; | ||
| for (const candidate of args.candidates) { | ||
| const candidateId = args.getCandidateId(candidate); | ||
| if (candidateId === args.inboundId) | ||
| continue; | ||
| if (args.hasSigned(candidateId)) | ||
| continue; | ||
| out.push(candidate); | ||
| } | ||
| return out; | ||
| }; | ||
| export const shouldAcknowledgeDataMessage = (args) => { | ||
| return args.isRecipient && args.seenBefore < args.redundancy; | ||
| }; | ||
| export const computeSeekAckRouteUpdate = (args) => { | ||
| return { | ||
| from: args.upstream ?? args.current, | ||
| neighbour: args.downstream, | ||
| target: args.target, | ||
| distance: args.distance, | ||
| }; | ||
| }; | ||
| //# sourceMappingURL=seek-routing.js.map |
| {"version":3,"file":"seek-routing.js","sourceRoot":"","sources":["../../../src/core/seek-routing.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAAiC,EAAE,EAAE;IAC5E,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IAChD,CAAC;IAED,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AAC5B,CAAC,CAAC;AASF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACrC,IAAuC,EACjC,EAAE;IACR,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,WAAW,KAAK,IAAI,CAAC,SAAS;YAAE,SAAS;QAC7C,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;YAAE,SAAS;QAC1C,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAQF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC3C,IAAsC,EACrC,EAAE;IACH,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9D,CAAC,CAAC;AASF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAA6B,IAMrE,EAA0B,EAAE;IAC5B,OAAO;QACN,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO;QACnC,SAAS,EAAE,IAAI,CAAC,UAAU;QAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACvB,CAAC;AACH,CAAC,CAAC"} |
| export type SeekRoutingMode = | ||
| | { kind: "seek"; redundancy: number } | ||
| | { kind: "non-seek" }; | ||
| export type ShouldIgnoreDataMessageArgs = { | ||
| signedBySelf: boolean; | ||
| seenBefore: number; | ||
| mode: SeekRoutingMode; | ||
| }; | ||
| export const shouldIgnoreDataMessage = (args: ShouldIgnoreDataMessageArgs) => { | ||
| if (args.signedBySelf) { | ||
| return true; | ||
| } | ||
| if (args.mode.kind === "seek") { | ||
| return args.seenBefore >= args.mode.redundancy; | ||
| } | ||
| return args.seenBefore > 0; | ||
| }; | ||
| export type SelectSeekRelayTargetsArgs<T, Id extends string | number> = { | ||
| candidates: Iterable<T>; | ||
| getCandidateId: (candidate: T) => Id; | ||
| inboundId: Id; | ||
| hasSigned: (candidateId: Id) => boolean; | ||
| }; | ||
| export const selectSeekRelayTargets = <T, Id extends string | number>( | ||
| args: SelectSeekRelayTargetsArgs<T, Id>, | ||
| ): T[] => { | ||
| const out: T[] = []; | ||
| for (const candidate of args.candidates) { | ||
| const candidateId = args.getCandidateId(candidate); | ||
| if (candidateId === args.inboundId) continue; | ||
| if (args.hasSigned(candidateId)) continue; | ||
| out.push(candidate); | ||
| } | ||
| return out; | ||
| }; | ||
| export type ShouldAcknowledgeDataMessageArgs = { | ||
| isRecipient: boolean; | ||
| seenBefore: number; | ||
| redundancy: number; | ||
| }; | ||
| export const shouldAcknowledgeDataMessage = ( | ||
| args: ShouldAcknowledgeDataMessageArgs, | ||
| ) => { | ||
| return args.isRecipient && args.seenBefore < args.redundancy; | ||
| }; | ||
| export type SeekAckRouteUpdate<Id extends string | number> = { | ||
| from: Id; | ||
| neighbour: Id; | ||
| target: Id; | ||
| distance: number; | ||
| }; | ||
| export const computeSeekAckRouteUpdate = <Id extends string | number>(args: { | ||
| current: Id; | ||
| upstream?: Id; | ||
| downstream: Id; | ||
| target: Id; | ||
| distance: number; | ||
| }): SeekAckRouteUpdate<Id> => { | ||
| return { | ||
| from: args.upstream ?? args.current, | ||
| neighbour: args.downstream, | ||
| target: args.target, | ||
| distance: args.distance, | ||
| }; | ||
| }; |
| import { tcp } from "@libp2p/tcp"; | ||
| import { TestSession } from "@peerbit/libp2p-test-utils"; | ||
| import { SeekDelivery } from "@peerbit/stream-interface"; | ||
| import { AcknowledgeDelivery } from "@peerbit/stream-interface"; | ||
| import { waitForResolved } from "@peerbit/time"; | ||
@@ -49,3 +49,3 @@ import B from "benchmark"; | ||
| stream(0).publish(new Uint8Array([123]), { | ||
| mode: new SeekDelivery({ | ||
| mode: new AcknowledgeDelivery({ | ||
| redundancy: 1, | ||
@@ -52,0 +52,0 @@ to: [stream(session.peers.length - 1).publicKey], |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../benchmark/transfer.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../benchmark/transfer.ts"],"names":[],"mappings":"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"} |
+39
-5
@@ -8,4 +8,4 @@ import { TypedEventEmitter } from "@libp2p/interface"; | ||
| import type { SignatureWithKey } from "@peerbit/crypto"; | ||
| import { ACK, AcknowledgeDelivery, AnyWhere, DataMessage, Goodbye, Message, MultiAddrinfo, SeekDelivery, SilentDelivery } from "@peerbit/stream-interface"; | ||
| import type { IdOptions, PeerRefs, PriorityOptions, PublicKeyFromHashResolver, StreamEvents, WaitForAnyOpts, WaitForPeer, WaitForPresentOpts, WithExtraSigners, WithMode, WithTo } from "@peerbit/stream-interface"; | ||
| import { ACK, AcknowledgeAnyWhere, AcknowledgeDelivery, AnyWhere, DataMessage, Goodbye, Message, MultiAddrinfo, SilentDelivery } from "@peerbit/stream-interface"; | ||
| import type { DirectStreamAckRouteHint, IdOptions, PeerRefs, PriorityOptions, PublicKeyFromHashResolver, StreamEvents, WaitForAnyOpts, WaitForPeer, WaitForPresentOpts, WithExtraSigners, WithMode, WithTo } from "@peerbit/stream-interface"; | ||
| import { pipe } from "it-pipe"; | ||
@@ -70,2 +70,4 @@ import { type Pushable } from "it-pushable"; | ||
| _getActiveOutboundPushable(): PushableLanes<Uint8Array> | undefined; | ||
| getOutboundQueuedBytes(): number; | ||
| getOutboundQueuedBytesByLane(): number[]; | ||
| _getOutboundCount(): number; | ||
@@ -158,5 +160,23 @@ _getInboundCount(): number; | ||
| connectionManager?: ConnectionManagerArguments; | ||
| routeSeekInterval?: number; | ||
| seekTimeout?: number; | ||
| routeMaxRetentionPeriod?: number; | ||
| /** | ||
| * Best-effort bounds for the per-process route cache. These exist to prevent | ||
| * unbounded memory growth in large networks/simulations. | ||
| */ | ||
| routeCacheMaxFromEntries?: number; | ||
| routeCacheMaxTargetsPerFrom?: number; | ||
| routeCacheMaxRelaysPerTarget?: number; | ||
| /** | ||
| * Share node-level routing/session state across DirectStream instances created | ||
| * from the same libp2p private key. | ||
| * | ||
| * This reduces duplicated topology knowledge when multiple protocols run on | ||
| * the same node (e.g. pubsub + fanout overlays). | ||
| * | ||
| * Defaults to `true`. | ||
| */ | ||
| sharedRouting?: boolean; | ||
| seenCacheMax?: number; | ||
| seenCacheTtlMs?: number; | ||
| }; | ||
@@ -212,2 +232,4 @@ type ConnectionManagerLike = { | ||
| private _registrarTopologyIds; | ||
| private _peerConnectListener?; | ||
| private _peerDisconnectListener?; | ||
| private readonly maxInboundStreams?; | ||
@@ -220,3 +242,11 @@ private readonly maxOutboundStreams?; | ||
| private prunedConnectionsCache?; | ||
| private pruneToLimitsInFlight?; | ||
| private _startInFlight?; | ||
| private routeMaxRetentionPeriod; | ||
| private routeCacheMaxFromEntries?; | ||
| private routeCacheMaxTargetsPerFrom?; | ||
| private routeCacheMaxRelaysPerTarget?; | ||
| private readonly sharedRouting; | ||
| private sharedRoutingKey?; | ||
| private sharedRoutingState?; | ||
| outboundInflightQueue: Pushable<{ | ||
@@ -226,3 +256,2 @@ connection: Connection; | ||
| }>; | ||
| routeSeekInterval: number; | ||
| seekTimeout: number; | ||
@@ -234,3 +263,5 @@ closeController: AbortController; | ||
| constructor(components: DirectStreamComponents, multicodecs: string[], options?: DirectStreamOptions); | ||
| private pruneConnectionsToLimits; | ||
| start(): Promise<void>; | ||
| private _startImpl; | ||
| /** | ||
@@ -262,2 +293,4 @@ * Unregister the pubsub protocol and the streams with other peers will be closed. | ||
| invalidateSession(key: string): void; | ||
| getRouteHints(target: string, from?: string): DirectStreamAckRouteHint[]; | ||
| getBestRouteHint(target: string, from?: string): DirectStreamAckRouteHint | undefined; | ||
| onPeerSession(key: PublicSignKey, session: number): void; | ||
@@ -296,3 +329,3 @@ /** | ||
| skipRecipientValidation?: boolean; | ||
| } & WithExtraSigners): Promise<DataMessage<SilentDelivery | AcknowledgeDelivery | SeekDelivery | AnyWhere>>; | ||
| } & WithExtraSigners): Promise<DataMessage<SilentDelivery | AcknowledgeDelivery | AcknowledgeAnyWhere | AnyWhere>>; | ||
| /** | ||
@@ -304,2 +337,3 @@ * Publishes messages to all peers | ||
| private clearHealthcheckTimer; | ||
| private formatDeliveryDebugState; | ||
| private createDeliveryPromise; | ||
@@ -306,0 +340,0 @@ publishMessage(from: PublicSignKey, message: Message, to?: PeerStreams[] | Map<string, PeerStreams>, relayed?: boolean, signal?: AbortSignal): Promise<void>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"} |
+15
-0
@@ -0,1 +1,2 @@ | ||
| import type { DirectStreamAckRouteHint } from "@peerbit/stream-interface"; | ||
| export declare const MAX_ROUTE_DISTANCE: number; | ||
@@ -5,2 +6,3 @@ type RelayInfo = { | ||
| hash: string; | ||
| updatedAt: number; | ||
| expireAt?: number; | ||
@@ -22,7 +24,18 @@ distance: number; | ||
| signal?: AbortSignal; | ||
| private pendingCleanupByFrom; | ||
| private cleanupTimer?; | ||
| private maxFromEntries; | ||
| private maxTargetsPerFrom; | ||
| private maxRelaysPerTarget; | ||
| constructor(me: string, options?: { | ||
| routeMaxRetentionPeriod?: number; | ||
| signal?: AbortSignal; | ||
| maxFromEntries?: number; | ||
| maxTargetsPerFrom?: number; | ||
| maxRelaysPerTarget?: number; | ||
| }); | ||
| clear(): void; | ||
| private requestCleanup; | ||
| private pruneFromMaps; | ||
| private pruneTargets; | ||
| private cleanup; | ||
@@ -38,2 +51,4 @@ add(from: string, neighbour: string, target: string, distance: number, session: number, remoteSession: number): "new" | "updated" | "restart"; | ||
| findNeighbor(from: string, target: string): RouteInfo; | ||
| getRouteHints(from: string, target: string): DirectStreamAckRouteHint[]; | ||
| getBestRouteHint(from: string, target: string): DirectStreamAckRouteHint | undefined; | ||
| isReachable(from: string, target: string, maxDistance?: number): boolean; | ||
@@ -40,0 +55,0 @@ hasTarget(target: string): boolean; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/routes.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAE9D,KAAK,SAAS,GAAG;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,KAAK,SAAS,GAAG;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,EAAE,CAAC;CAClB,CAAC;AAoBF,qBAAa,MAAM;IAajB,QAAQ,CAAC,EAAE,EAAE,MAAM;IAXpB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAa;IAExD,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAa;IAI1D,uBAAuB,EAAE,MAAM,CAAC;IAEhC,MAAM,CAAC,EAAE,WAAW,CAAC;gBAGX,EAAE,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,uBAAuB,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE;IAOrE,KAAK;IAIL,OAAO,CAAC,OAAO;IA2Bf,GAAG,CACF,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACnB,KAAK,GAAG,SAAS,GAAG,SAAS;IAiHhC;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM;IAqCrB,eAAe,CAAC,SAAS,EAAE,MAAM;IAYjC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAIzC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,SAAqB;IA4B1E,SAAS,CAAC,MAAM,EAAE,MAAM;IASxB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IA6B9C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI9C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS;IAK3C,YAAY,CAAC,IAAI,EAAE,MAAM;IA6BzB,KAAK,CAAC,IAAI,SAAU;IAcpB,QAAQ;IAWR,SAAS,CACR,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EAAE,EACb,UAAU,EAAE,MAAM,GAChB,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,GAAG,SAAS;IAwF1E;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAmB3C"} | ||
| {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/routes.ts"],"names":[],"mappings":"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"} |
+135
-16
@@ -1,3 +0,5 @@ | ||
| import { AbortError, delay } from "@peerbit/time"; | ||
| export const MAX_ROUTE_DISTANCE = Number.MAX_SAFE_INTEGER - 1; | ||
| const DEFAULT_MAX_FROM_ENTRIES = 2048; | ||
| const DEFAULT_MAX_TARGETS_PER_FROM = 10_000; | ||
| const DEFAULT_MAX_RELAYS_PER_TARGET = 32; | ||
| const sortRoutes = (routes) => { | ||
@@ -28,2 +30,7 @@ // sort by distance, if same distance make the routes without expire time first | ||
| signal; | ||
| pendingCleanupByFrom = new Map(); | ||
| cleanupTimer; | ||
| maxFromEntries; | ||
| maxTargetsPerFrom; | ||
| maxRelaysPerTarget; | ||
| constructor(me, options) { | ||
@@ -34,6 +41,73 @@ this.me = me; | ||
| this.signal = options?.signal; | ||
| this.maxFromEntries = Math.max(1, Math.floor(options?.maxFromEntries ?? DEFAULT_MAX_FROM_ENTRIES)); | ||
| this.maxTargetsPerFrom = Math.max(1, Math.floor(options?.maxTargetsPerFrom ?? DEFAULT_MAX_TARGETS_PER_FROM)); | ||
| this.maxRelaysPerTarget = Math.max(1, Math.floor(options?.maxRelaysPerTarget ?? DEFAULT_MAX_RELAYS_PER_TARGET)); | ||
| } | ||
| clear() { | ||
| this.routes.clear(); | ||
| this.pendingCleanupByFrom.clear(); | ||
| if (this.cleanupTimer) | ||
| clearTimeout(this.cleanupTimer); | ||
| this.cleanupTimer = undefined; | ||
| } | ||
| requestCleanup(from, to) { | ||
| if (this.signal?.aborted) | ||
| return; | ||
| let targets = this.pendingCleanupByFrom.get(from); | ||
| if (!targets) { | ||
| targets = new Set(); | ||
| this.pendingCleanupByFrom.set(from, targets); | ||
| } | ||
| targets.add(to); | ||
| // Coalesce cleanups into a single timer. The previous per-update timer approach | ||
| // scales poorly in large networks and can OOM in single-process simulations. | ||
| if (this.cleanupTimer) | ||
| return; | ||
| this.cleanupTimer = setTimeout(() => { | ||
| this.cleanupTimer = undefined; | ||
| const pending = this.pendingCleanupByFrom; | ||
| this.pendingCleanupByFrom = new Map(); | ||
| for (const [fromKey, tos] of pending) { | ||
| for (const toKey of tos) { | ||
| this.cleanup(fromKey, toKey); | ||
| } | ||
| } | ||
| }, this.routeMaxRetentionPeriod + 100); | ||
| } | ||
| pruneFromMaps() { | ||
| if (this.routes.size <= this.maxFromEntries) | ||
| return; | ||
| // Keep `me` pinned: local routes are used for pruning decisions and should be | ||
| // the last thing we evict under memory pressure. | ||
| while (this.routes.size > this.maxFromEntries) { | ||
| const oldest = this.routes.keys().next().value; | ||
| if (!oldest) | ||
| return; | ||
| if (oldest === this.me) { | ||
| const selfMap = this.routes.get(oldest); | ||
| if (!selfMap) { | ||
| this.routes.delete(oldest); | ||
| continue; | ||
| } | ||
| // Move to the end (most recently used) and continue eviction. | ||
| this.routes.delete(oldest); | ||
| this.routes.set(oldest, selfMap); | ||
| continue; | ||
| } | ||
| this.routes.delete(oldest); | ||
| } | ||
| } | ||
| pruneTargets(from, fromMap) { | ||
| if (fromMap.size <= this.maxTargetsPerFrom) | ||
| return; | ||
| while (fromMap.size > this.maxTargetsPerFrom) { | ||
| const oldestTarget = fromMap.keys().next().value; | ||
| if (!oldestTarget) | ||
| break; | ||
| fromMap.delete(oldestTarget); | ||
| } | ||
| if (fromMap.size === 0) { | ||
| this.routes.delete(from); | ||
| } | ||
| } | ||
| cleanup(from, to) { | ||
@@ -55,2 +129,5 @@ const fromMap = this.routes.get(from); | ||
| } | ||
| if (keepRoutes.length > this.maxRelaysPerTarget) { | ||
| keepRoutes.length = this.maxRelaysPerTarget; | ||
| } | ||
| if (keepRoutes.length > 0) { | ||
@@ -74,2 +151,7 @@ map.list = keepRoutes; | ||
| } | ||
| else { | ||
| // LRU-touch the `from` map. | ||
| this.routes.delete(from); | ||
| this.routes.set(from, fromMap); | ||
| } | ||
| let prev = fromMap.get(target); | ||
@@ -83,2 +165,7 @@ const routeDidExist = prev; | ||
| } | ||
| else { | ||
| // LRU-touch the target entry. | ||
| fromMap.delete(target); | ||
| fromMap.set(target, prev); | ||
| } | ||
| const isRelayed = from !== this.me; | ||
@@ -100,15 +187,2 @@ const targetIsNeighbour = neighbour === target; | ||
| prev.session = Math.max(session, prev.session); | ||
| const scheduleCleanup = () => { | ||
| return delay(this.routeMaxRetentionPeriod + 100, { signal: this.signal }) | ||
| .then(() => { | ||
| this.cleanup(from, target); | ||
| }) | ||
| .catch((e) => { | ||
| if (e instanceof AbortError) { | ||
| // skip | ||
| return; | ||
| } | ||
| throw e; | ||
| }); | ||
| }; | ||
| // Update routes and cleanup all old routes that are older than latest session - some threshold | ||
@@ -128,7 +202,7 @@ if (isNewSession) { | ||
| if (distance !== -1 && foundNodeToExpire) { | ||
| scheduleCleanup(); | ||
| this.requestCleanup(from, target); | ||
| } | ||
| } | ||
| else if (isOldSession) { | ||
| scheduleCleanup(); | ||
| this.requestCleanup(from, target); | ||
| } | ||
@@ -144,4 +218,10 @@ // Modify list for new/update route | ||
| route.session = session; | ||
| route.updatedAt = +new Date(); | ||
| route.expireAt = undefined; // remove expiry since we updated | ||
| sortRoutes(prev.list); | ||
| if (prev.list.length > this.maxRelaysPerTarget) { | ||
| prev.list.length = this.maxRelaysPerTarget; | ||
| } | ||
| this.pruneTargets(from, fromMap); | ||
| this.pruneFromMaps(); | ||
| return isNewRemoteSession ? "restart" : "updated"; | ||
@@ -151,3 +231,9 @@ } | ||
| route.session = session; | ||
| route.updatedAt = +new Date(); | ||
| route.expireAt = undefined; // remove expiry since we updated | ||
| if (prev.list.length > this.maxRelaysPerTarget) { | ||
| prev.list.length = this.maxRelaysPerTarget; | ||
| } | ||
| this.pruneTargets(from, fromMap); | ||
| this.pruneFromMaps(); | ||
| return isNewRemoteSession ? "restart" : "updated"; | ||
@@ -168,2 +254,3 @@ } | ||
| hash: neighbour, | ||
| updatedAt: +new Date(), | ||
| expireAt: isOldSession | ||
@@ -174,3 +261,8 @@ ? +new Date() + this.routeMaxRetentionPeriod | ||
| sortRoutes(prev.list); | ||
| if (prev.list.length > this.maxRelaysPerTarget) { | ||
| prev.list.length = this.maxRelaysPerTarget; | ||
| } | ||
| } | ||
| this.pruneTargets(from, fromMap); | ||
| this.pruneFromMaps(); | ||
| return exist ? (isNewRemoteSession ? "restart" : "updated") : "new"; | ||
@@ -229,2 +321,29 @@ } | ||
| } | ||
| getRouteHints(from, target) { | ||
| const route = this.routes.get(from)?.get(target); | ||
| if (!route) { | ||
| return []; | ||
| } | ||
| const now = Date.now(); | ||
| const out = []; | ||
| for (const next of route.list) { | ||
| if (next.expireAt != null && next.expireAt < now) { | ||
| continue; | ||
| } | ||
| out.push({ | ||
| kind: "directstream-ack", | ||
| from, | ||
| target, | ||
| nextHop: next.hash, | ||
| distance: next.distance, | ||
| session: next.session, | ||
| updatedAt: next.updatedAt, | ||
| expiresAt: next.expireAt, | ||
| }); | ||
| } | ||
| return out; | ||
| } | ||
| getBestRouteHint(from, target) { | ||
| return this.getRouteHints(from, target)[0]; | ||
| } | ||
| isReachable(from, target, maxDistance = MAX_ROUTE_DISTANCE) { | ||
@@ -231,0 +350,0 @@ const remoteInfo = this.remoteInfo.get(target); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/routes.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/routes.ts"],"names":[],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"wait-for-event.d.ts","sourceRoot":"","sources":["../../src/wait-for-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAe,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAEvD,wBAAgB,YAAY,CAC3B,OAAO,SAAS,iBAAiB,CAAC,MAAM,CAAC,EACzC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,SAAS,iBAAiB,CACrE,MAAM,CAAC,CACP,GACE,CAAC,GACD,KAAK,EACR,KAAK,SAAS,MAAM,MAAM,GAAG,MAAM,MAAM,EAEzC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,KAAK,EAAE,EACf,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACnE,OAAO,CAAC,EAAE;IACT,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GACC,OAAO,CAAC,IAAI,CAAC,CAuDf"} | ||
| {"version":3,"file":"wait-for-event.d.ts","sourceRoot":"","sources":["../../src/wait-for-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAe,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAEvD,wBAAgB,YAAY,CAC3B,OAAO,SAAS,iBAAiB,CAAC,MAAM,CAAC,EACzC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,SAAS,iBAAiB,CACrE,MAAM,CAAC,CACP,GACE,CAAC,GACD,KAAK,EACR,KAAK,SAAS,MAAM,MAAM,GAAG,MAAM,MAAM,EAEzC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,KAAK,EAAE,EACf,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACnE,OAAO,CAAC,EAAE;IACT,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GACC,OAAO,CAAC,IAAI,CAAC,CAoEf"} |
| import { AbortError, TimeoutError } from "@peerbit/time"; | ||
| import pDefer, {} from "p-defer"; | ||
| export function waitForEvent(emitter, events, resolver, options) { | ||
| const traceEnabled = globalThis?.process?.env?.PEERBIT_WAITFOREVENT_TRACE === "1"; | ||
| const callsite = traceEnabled ? new Error("waitForEvent callsite").stack : undefined; | ||
| const deferred = pDefer(); | ||
@@ -17,3 +19,4 @@ const abortFn = (e) => { | ||
| let timeout = undefined; | ||
| deferred.promise.finally(() => { | ||
| void deferred.promise | ||
| .finally(() => { | ||
| for (const event of events) { | ||
@@ -24,3 +27,5 @@ emitter.removeEventListener(event, checkIsReady); | ||
| options?.signals?.forEach((signal) => signal.removeEventListener("abort", abortFn)); | ||
| }); | ||
| }) | ||
| // Avoid triggering an unhandled rejection from the `.finally()` return promise. | ||
| .catch(() => { }); | ||
| const abortedSignal = options?.signals?.find((signal) => signal.aborted); | ||
@@ -36,3 +41,9 @@ if (abortedSignal) { | ||
| } | ||
| timeout = setTimeout(() => abortFn(new TimeoutError("Timeout waiting for event")), options?.timeout ?? 10 * 1000); | ||
| timeout = setTimeout(() => { | ||
| const err = new TimeoutError("Timeout waiting for event"); | ||
| if (callsite && err.stack) { | ||
| err.stack += `\n\n${callsite}`; | ||
| } | ||
| abortFn(err); | ||
| }, options?.timeout ?? 10 * 1000); | ||
| options?.signals?.forEach((signal) => signal.addEventListener("abort", abortFn)); | ||
@@ -39,0 +50,0 @@ resolver(deferred); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"wait-for-event.js","sourceRoot":"","sources":["../../src/wait-for-event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,MAAM,EAAE,EAAwB,MAAM,SAAS,CAAC;AAEvD,MAAM,UAAU,YAAY,CAS3B,OAAgB,EAChB,MAAe,EACf,QAAmE,EACnE,OAGC;IAED,MAAM,QAAQ,GAAG,MAAM,EAAQ,CAAC;IAChC,MAAM,OAAO,GAAG,CAAC,CAAW,EAAE,EAAE;QAC/B,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;YACxB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACnB,OAAO;QACR,CAAC;QAED,MAAM,MAAM,GAAI,CAAS,EAAE,MAAM,EAAE,MAAM,CAAC;QAC1C,QAAQ,CAAC,MAAM,CACd,MAAM;YACL,IAAI,UAAU,CACb,6BAA6B;gBAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAC1D,CACF,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,OAAO,GAA8C,SAAS,CAAC;IAEnE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;QAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,OAAO,CAAC,mBAAmB,CAAC,KAAY,EAAE,YAAmB,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACpC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzE,IAAI,aAAa,EAAE,CAAC;QACnB,QAAQ,CAAC,MAAM,CACd,aAAa,CAAC,MAAM;YACnB,IAAI,UAAU,CACb,6BAA6B;gBAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAC1D,CACF,CAAC;QACF,OAAO,QAAQ,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,OAAO,CAAC,gBAAgB,CAAC,KAAY,EAAE,YAAmB,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,GAAG,UAAU,CACnB,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,2BAA2B,CAAC,CAAC,EAC5D,OAAO,EAAE,OAAO,IAAI,EAAE,GAAG,IAAI,CAC7B,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACpC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CACzC,CAAC;IACD,QAAgB,CAAC,QAAQ,CAAC,CAAC;IAC5B,OAAO,QAAQ,CAAC,OAAO,CAAC;AACzB,CAAC"} | ||
| {"version":3,"file":"wait-for-event.js","sourceRoot":"","sources":["../../src/wait-for-event.ts"],"names":[],"mappings":"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"} |
+8
-8
| { | ||
| "name": "@peerbit/stream", | ||
| "version": "4.6.0-91f84d0", | ||
| "version": "4.6.0-9b39434", | ||
| "description": "A building block for direct streaming protocols", | ||
@@ -72,3 +72,3 @@ "sideEffects": false, | ||
| "devDependencies": { | ||
| "@peerbit/libp2p-test-utils": "2.2.0-91f84d0", | ||
| "@peerbit/libp2p-test-utils": "2.2.0-9b39434", | ||
| "@types/fast-fifo": "^1.0.2", | ||
@@ -102,10 +102,10 @@ "@types/sinon": "^10.0.20", | ||
| "yallist": "^5.0.0", | ||
| "@peerbit/cache": "2.2.0-91f84d0", | ||
| "@peerbit/crypto": "2.4.1-91f84d0", | ||
| "@peerbit/logger": "2.0.0-91f84d0", | ||
| "@peerbit/stream-interface": "5.4.0-91f84d0", | ||
| "@peerbit/time": "2.3.0-91f84d0" | ||
| "@peerbit/cache": "2.2.0-9b39434", | ||
| "@peerbit/crypto": "2.4.1-9b39434", | ||
| "@peerbit/logger": "2.0.0-9b39434", | ||
| "@peerbit/stream-interface": "5.4.0-9b39434", | ||
| "@peerbit/time": "2.3.0-9b39434" | ||
| }, | ||
| "scripts": { | ||
| "bench": "node --loader ts-node/esm ./benchmark/index.ts", | ||
| "bench": "TS_NODE_PROJECT=../../../tsconfig.json node --loader ts-node/esm ./benchmark/index.ts", | ||
| "clean": "aegir clean", | ||
@@ -112,0 +112,0 @@ "build": "aegir build --no-bundle", |
+158
-18
@@ -1,8 +0,13 @@ | ||
| import { AbortError, delay } from "@peerbit/time"; | ||
| import type { DirectStreamAckRouteHint } from "@peerbit/stream-interface"; | ||
| export const MAX_ROUTE_DISTANCE = Number.MAX_SAFE_INTEGER - 1; | ||
| const DEFAULT_MAX_FROM_ENTRIES = 2048; | ||
| const DEFAULT_MAX_TARGETS_PER_FROM = 10_000; | ||
| const DEFAULT_MAX_RELAYS_PER_TARGET = 32; | ||
| type RelayInfo = { | ||
| session: number; | ||
| hash: string; | ||
| updatedAt: number; | ||
| expireAt?: number; | ||
@@ -47,5 +52,17 @@ distance: number; | ||
| private pendingCleanupByFrom: Map<string, Set<string>> = new Map(); | ||
| private cleanupTimer?: ReturnType<typeof setTimeout>; | ||
| private maxFromEntries: number; | ||
| private maxTargetsPerFrom: number; | ||
| private maxRelaysPerTarget: number; | ||
| constructor( | ||
| readonly me: string, | ||
| options?: { routeMaxRetentionPeriod?: number; signal?: AbortSignal }, | ||
| options?: { | ||
| routeMaxRetentionPeriod?: number; | ||
| signal?: AbortSignal; | ||
| maxFromEntries?: number; | ||
| maxTargetsPerFrom?: number; | ||
| maxRelaysPerTarget?: number; | ||
| }, | ||
| ) { | ||
@@ -55,2 +72,14 @@ this.routeMaxRetentionPeriod = | ||
| this.signal = options?.signal; | ||
| this.maxFromEntries = Math.max( | ||
| 1, | ||
| Math.floor(options?.maxFromEntries ?? DEFAULT_MAX_FROM_ENTRIES), | ||
| ); | ||
| this.maxTargetsPerFrom = Math.max( | ||
| 1, | ||
| Math.floor(options?.maxTargetsPerFrom ?? DEFAULT_MAX_TARGETS_PER_FROM), | ||
| ); | ||
| this.maxRelaysPerTarget = Math.max( | ||
| 1, | ||
| Math.floor(options?.maxRelaysPerTarget ?? DEFAULT_MAX_RELAYS_PER_TARGET), | ||
| ); | ||
| } | ||
@@ -60,4 +89,66 @@ | ||
| this.routes.clear(); | ||
| this.pendingCleanupByFrom.clear(); | ||
| if (this.cleanupTimer) clearTimeout(this.cleanupTimer); | ||
| this.cleanupTimer = undefined; | ||
| } | ||
| private requestCleanup(from: string, to: string) { | ||
| if (this.signal?.aborted) return; | ||
| let targets = this.pendingCleanupByFrom.get(from); | ||
| if (!targets) { | ||
| targets = new Set<string>(); | ||
| this.pendingCleanupByFrom.set(from, targets); | ||
| } | ||
| targets.add(to); | ||
| // Coalesce cleanups into a single timer. The previous per-update timer approach | ||
| // scales poorly in large networks and can OOM in single-process simulations. | ||
| if (this.cleanupTimer) return; | ||
| this.cleanupTimer = setTimeout(() => { | ||
| this.cleanupTimer = undefined; | ||
| const pending = this.pendingCleanupByFrom; | ||
| this.pendingCleanupByFrom = new Map(); | ||
| for (const [fromKey, tos] of pending) { | ||
| for (const toKey of tos) { | ||
| this.cleanup(fromKey, toKey); | ||
| } | ||
| } | ||
| }, this.routeMaxRetentionPeriod + 100); | ||
| } | ||
| private pruneFromMaps() { | ||
| if (this.routes.size <= this.maxFromEntries) return; | ||
| // Keep `me` pinned: local routes are used for pruning decisions and should be | ||
| // the last thing we evict under memory pressure. | ||
| while (this.routes.size > this.maxFromEntries) { | ||
| const oldest = this.routes.keys().next().value as string | undefined; | ||
| if (!oldest) return; | ||
| if (oldest === this.me) { | ||
| const selfMap = this.routes.get(oldest); | ||
| if (!selfMap) { | ||
| this.routes.delete(oldest); | ||
| continue; | ||
| } | ||
| // Move to the end (most recently used) and continue eviction. | ||
| this.routes.delete(oldest); | ||
| this.routes.set(oldest, selfMap); | ||
| continue; | ||
| } | ||
| this.routes.delete(oldest); | ||
| } | ||
| } | ||
| private pruneTargets(from: string, fromMap: Map<string, RouteInfo>) { | ||
| if (fromMap.size <= this.maxTargetsPerFrom) return; | ||
| while (fromMap.size > this.maxTargetsPerFrom) { | ||
| const oldestTarget = fromMap.keys().next().value as string | undefined; | ||
| if (!oldestTarget) break; | ||
| fromMap.delete(oldestTarget); | ||
| } | ||
| if (fromMap.size === 0) { | ||
| this.routes.delete(from); | ||
| } | ||
| } | ||
| private cleanup(from: string, to: string) { | ||
@@ -79,2 +170,6 @@ const fromMap = this.routes.get(from); | ||
| if (keepRoutes.length > this.maxRelaysPerTarget) { | ||
| keepRoutes.length = this.maxRelaysPerTarget; | ||
| } | ||
| if (keepRoutes.length > 0) { | ||
@@ -103,2 +198,6 @@ map.list = keepRoutes; | ||
| this.routes.set(from, fromMap); | ||
| } else { | ||
| // LRU-touch the `from` map. | ||
| this.routes.delete(from); | ||
| this.routes.set(from, fromMap); | ||
| } | ||
@@ -114,2 +213,6 @@ | ||
| fromMap.set(target, prev); | ||
| } else { | ||
| // LRU-touch the target entry. | ||
| fromMap.delete(target); | ||
| fromMap.set(target, prev); | ||
| } | ||
@@ -136,16 +239,2 @@ | ||
| const scheduleCleanup = () => { | ||
| return delay(this.routeMaxRetentionPeriod + 100, { signal: this.signal }) | ||
| .then(() => { | ||
| this.cleanup(from, target); | ||
| }) | ||
| .catch((e) => { | ||
| if (e instanceof AbortError) { | ||
| // skip | ||
| return; | ||
| } | ||
| throw e; | ||
| }); | ||
| }; | ||
| // Update routes and cleanup all old routes that are older than latest session - some threshold | ||
@@ -166,6 +255,6 @@ if (isNewSession) { | ||
| if (distance !== -1 && foundNodeToExpire) { | ||
| scheduleCleanup(); | ||
| this.requestCleanup(from, target); | ||
| } | ||
| } else if (isOldSession) { | ||
| scheduleCleanup(); | ||
| this.requestCleanup(from, target); | ||
| } | ||
@@ -182,8 +271,20 @@ | ||
| route.session = session; | ||
| route.updatedAt = +new Date(); | ||
| route.expireAt = undefined; // remove expiry since we updated | ||
| sortRoutes(prev.list); | ||
| if (prev.list.length > this.maxRelaysPerTarget) { | ||
| prev.list.length = this.maxRelaysPerTarget; | ||
| } | ||
| this.pruneTargets(from, fromMap); | ||
| this.pruneFromMaps(); | ||
| return isNewRemoteSession ? "restart" : "updated"; | ||
| } else if (route.distance === distance) { | ||
| route.session = session; | ||
| route.updatedAt = +new Date(); | ||
| route.expireAt = undefined; // remove expiry since we updated | ||
| if (prev.list.length > this.maxRelaysPerTarget) { | ||
| prev.list.length = this.maxRelaysPerTarget; | ||
| } | ||
| this.pruneTargets(from, fromMap); | ||
| this.pruneFromMaps(); | ||
| return isNewRemoteSession ? "restart" : "updated"; | ||
@@ -206,2 +307,3 @@ } | ||
| hash: neighbour, | ||
| updatedAt: +new Date(), | ||
| expireAt: isOldSession | ||
@@ -212,4 +314,10 @@ ? +new Date() + this.routeMaxRetentionPeriod | ||
| sortRoutes(prev.list); | ||
| if (prev.list.length > this.maxRelaysPerTarget) { | ||
| prev.list.length = this.maxRelaysPerTarget; | ||
| } | ||
| } | ||
| this.pruneTargets(from, fromMap); | ||
| this.pruneFromMaps(); | ||
| return exist ? (isNewRemoteSession ? "restart" : "updated") : "new"; | ||
@@ -276,2 +384,34 @@ } | ||
| getRouteHints(from: string, target: string): DirectStreamAckRouteHint[] { | ||
| const route = this.routes.get(from)?.get(target); | ||
| if (!route) { | ||
| return []; | ||
| } | ||
| const now = Date.now(); | ||
| const out: DirectStreamAckRouteHint[] = []; | ||
| for (const next of route.list) { | ||
| if (next.expireAt != null && next.expireAt < now) { | ||
| continue; | ||
| } | ||
| out.push({ | ||
| kind: "directstream-ack", | ||
| from, | ||
| target, | ||
| nextHop: next.hash, | ||
| distance: next.distance, | ||
| session: next.session, | ||
| updatedAt: next.updatedAt, | ||
| expiresAt: next.expireAt, | ||
| }); | ||
| } | ||
| return out; | ||
| } | ||
| getBestRouteHint( | ||
| from: string, | ||
| target: string, | ||
| ): DirectStreamAckRouteHint | undefined { | ||
| return this.getRouteHints(from, target)[0]; | ||
| } | ||
| isReachable(from: string, target: string, maxDistance = MAX_ROUTE_DISTANCE) { | ||
@@ -278,0 +418,0 @@ const remoteInfo = this.remoteInfo.get(target); |
+23
-10
@@ -22,2 +22,6 @@ import type { TypedEventEmitter } from "@libp2p/interface"; | ||
| ): Promise<void> { | ||
| const traceEnabled = | ||
| (globalThis as any)?.process?.env?.PEERBIT_WAITFOREVENT_TRACE === "1"; | ||
| const callsite = traceEnabled ? new Error("waitForEvent callsite").stack : undefined; | ||
| const deferred = pDefer<void>(); | ||
@@ -43,11 +47,14 @@ const abortFn = (e?: unknown) => { | ||
| deferred.promise.finally(() => { | ||
| for (const event of events) { | ||
| emitter.removeEventListener(event as any, checkIsReady as any); | ||
| } | ||
| timeout && clearTimeout(timeout); | ||
| options?.signals?.forEach((signal) => | ||
| signal.removeEventListener("abort", abortFn), | ||
| ); | ||
| }); | ||
| void deferred.promise | ||
| .finally(() => { | ||
| for (const event of events) { | ||
| emitter.removeEventListener(event as any, checkIsReady as any); | ||
| } | ||
| timeout && clearTimeout(timeout); | ||
| options?.signals?.forEach((signal) => | ||
| signal.removeEventListener("abort", abortFn), | ||
| ); | ||
| }) | ||
| // Avoid triggering an unhandled rejection from the `.finally()` return promise. | ||
| .catch(() => {}); | ||
@@ -70,3 +77,9 @@ const abortedSignal = options?.signals?.find((signal) => signal.aborted); | ||
| timeout = setTimeout( | ||
| () => abortFn(new TimeoutError("Timeout waiting for event")), | ||
| () => { | ||
| const err = new TimeoutError("Timeout waiting for event"); | ||
| if (callsite && err.stack) { | ||
| err.stack += `\n\n${callsite}`; | ||
| } | ||
| abortFn(err); | ||
| }, | ||
| options?.timeout ?? 10 * 1000, | ||
@@ -73,0 +86,0 @@ ); |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
502808
32.57%54
45.95%8979
24.33%12
-7.69%+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
Updated
Updated