@peerbit/pubsub 4.1.4 → 5.0.0-b712c6b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -20
- package/dist/benchmark/fanout-tree-sim-lib.d.ts +201 -0
- package/dist/benchmark/fanout-tree-sim-lib.d.ts.map +1 -0
- package/dist/benchmark/fanout-tree-sim-lib.js +1225 -0
- package/dist/benchmark/fanout-tree-sim-lib.js.map +1 -0
- package/dist/benchmark/fanout-tree-sim.d.ts +11 -0
- package/dist/benchmark/fanout-tree-sim.d.ts.map +1 -0
- package/dist/benchmark/fanout-tree-sim.js +521 -0
- package/dist/benchmark/fanout-tree-sim.js.map +1 -0
- package/dist/benchmark/index.d.ts +6 -0
- package/dist/benchmark/index.d.ts.map +1 -1
- package/dist/benchmark/index.js +38 -80
- package/dist/benchmark/index.js.map +1 -1
- package/dist/benchmark/pubsub-topic-sim-lib.d.ts +82 -0
- package/dist/benchmark/pubsub-topic-sim-lib.d.ts.map +1 -0
- package/dist/benchmark/pubsub-topic-sim-lib.js +625 -0
- package/dist/benchmark/pubsub-topic-sim-lib.js.map +1 -0
- package/dist/benchmark/pubsub-topic-sim.d.ts +9 -0
- package/dist/benchmark/pubsub-topic-sim.d.ts.map +1 -0
- package/dist/benchmark/pubsub-topic-sim.js +116 -0
- package/dist/benchmark/pubsub-topic-sim.js.map +1 -0
- package/dist/benchmark/sim/bench-utils.d.ts +25 -0
- package/dist/benchmark/sim/bench-utils.d.ts.map +1 -0
- package/dist/benchmark/sim/bench-utils.js +141 -0
- package/dist/benchmark/sim/bench-utils.js.map +1 -0
- package/dist/src/fanout-channel.d.ts +62 -0
- package/dist/src/fanout-channel.d.ts.map +1 -0
- package/dist/src/fanout-channel.js +114 -0
- package/dist/src/fanout-channel.js.map +1 -0
- package/dist/src/fanout-tree.d.ts +551 -0
- package/dist/src/fanout-tree.d.ts.map +1 -0
- package/dist/src/fanout-tree.js +4980 -0
- package/dist/src/fanout-tree.js.map +1 -0
- package/dist/src/index.d.ts +168 -39
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1416 -457
- package/dist/src/index.js.map +1 -1
- package/dist/src/topic-root-control-plane.d.ts +43 -0
- package/dist/src/topic-root-control-plane.d.ts.map +1 -0
- package/dist/src/topic-root-control-plane.js +120 -0
- package/dist/src/topic-root-control-plane.js.map +1 -0
- package/package.json +11 -10
- package/src/fanout-channel.ts +150 -0
- package/src/fanout-tree.ts +6346 -0
- package/src/index.ts +1693 -591
- package/src/topic-root-control-plane.ts +160 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fanout-tree-sim-lib.js","sourceRoot":"","sources":["../../benchmark/fanout-tree-sim-lib.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* End-to-end FanoutTree simulator (real protocol + real @peerbit/stream).
|
|
3
|
+
*
|
|
4
|
+
* This is meant to validate that:
|
|
5
|
+
* - join works via bootstrap trackers (announce/query + dial + join),
|
|
6
|
+
* - the data plane scales with bounded per-node fanout (tree),
|
|
7
|
+
* - pull repair does not explode (when enabled),
|
|
8
|
+
* without using real sockets/crypto.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=fanout-tree-sim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fanout-tree-sim.d.ts","sourceRoot":"","sources":["../../benchmark/fanout-tree-sim.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,521 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* End-to-end FanoutTree simulator (real protocol + real @peerbit/stream).
|
|
3
|
+
*
|
|
4
|
+
* This is meant to validate that:
|
|
5
|
+
* - join works via bootstrap trackers (announce/query + dial + join),
|
|
6
|
+
* - the data plane scales with bounded per-node fanout (tree),
|
|
7
|
+
* - pull repair does not explode (when enabled),
|
|
8
|
+
* without using real sockets/crypto.
|
|
9
|
+
*/
|
|
10
|
+
import { formatFanoutTreeSimResult, resolveFanoutTreeSimParams, runFanoutTreeSim, } from "./fanout-tree-sim-lib.js";
|
|
11
|
+
const HELP_TEXT = [
|
|
12
|
+
"fanout-tree-sim.ts",
|
|
13
|
+
"",
|
|
14
|
+
"Args:",
|
|
15
|
+
" --preset NAME preset workload (live|reliable|scale-5k|scale-10k|ci-small|ci-loss)",
|
|
16
|
+
" --nodes N total nodes (default: 2000)",
|
|
17
|
+
" --rootIndex I root/publisher node index (default: 0)",
|
|
18
|
+
" --bootstraps N bootstrap tracker nodes (default: 1)",
|
|
19
|
+
" --bootstrapMaxPeers N max bootstraps to dial/query per node (default: 0, 0=all)",
|
|
20
|
+
" --subscribers N total subscribers (default: nodes-1-bootstraps)",
|
|
21
|
+
" --relayFraction F fraction of subscribers acting as relays (default: 0.25)",
|
|
22
|
+
" --messages M messages to publish (default: 200)",
|
|
23
|
+
" --msgRate R publish rate (msg/s, default: 30)",
|
|
24
|
+
" --msgSize BYTES payload bytes (default: 1024)",
|
|
25
|
+
" --intervalMs MS override publish interval (default: 0 => derived from msgRate)",
|
|
26
|
+
" --settleMs MS wait after publish (default: 2000)",
|
|
27
|
+
" --deadlineMs MS count delivery-within-deadline (default: 0, off)",
|
|
28
|
+
" --maxDataAgeMs MS drop forwarding of stale data (default: 0, off)",
|
|
29
|
+
" --timeoutMs MS global timeout (default: 300000)",
|
|
30
|
+
" --seed S RNG seed (default: 1)",
|
|
31
|
+
" --topic NAME topic name (default: concert)",
|
|
32
|
+
" --rootUploadLimitBps BPS (default: 20000000)",
|
|
33
|
+
" --rootMaxChildren N (default: 64)",
|
|
34
|
+
" --relayUploadLimitBps BPS (default: 10000000)",
|
|
35
|
+
" --relayMaxChildren N (default: 32)",
|
|
36
|
+
" --allowKick 0|1 allow bid-based kicking when full (default: 0)",
|
|
37
|
+
" --bidPerByte N bid offered by joiners (default: 0)",
|
|
38
|
+
" --bidPerByteRelay N bid for relay joiners (default: bidPerByte)",
|
|
39
|
+
" --bidPerByteLeaf N bid for leaf joiners (default: bidPerByte)",
|
|
40
|
+
" --repair 0|1 enable pull repair (default: 1)",
|
|
41
|
+
" --repairWindowMessages N (default: 1024)",
|
|
42
|
+
" --repairMaxBackfillMessages N max missing lag to repair (-1 = same as window)",
|
|
43
|
+
" --repairIntervalMs MS (default: 200)",
|
|
44
|
+
" --repairMaxPerReq N (default: 64)",
|
|
45
|
+
" --neighborRepair 0|1 enable neighbor-assisted repair (default: 0)",
|
|
46
|
+
" --neighborRepairPeers N extra peers to query per repair tick (default: 2)",
|
|
47
|
+
" --neighborMeshPeers N lazy repair mesh peers (-1 = FanoutTree default)",
|
|
48
|
+
" --neighborAnnounceIntervalMs MS IHAVE announce interval (-1 = FanoutTree default)",
|
|
49
|
+
" --neighborMeshRefreshIntervalMs MS mesh refresh interval (-1 = FanoutTree default)",
|
|
50
|
+
" --neighborHaveTtlMs MS IHAVE TTL when selecting fetch targets (-1 = FanoutTree default)",
|
|
51
|
+
" --neighborRepairBudgetBps BPS budget for neighbor FETCH_REQ control traffic (-1 = FanoutTree default)",
|
|
52
|
+
" --neighborRepairBurstMs MS burst window for neighbor FETCH_REQ budget (-1 = FanoutTree default)",
|
|
53
|
+
" --dialDelayMs MS artificial dial delay (default: 0)",
|
|
54
|
+
" --streamRxDelayMs MS per-chunk inbound delay in shim (default: 0)",
|
|
55
|
+
" --streamHighWaterMarkBytes B backpressure threshold (default: 262144)",
|
|
56
|
+
" --joinConcurrency N parallel join tasks (default: 256)",
|
|
57
|
+
" --joinPhases 0|1 join relays first, then leaves (default: 0)",
|
|
58
|
+
" --joinPhaseSettleMs MS wait between join phases (default: 2000)",
|
|
59
|
+
" --joinReqTimeoutMs MS join request timeout per candidate (default: 2000)",
|
|
60
|
+
" --candidateShuffleTopK N shuffle only within top K candidates (default: 8)",
|
|
61
|
+
" --candidateScoringMode MODE join scoring (ranked-shuffle|ranked-strict|weighted, default: ranked-shuffle)",
|
|
62
|
+
" --bootstrapEnsureIntervalMs MS min interval between bootstrap re-dials (-1 = FanoutTree default)",
|
|
63
|
+
" --trackerQueryIntervalMs MS min interval between tracker queries (-1 = FanoutTree default)",
|
|
64
|
+
" --joinAttemptsPerRound N max join candidates tried per retry round (-1 = FanoutTree default)",
|
|
65
|
+
" --candidateCooldownMs MS cooldown applied to bad join candidates (-1 = FanoutTree default)",
|
|
66
|
+
" --maxLatencySamples N reservoir sample size (default: 1000000)",
|
|
67
|
+
" --profile 0|1 collect CPU/mem/event-loop delay stats (default: 0)",
|
|
68
|
+
" --progress 0|1 log join progress + memory stats (default: 0)",
|
|
69
|
+
" --progressEveryMs MS progress log interval (default: 5000)",
|
|
70
|
+
" --dropDataFrameRate P drop rate for stream data frames (default: 0)",
|
|
71
|
+
" --churnEveryMs MS churn interval (default: 0, off)",
|
|
72
|
+
" --churnDownMs MS offline duration per churn (default: 0, off)",
|
|
73
|
+
" --churnFraction F fraction to churn per event (default: 0, off)",
|
|
74
|
+
" --assertMinJoinedPct PCT (default: 0)",
|
|
75
|
+
" --assertMinDeliveryPct PCT (default: 0)",
|
|
76
|
+
" --assertMinDeadlineDeliveryPct PCT (default: 0)",
|
|
77
|
+
" --assertMaxUploadFracPct PCT max peak upload vs cap (default: 0, off)",
|
|
78
|
+
" --assertMaxOverheadFactor X max data overhead factor vs ideal tree (default: 0, off)",
|
|
79
|
+
" --assertMaxControlBpp X max control bytes per payload byte delivered (default: 0, off)",
|
|
80
|
+
" --assertMaxTrackerBpp X max tracker bytes per payload byte delivered (default: 0, off)",
|
|
81
|
+
" --assertMaxRepairBpp X max repair bytes per payload byte delivered (default: 0, off)",
|
|
82
|
+
" --assertAttachP95Ms MS max p95 time-to-attach since join start (default: 0, off)",
|
|
83
|
+
" --assertMaxTreeLevelP95 N max p95 tree depth/level (default: 0, off)",
|
|
84
|
+
" --assertMaxFormationScore X max formationScore (default: 0, off)",
|
|
85
|
+
" --assertMaxOrphans N max online orphans during publish+settle (default: 0, off)",
|
|
86
|
+
" --assertMaxOrphanArea S max orphan-area (orphan-seconds) during publish+settle (default: 0, off)",
|
|
87
|
+
" --assertRecoveryP95Ms MS max p95 recovery time after churn (default: 0, off)",
|
|
88
|
+
" --assertMaxReparentsPerMin N max reparent events per minute (default: 0, off)",
|
|
89
|
+
"",
|
|
90
|
+
"Example:",
|
|
91
|
+
" pnpm -C packages/transport/pubsub run bench -- fanout-tree-sim --preset live --nodes 2000 --bootstraps 1 --seed 1",
|
|
92
|
+
].join("\n");
|
|
93
|
+
const PRESET_OPTIONS = {
|
|
94
|
+
live: {
|
|
95
|
+
bootstraps: 3,
|
|
96
|
+
bootstrapMaxPeers: 1,
|
|
97
|
+
msgRate: 30,
|
|
98
|
+
msgSize: 1024,
|
|
99
|
+
messages: 30 * 60,
|
|
100
|
+
settleMs: 2_000,
|
|
101
|
+
deadlineMs: 2_000,
|
|
102
|
+
allowKick: true,
|
|
103
|
+
bidPerByteRelay: 1,
|
|
104
|
+
bidPerByteLeaf: 0,
|
|
105
|
+
joinPhases: true,
|
|
106
|
+
joinPhaseSettleMs: 2_000,
|
|
107
|
+
repair: true,
|
|
108
|
+
repairMaxBackfillMessages: 60,
|
|
109
|
+
neighborRepair: true,
|
|
110
|
+
neighborRepairPeers: 3,
|
|
111
|
+
dropDataFrameRate: 0.01,
|
|
112
|
+
churnEveryMs: 2_000,
|
|
113
|
+
churnDownMs: 1_000,
|
|
114
|
+
churnFraction: 0.005,
|
|
115
|
+
},
|
|
116
|
+
reliable: {
|
|
117
|
+
bootstraps: 3,
|
|
118
|
+
bootstrapMaxPeers: 1,
|
|
119
|
+
msgRate: 30,
|
|
120
|
+
msgSize: 1024,
|
|
121
|
+
messages: 30 * 60,
|
|
122
|
+
settleMs: 10_000,
|
|
123
|
+
deadlineMs: 10_000,
|
|
124
|
+
allowKick: true,
|
|
125
|
+
bidPerByteRelay: 1,
|
|
126
|
+
bidPerByteLeaf: 0,
|
|
127
|
+
joinPhases: true,
|
|
128
|
+
joinPhaseSettleMs: 2_000,
|
|
129
|
+
repair: true,
|
|
130
|
+
repairMaxBackfillMessages: 1024,
|
|
131
|
+
neighborRepair: true,
|
|
132
|
+
neighborRepairPeers: 4,
|
|
133
|
+
dropDataFrameRate: 0.01,
|
|
134
|
+
churnEveryMs: 2_000,
|
|
135
|
+
churnDownMs: 1_000,
|
|
136
|
+
churnFraction: 0.005,
|
|
137
|
+
},
|
|
138
|
+
"scale-5k": {
|
|
139
|
+
nodes: 5000,
|
|
140
|
+
bootstraps: 3,
|
|
141
|
+
bootstrapMaxPeers: 1,
|
|
142
|
+
subscribers: 4800,
|
|
143
|
+
relayFraction: 0.25,
|
|
144
|
+
msgRate: 30,
|
|
145
|
+
msgSize: 1024,
|
|
146
|
+
messages: 10,
|
|
147
|
+
settleMs: 5_000,
|
|
148
|
+
deadlineMs: 10_000,
|
|
149
|
+
timeoutMs: 600_000,
|
|
150
|
+
seed: 1,
|
|
151
|
+
allowKick: true,
|
|
152
|
+
bidPerByteRelay: 1,
|
|
153
|
+
bidPerByteLeaf: 0,
|
|
154
|
+
// Avoid join storms (and excess temporary connections) in single-process sims.
|
|
155
|
+
joinConcurrency: 128,
|
|
156
|
+
joinPhases: true,
|
|
157
|
+
joinPhaseSettleMs: 2_000,
|
|
158
|
+
joinReqTimeoutMs: 1_000,
|
|
159
|
+
joinAttemptsPerRound: 2,
|
|
160
|
+
trackerQueryIntervalMs: 10_000,
|
|
161
|
+
bootstrapEnsureIntervalMs: 10_000,
|
|
162
|
+
candidateCooldownMs: 5_000,
|
|
163
|
+
repair: true,
|
|
164
|
+
repairMaxBackfillMessages: 60,
|
|
165
|
+
neighborRepair: true,
|
|
166
|
+
neighborRepairPeers: 3,
|
|
167
|
+
dropDataFrameRate: 0.01,
|
|
168
|
+
// Keep in-memory sims bounded (avoid buffering OOM at 5k+ nodes).
|
|
169
|
+
streamHighWaterMarkBytes: 8 * 1024,
|
|
170
|
+
// Bench assertions (tune as we learn; these should be achievable on a dev machine).
|
|
171
|
+
assertMinJoinedPct: 99.5,
|
|
172
|
+
assertMinDeliveryPct: 99.9,
|
|
173
|
+
assertMinDeadlineDeliveryPct: 97.0,
|
|
174
|
+
assertMaxOverheadFactor: 1.3,
|
|
175
|
+
assertMaxUploadFracPct: 110,
|
|
176
|
+
// Control-plane budgets (bytes per delivered payload byte). Tune as we learn.
|
|
177
|
+
assertMaxControlBpp: 0.5,
|
|
178
|
+
assertMaxTrackerBpp: 0.3,
|
|
179
|
+
assertMaxRepairBpp: 0.3,
|
|
180
|
+
},
|
|
181
|
+
"scale-10k": {
|
|
182
|
+
nodes: 10_000,
|
|
183
|
+
bootstraps: 3,
|
|
184
|
+
bootstrapMaxPeers: 1,
|
|
185
|
+
subscribers: 9_600,
|
|
186
|
+
relayFraction: 0.25,
|
|
187
|
+
msgRate: 30,
|
|
188
|
+
msgSize: 1024,
|
|
189
|
+
messages: 10,
|
|
190
|
+
settleMs: 5_000,
|
|
191
|
+
deadlineMs: 10_000,
|
|
192
|
+
timeoutMs: 1_200_000,
|
|
193
|
+
seed: 1,
|
|
194
|
+
allowKick: true,
|
|
195
|
+
bidPerByteRelay: 1,
|
|
196
|
+
bidPerByteLeaf: 0,
|
|
197
|
+
// Avoid join storms (and excess temporary connections) in single-process sims.
|
|
198
|
+
joinConcurrency: 192,
|
|
199
|
+
joinPhases: true,
|
|
200
|
+
joinPhaseSettleMs: 2_000,
|
|
201
|
+
joinReqTimeoutMs: 1_000,
|
|
202
|
+
joinAttemptsPerRound: 2,
|
|
203
|
+
trackerQueryIntervalMs: 10_000,
|
|
204
|
+
bootstrapEnsureIntervalMs: 10_000,
|
|
205
|
+
candidateCooldownMs: 5_000,
|
|
206
|
+
repair: true,
|
|
207
|
+
repairMaxBackfillMessages: 60,
|
|
208
|
+
neighborRepair: true,
|
|
209
|
+
neighborRepairPeers: 3,
|
|
210
|
+
dropDataFrameRate: 0.01,
|
|
211
|
+
// Keep in-memory sims bounded (avoid buffering OOM at 10k nodes).
|
|
212
|
+
streamHighWaterMarkBytes: 8 * 1024,
|
|
213
|
+
},
|
|
214
|
+
"ci-small": {
|
|
215
|
+
nodes: 25,
|
|
216
|
+
bootstraps: 3,
|
|
217
|
+
bootstrapMaxPeers: 1,
|
|
218
|
+
subscribers: 20,
|
|
219
|
+
relayFraction: 0.3,
|
|
220
|
+
messages: 20,
|
|
221
|
+
msgRate: 50,
|
|
222
|
+
msgSize: 64,
|
|
223
|
+
settleMs: 500,
|
|
224
|
+
timeoutMs: 20_000,
|
|
225
|
+
seed: 1,
|
|
226
|
+
repair: true,
|
|
227
|
+
},
|
|
228
|
+
"ci-loss": {
|
|
229
|
+
nodes: 40,
|
|
230
|
+
bootstraps: 3,
|
|
231
|
+
bootstrapMaxPeers: 1,
|
|
232
|
+
subscribers: 30,
|
|
233
|
+
relayFraction: 0.35,
|
|
234
|
+
messages: 40,
|
|
235
|
+
msgRate: 50,
|
|
236
|
+
msgSize: 64,
|
|
237
|
+
settleMs: 2_500,
|
|
238
|
+
timeoutMs: 40_000,
|
|
239
|
+
seed: 1,
|
|
240
|
+
repair: true,
|
|
241
|
+
neighborRepair: true,
|
|
242
|
+
neighborRepairPeers: 3,
|
|
243
|
+
dropDataFrameRate: 0.1,
|
|
244
|
+
churnEveryMs: 200,
|
|
245
|
+
churnDownMs: 100,
|
|
246
|
+
churnFraction: 0.05,
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
const parseNumber = (value) => Number(value);
|
|
250
|
+
const parseString = (value) => String(value);
|
|
251
|
+
const parseBool01 = (fallback) => (value) => String(value ?? fallback) === "1";
|
|
252
|
+
const ARG_SPECS = [
|
|
253
|
+
{ flag: "--nodes", key: "nodes", parse: parseNumber },
|
|
254
|
+
{ flag: "--rootIndex", key: "rootIndex", parse: parseNumber },
|
|
255
|
+
{ flag: "--bootstraps", key: "bootstraps", parse: parseNumber },
|
|
256
|
+
{ flag: "--bootstrapMaxPeers", key: "bootstrapMaxPeers", parse: parseNumber },
|
|
257
|
+
{ flag: "--subscribers", key: "subscribers", parse: parseNumber },
|
|
258
|
+
{ flag: "--relayFraction", key: "relayFraction", parse: parseNumber },
|
|
259
|
+
{ flag: "--messages", key: "messages", parse: parseNumber },
|
|
260
|
+
{ flag: "--msgRate", key: "msgRate", parse: parseNumber },
|
|
261
|
+
{ flag: "--msgSize", key: "msgSize", parse: parseNumber },
|
|
262
|
+
{ flag: "--intervalMs", key: "intervalMs", parse: parseNumber },
|
|
263
|
+
{ flag: "--settleMs", key: "settleMs", parse: parseNumber },
|
|
264
|
+
{ flag: "--deadlineMs", key: "deadlineMs", parse: parseNumber },
|
|
265
|
+
{ flag: "--maxDataAgeMs", key: "maxDataAgeMs", parse: parseNumber },
|
|
266
|
+
{ flag: "--timeoutMs", key: "timeoutMs", parse: parseNumber },
|
|
267
|
+
{ flag: "--seed", key: "seed", parse: parseNumber },
|
|
268
|
+
{ flag: "--topic", key: "topic", parse: parseString },
|
|
269
|
+
{ flag: "--rootUploadLimitBps", key: "rootUploadLimitBps", parse: parseNumber },
|
|
270
|
+
{ flag: "--rootMaxChildren", key: "rootMaxChildren", parse: parseNumber },
|
|
271
|
+
{ flag: "--relayUploadLimitBps", key: "relayUploadLimitBps", parse: parseNumber },
|
|
272
|
+
{ flag: "--relayMaxChildren", key: "relayMaxChildren", parse: parseNumber },
|
|
273
|
+
{ flag: "--allowKick", key: "allowKick", parse: parseBool01("0") },
|
|
274
|
+
{ flag: "--bidPerByte", key: "bidPerByte", parse: parseNumber },
|
|
275
|
+
{ flag: "--bidPerByteRelay", key: "bidPerByteRelay", parse: parseNumber },
|
|
276
|
+
{ flag: "--bidPerByteLeaf", key: "bidPerByteLeaf", parse: parseNumber },
|
|
277
|
+
{ flag: "--repair", key: "repair", parse: parseBool01("1") },
|
|
278
|
+
{ flag: "--repairWindowMessages", key: "repairWindowMessages", parse: parseNumber },
|
|
279
|
+
{ flag: "--repairMaxBackfillMessages", key: "repairMaxBackfillMessages", parse: parseNumber },
|
|
280
|
+
{ flag: "--repairIntervalMs", key: "repairIntervalMs", parse: parseNumber },
|
|
281
|
+
{ flag: "--repairMaxPerReq", key: "repairMaxPerReq", parse: parseNumber },
|
|
282
|
+
{ flag: "--neighborRepair", key: "neighborRepair", parse: parseBool01("0") },
|
|
283
|
+
{ flag: "--neighborRepairPeers", key: "neighborRepairPeers", parse: parseNumber },
|
|
284
|
+
{ flag: "--neighborMeshPeers", key: "neighborMeshPeers", parse: parseNumber },
|
|
285
|
+
{ flag: "--neighborAnnounceIntervalMs", key: "neighborAnnounceIntervalMs", parse: parseNumber },
|
|
286
|
+
{
|
|
287
|
+
flag: "--neighborMeshRefreshIntervalMs",
|
|
288
|
+
key: "neighborMeshRefreshIntervalMs",
|
|
289
|
+
parse: parseNumber,
|
|
290
|
+
},
|
|
291
|
+
{ flag: "--neighborHaveTtlMs", key: "neighborHaveTtlMs", parse: parseNumber },
|
|
292
|
+
{ flag: "--neighborRepairBudgetBps", key: "neighborRepairBudgetBps", parse: parseNumber },
|
|
293
|
+
{ flag: "--neighborRepairBurstMs", key: "neighborRepairBurstMs", parse: parseNumber },
|
|
294
|
+
{ flag: "--dialDelayMs", key: "dialDelayMs", parse: parseNumber },
|
|
295
|
+
{ flag: "--streamRxDelayMs", key: "streamRxDelayMs", parse: parseNumber },
|
|
296
|
+
{ flag: "--streamHighWaterMarkBytes", key: "streamHighWaterMarkBytes", parse: parseNumber },
|
|
297
|
+
{ flag: "--joinConcurrency", key: "joinConcurrency", parse: parseNumber },
|
|
298
|
+
{ flag: "--joinPhases", key: "joinPhases", parse: parseBool01("0") },
|
|
299
|
+
{ flag: "--joinPhaseSettleMs", key: "joinPhaseSettleMs", parse: parseNumber },
|
|
300
|
+
{ flag: "--joinReqTimeoutMs", key: "joinReqTimeoutMs", parse: parseNumber },
|
|
301
|
+
{ flag: "--candidateShuffleTopK", key: "candidateShuffleTopK", parse: parseNumber },
|
|
302
|
+
{ flag: "--candidateScoringMode", key: "candidateScoringMode", parse: parseString },
|
|
303
|
+
{
|
|
304
|
+
flag: "--bootstrapEnsureIntervalMs",
|
|
305
|
+
key: "bootstrapEnsureIntervalMs",
|
|
306
|
+
parse: parseNumber,
|
|
307
|
+
},
|
|
308
|
+
{ flag: "--trackerQueryIntervalMs", key: "trackerQueryIntervalMs", parse: parseNumber },
|
|
309
|
+
{ flag: "--joinAttemptsPerRound", key: "joinAttemptsPerRound", parse: parseNumber },
|
|
310
|
+
{ flag: "--candidateCooldownMs", key: "candidateCooldownMs", parse: parseNumber },
|
|
311
|
+
{ flag: "--maxLatencySamples", key: "maxLatencySamples", parse: parseNumber },
|
|
312
|
+
{ flag: "--profile", key: "profile", parse: parseBool01("0") },
|
|
313
|
+
{ flag: "--progress", key: "progress", parse: parseBool01("0") },
|
|
314
|
+
{ flag: "--progressEveryMs", key: "progressEveryMs", parse: parseNumber },
|
|
315
|
+
{ flag: "--dropDataFrameRate", key: "dropDataFrameRate", parse: parseNumber },
|
|
316
|
+
{ flag: "--churnEveryMs", key: "churnEveryMs", parse: parseNumber },
|
|
317
|
+
{ flag: "--churnDownMs", key: "churnDownMs", parse: parseNumber },
|
|
318
|
+
{ flag: "--churnFraction", key: "churnFraction", parse: parseNumber },
|
|
319
|
+
{ flag: "--assertMinJoinedPct", key: "assertMinJoinedPct", parse: parseNumber },
|
|
320
|
+
{ flag: "--assertMinDeliveryPct", key: "assertMinDeliveryPct", parse: parseNumber },
|
|
321
|
+
{
|
|
322
|
+
flag: "--assertMinDeadlineDeliveryPct",
|
|
323
|
+
key: "assertMinDeadlineDeliveryPct",
|
|
324
|
+
parse: parseNumber,
|
|
325
|
+
},
|
|
326
|
+
{ flag: "--assertMaxUploadFracPct", key: "assertMaxUploadFracPct", parse: parseNumber },
|
|
327
|
+
{
|
|
328
|
+
flag: "--assertMaxOverheadFactor",
|
|
329
|
+
key: "assertMaxOverheadFactor",
|
|
330
|
+
parse: parseNumber,
|
|
331
|
+
},
|
|
332
|
+
{ flag: "--assertMaxControlBpp", key: "assertMaxControlBpp", parse: parseNumber },
|
|
333
|
+
{ flag: "--assertMaxTrackerBpp", key: "assertMaxTrackerBpp", parse: parseNumber },
|
|
334
|
+
{ flag: "--assertMaxRepairBpp", key: "assertMaxRepairBpp", parse: parseNumber },
|
|
335
|
+
{ flag: "--assertAttachP95Ms", key: "assertAttachP95Ms", parse: parseNumber },
|
|
336
|
+
{ flag: "--assertMaxTreeLevelP95", key: "assertMaxTreeLevelP95", parse: parseNumber },
|
|
337
|
+
{
|
|
338
|
+
flag: "--assertMaxFormationScore",
|
|
339
|
+
key: "assertMaxFormationScore",
|
|
340
|
+
parse: parseNumber,
|
|
341
|
+
},
|
|
342
|
+
{ flag: "--assertMaxOrphans", key: "assertMaxOrphans", parse: parseNumber },
|
|
343
|
+
{ flag: "--assertMaxOrphanArea", key: "assertMaxOrphanArea", parse: parseNumber },
|
|
344
|
+
{ flag: "--assertRecoveryP95Ms", key: "assertRecoveryP95Ms", parse: parseNumber },
|
|
345
|
+
{
|
|
346
|
+
flag: "--assertMaxReparentsPerMin",
|
|
347
|
+
key: "assertMaxReparentsPerMin",
|
|
348
|
+
parse: parseNumber,
|
|
349
|
+
},
|
|
350
|
+
];
|
|
351
|
+
const parseArgs = (argv) => {
|
|
352
|
+
const get = (key) => {
|
|
353
|
+
const idx = argv.indexOf(key);
|
|
354
|
+
if (idx === -1)
|
|
355
|
+
return undefined;
|
|
356
|
+
return argv[idx + 1];
|
|
357
|
+
};
|
|
358
|
+
const has = (key) => argv.includes(key);
|
|
359
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
360
|
+
console.log(HELP_TEXT);
|
|
361
|
+
process.exit(0);
|
|
362
|
+
}
|
|
363
|
+
const preset = has("--preset") ? String(get("--preset")) : undefined;
|
|
364
|
+
const presetOpts = (preset ? PRESET_OPTIONS[preset] : undefined) ?? {};
|
|
365
|
+
const explicitOpts = {};
|
|
366
|
+
for (const spec of ARG_SPECS) {
|
|
367
|
+
if (!has(spec.flag))
|
|
368
|
+
continue;
|
|
369
|
+
explicitOpts[spec.key] = spec.parse(get(spec.flag));
|
|
370
|
+
}
|
|
371
|
+
const merged = { ...presetOpts, ...explicitOpts };
|
|
372
|
+
// Live workloads are deadline-oriented: drop forwarding of stale DATA once it
|
|
373
|
+
// exceeds the deadline (unless explicitly overridden).
|
|
374
|
+
if (preset === "live" && !("maxDataAgeMs" in explicitOpts)) {
|
|
375
|
+
const d = Number(merged.deadlineMs ?? 0);
|
|
376
|
+
if (d > 0)
|
|
377
|
+
merged.maxDataAgeMs = d;
|
|
378
|
+
}
|
|
379
|
+
return resolveFanoutTreeSimParams(merged);
|
|
380
|
+
};
|
|
381
|
+
const ASSERTION_SPECS = [
|
|
382
|
+
{
|
|
383
|
+
param: "assertMinJoinedPct",
|
|
384
|
+
label: "joinedPct",
|
|
385
|
+
mode: "min",
|
|
386
|
+
value: (result) => result.joinedPct,
|
|
387
|
+
formatActual: (value) => value.toFixed(2),
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
param: "assertMinDeliveryPct",
|
|
391
|
+
label: "deliveredPct",
|
|
392
|
+
mode: "min",
|
|
393
|
+
value: (result) => result.deliveredPct,
|
|
394
|
+
formatActual: (value) => value.toFixed(2),
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
param: "assertMaxUploadFracPct",
|
|
398
|
+
label: "maxUploadFracPct",
|
|
399
|
+
mode: "max",
|
|
400
|
+
value: (result) => result.maxUploadFracPct,
|
|
401
|
+
formatActual: (value) => value.toFixed(2),
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
param: "assertMinDeadlineDeliveryPct",
|
|
405
|
+
label: "deliveredWithinDeadlinePct",
|
|
406
|
+
mode: "min",
|
|
407
|
+
value: (result) => result.deliveredWithinDeadlinePct,
|
|
408
|
+
formatActual: (value) => value.toFixed(2),
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
param: "assertMaxOverheadFactor",
|
|
412
|
+
label: "overheadFactorData",
|
|
413
|
+
mode: "max",
|
|
414
|
+
value: (result) => result.overheadFactorData,
|
|
415
|
+
formatActual: (value) => value.toFixed(3),
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
param: "assertMaxControlBpp",
|
|
419
|
+
label: "controlBpp",
|
|
420
|
+
mode: "max",
|
|
421
|
+
value: (result) => result.controlBpp,
|
|
422
|
+
formatActual: (value) => value.toFixed(4),
|
|
423
|
+
},
|
|
424
|
+
{
|
|
425
|
+
param: "assertMaxTrackerBpp",
|
|
426
|
+
label: "trackerBpp",
|
|
427
|
+
mode: "max",
|
|
428
|
+
value: (result) => result.trackerBpp,
|
|
429
|
+
formatActual: (value) => value.toFixed(4),
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
param: "assertMaxRepairBpp",
|
|
433
|
+
label: "repairBpp",
|
|
434
|
+
mode: "max",
|
|
435
|
+
value: (result) => result.repairBpp,
|
|
436
|
+
formatActual: (value) => value.toFixed(4),
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
param: "assertAttachP95Ms",
|
|
440
|
+
label: "attachP95",
|
|
441
|
+
mode: "max",
|
|
442
|
+
value: (result) => result.attachP95,
|
|
443
|
+
formatActual: (value) => `${value.toFixed(1)}ms`,
|
|
444
|
+
formatExpected: (value) => `${value}ms`,
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
param: "assertMaxTreeLevelP95",
|
|
448
|
+
label: "treeLevelP95",
|
|
449
|
+
mode: "max",
|
|
450
|
+
value: (result) => result.treeLevelP95,
|
|
451
|
+
formatActual: (value) => value.toFixed(1),
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
param: "assertMaxFormationScore",
|
|
455
|
+
label: "formationScore",
|
|
456
|
+
mode: "max",
|
|
457
|
+
value: (result) => result.formationScore,
|
|
458
|
+
formatActual: (value) => value.toFixed(2),
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
param: "assertMaxOrphans",
|
|
462
|
+
label: "maintMaxOrphans",
|
|
463
|
+
mode: "max",
|
|
464
|
+
value: (result) => result.maintMaxOrphans,
|
|
465
|
+
},
|
|
466
|
+
{
|
|
467
|
+
param: "assertMaxOrphanArea",
|
|
468
|
+
label: "maintOrphanArea",
|
|
469
|
+
mode: "max",
|
|
470
|
+
value: (result) => result.maintOrphanArea,
|
|
471
|
+
formatActual: (value) => value.toFixed(1),
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
param: "assertRecoveryP95Ms",
|
|
475
|
+
label: "maintRecoveryP95Ms",
|
|
476
|
+
mode: "max",
|
|
477
|
+
value: (result) => result.maintRecoveryP95Ms,
|
|
478
|
+
formatActual: (value) => `${value.toFixed(1)}ms`,
|
|
479
|
+
formatExpected: (value) => `${value}ms`,
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
param: "assertMaxReparentsPerMin",
|
|
483
|
+
label: "maintReparentsPerMin",
|
|
484
|
+
mode: "max",
|
|
485
|
+
value: (result) => result.maintReparentsPerMin,
|
|
486
|
+
formatActual: (value) => value.toFixed(2),
|
|
487
|
+
},
|
|
488
|
+
];
|
|
489
|
+
const runAssertions = (params, result) => {
|
|
490
|
+
for (const spec of ASSERTION_SPECS) {
|
|
491
|
+
const threshold = params[spec.param];
|
|
492
|
+
if (threshold <= 0)
|
|
493
|
+
continue;
|
|
494
|
+
const actual = spec.value(result);
|
|
495
|
+
const failed = spec.mode === "min" ? actual + 1e-9 < threshold : actual - 1e-9 > threshold;
|
|
496
|
+
if (!failed)
|
|
497
|
+
continue;
|
|
498
|
+
const actualText = spec.formatActual ? spec.formatActual(actual) : `${actual}`;
|
|
499
|
+
const expectedText = spec.formatExpected ? spec.formatExpected(threshold) : `${threshold}`;
|
|
500
|
+
const operator = spec.mode === "min" ? "<" : ">";
|
|
501
|
+
console.error(`ASSERT FAILED: ${spec.label} ${actualText} ${operator} ${expectedText}`);
|
|
502
|
+
process.exit(2);
|
|
503
|
+
}
|
|
504
|
+
};
|
|
505
|
+
const main = async () => {
|
|
506
|
+
const params = parseArgs(process.argv.slice(2));
|
|
507
|
+
const result = await runFanoutTreeSim(params);
|
|
508
|
+
console.log(formatFanoutTreeSimResult(result));
|
|
509
|
+
runAssertions(params, result);
|
|
510
|
+
};
|
|
511
|
+
try {
|
|
512
|
+
await main();
|
|
513
|
+
}
|
|
514
|
+
catch (err) {
|
|
515
|
+
console.error(err?.message ?? String(err));
|
|
516
|
+
if (String(err?.message ?? "").includes("timed out")) {
|
|
517
|
+
process.exit(124);
|
|
518
|
+
}
|
|
519
|
+
process.exit(1);
|
|
520
|
+
}
|
|
521
|
+
//# sourceMappingURL=fanout-tree-sim.js.map
|