Commit 25ac777
committed
keyviz admin: precompute row totals + deterministic budget tie-break
Round-1 review fixes for PR #660 (Gemini medium):
The rows-budget sort previously called rowActivityTotal inside the
comparator, paying O(M) per pair × O(N log N) comparisons —
quadratic-ish in column count for the cost of one HTTP request.
Worse, the lack of a tie-breaker made truncation non-deterministic:
two refreshes against identical data could return different row
sets, surfacing as flicker in the SPA heatmap.
Accumulate a precomputed row.total during the pivot phase (json:"-"
field, internal only) and sort on it in the budget step. Add
BucketID as the tie-breaker so identical data → identical response.
Test TestKeyVizHandlerRowsBudgetTieBreakDeterministic stages three
routes with equal Writes, requests rows=2 three times in a row, and
asserts the same two routes (lowest BucketID) survive every time.1 parent 78200a5 commit 25ac777
2 files changed
Lines changed: 48 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
73 | 73 | | |
74 | 74 | | |
75 | 75 | | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
76 | 81 | | |
77 | 82 | | |
78 | 83 | | |
| |||
262 | 267 | | |
263 | 268 | | |
264 | 269 | | |
265 | | - | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
266 | 273 | | |
267 | 274 | | |
268 | 275 | | |
| |||
320 | 327 | | |
321 | 328 | | |
322 | 329 | | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
323 | 335 | | |
324 | 336 | | |
325 | 337 | | |
326 | 338 | | |
327 | 339 | | |
328 | | - | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
329 | 344 | | |
330 | 345 | | |
331 | 346 | | |
332 | 347 | | |
333 | | - | |
334 | | - | |
335 | | - | |
336 | | - | |
337 | | - | |
338 | | - | |
339 | | - | |
340 | | - | |
341 | 348 | | |
342 | 349 | | |
343 | 350 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
256 | 256 | | |
257 | 257 | | |
258 | 258 | | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
0 commit comments