Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
458 commits
Select commit Hold shift + click to select a range
c810c0f
racer-core: clippy question mark in successor_deferral
jveski Oct 25, 2026
91d8984
racer: successor probes take a short time share and fail as misses
jveski Oct 25, 2026
92eef31
racer-core: probe a successor only once its hint is 2 s old
jveski Oct 25, 2026
7ca8bb5
designs: Round 4 orphan2 (wave 4), Known issue 21 resolved, new 211 a…
jveski Oct 25, 2026
cc09057
racer-sim: format merged successor imports
jveski Oct 25, 2026
656ae34
racer-core, racer-sim: test successor, lineage and rank 0 timeout int…
jveski Oct 25, 2026
f7d6663
racer: lineage-first never moves a non-neighbor ahead of a neighbor
jveski Oct 25, 2026
4c5cea3
designs: Round 4: combined (wave 4); renumber Known issues 34-40
jveski Oct 25, 2026
371db98
topology: keep two ranks below the owners per slot (Placement::demoted)
jveski Oct 25, 2026
0d4aefc
racer-core: grant lineage probes, demoted targets, copy_join_allowed …
jveski Oct 25, 2026
be35fc7
production: ask demoted and lineage targets on their own grant; copy-…
jveski Oct 25, 2026
1c93b2c
racer-sim: model demoted targets, lineage grants and copy_join_allowe…
jveski Oct 25, 2026
c8f75ec
production tests: delegated rank 0 asks lineage and demoted targets o…
jveski Oct 25, 2026
7c59cea
racer-sim: test demoted targets, lineage grants and the copy join rul…
jveski Oct 25, 2026
2434f77
production tests: clippy
jveski Oct 25, 2026
dc3bcce
designs: Round 4: lineage (wave 5); Known issues 25, 34, 35 resolved,…
jveski Oct 25, 2026
e25dffa
designs: mark the Known issue 313 attribution as an inference
jveski Oct 25, 2026
d197e06
designs: lineage 50k full-failover evidence
jveski Oct 25, 2026
44a26e0
racer-sim: split relay-signed Unavailable from rank 0 failures in rep…
jveski Oct 25, 2026
9ff25c7
racer-core: orphan notices, deferred copy offers to rank 0 (Known iss…
jveski Oct 25, 2026
f58af36
racer-sim: model orphan notices and copy offers (Known issue 37)
jveski Oct 25, 2026
c0c81ba
racer-core: hinted lineage targets are granted successor probes; succ…
jveski Oct 25, 2026
8d1fe62
racer-dataplane: orphan notices send copy offers to rank 0 (Known iss…
jveski Oct 25, 2026
c400dc5
racer-core: allow Instant::now in notice tests
jveski Oct 25, 2026
a84458d
racer-sim: test orphan offers and the relay skip class (Known issues …
jveski Oct 25, 2026
0bd12f8
racer-core: probe TTL in successor hint test
jveski Oct 25, 2026
d7c220f
Offers arm rank 0's successor probe without deferring readers (Known …
jveski Oct 25, 2026
a720b8b
designs: Round 4: orphan3 (wave 5); resolve Known issues 37 and 38, a…
jveski Oct 25, 2026
9846466
racer-core: give an owner's copy-only probe of rank 0 the route first
jveski Oct 25, 2026
02f7409
racer-core, dataplane, sim: rank 0 watch bounds and extends the timeo…
jveski Oct 25, 2026
5068a3a
racer-core, dataplane, sim: keep origin authority after other failure…
jveski Oct 25, 2026
9c73abb
racer-core, dataplane, sim: presume rank 0 hung after half a request …
jveski Oct 25, 2026
80dd4cc
designs: Round 4: hang (wave 5); Known issues 39, 40, 301-303
jveski Oct 25, 2026
babd5d4
designs: Round 4: hang (wave 5): 50k full-failover evidence
jveski Oct 25, 2026
ddef3c2
cluster-control: publish the committed sequence on the primary Lease …
jveski Oct 25, 2026
224f970
sim: control propagation metrics (seat lag, member lag, adoption spread)
jveski Oct 25, 2026
42dc664
read: a reader that cannot fall back may wait twice for an owner that…
jveski Oct 25, 2026
2272bbe
read: rank the previous membership before skipping an owner that is b…
jveski Oct 25, 2026
c34df3d
read: clippy fixes
jveski Oct 25, 2026
90a1dbe
designs: Round 4: stale (wave 5); resolve Known issues 19, 26, 36; ad…
jveski Oct 25, 2026
c497f90
racer-core: close the lineage grant test after the wave 5 merge
jveski Oct 25, 2026
dea00a8
designs, comments: renumber wave 5 Known issues 301-332 to 41-51; dro…
jveski Oct 25, 2026
5cb1ec8
racer-core: test that lineage grants leave the rank 0 timeout rule alone
jveski Oct 25, 2026
db1ddec
designs: Round 4: combined (wave 5); Known issue 52
jveski Oct 25, 2026
2cd5ec0
topology: keep a best-effort tail of ranks below five (Known issue 46)
jveski Oct 25, 2026
077c090
racer-core: send granted probes at once and ask deeper lineage target…
jveski Oct 25, 2026
00fc5ca
read: send granted probes at once and ask unknown-age demoted members…
jveski Oct 25, 2026
d882cd5
racer-sim: model parallel granted probes and deeper lineage targets (…
jveski Oct 25, 2026
3031f2c
racer-sim: split unasked holder ranks at the retained depth; assert r…
jveski Oct 25, 2026
926252d
designs: Round 4: probes (wave 6); resolve Known issues 45 and 46
jveski Oct 25, 2026
92b8241
designs: probes wave 6 50k evidence; Known issue 411
jveski Oct 25, 2026
fc190ca
racer-core: peer silence, pinged after unanswered exchanges (Known is…
jveski Oct 25, 2026
59d510c
racer-sim: model peer silence and pings (Known issues 41, 43)
jveski Oct 25, 2026
c3d0f99
racer-dataplane: link health tracks silent destinations (Known issues…
jveski Oct 25, 2026
0da6d6d
racer-dataplane: silence pings (Known issues 41, 43)
jveski Oct 25, 2026
7e818b7
racer-core: readers visit owners that left them unanswered last (Know…
jveski Oct 25, 2026
da6083b
racer-sim: readers demote unanswered owners and ping a silent rank 0 …
jveski Oct 25, 2026
16efd3b
racer-dataplane: readers visit owners that left them unanswered last …
jveski Oct 25, 2026
bdefc8f
racer-core: test the bound on relay-signed Overloaded before rank 0 (…
jveski Oct 25, 2026
6ed0821
designs: Round 4: hang2 (wave 6); Known issues 40 to 43 resolved, 401…
jveski Oct 25, 2026
4075f42
designs: hang2 spelling
jveski Oct 25, 2026
aecf1c0
designs: hang2 50k full-failover evidence
jveski Oct 25, 2026
fd8fd04
racer: granted probe batches feed silence evidence (Known issues 41, 45)
jveski Oct 25, 2026
fa68dea
designs: renumber wave 6 Known issues 401, 402, 411 to 53, 54, 55
jveski Oct 25, 2026
17c4356
designs: Round 4: combined (wave 6), part 1
jveski Oct 25, 2026
40cf8da
designs: wave 6 merge wording
jveski Oct 25, 2026
47f9474
cluster-control: seat followers reread after a Lease change during th…
jveski Oct 25, 2026
07a518a
racer-sim: RACER_SIM_TRACE_FAILED traces why a failed read's fills fa…
jveski Oct 25, 2026
f7a3aa8
read: a verified StaleMembership returns the links past its answerer
jveski Oct 25, 2026
dd211ed
racer-sim: count refunded stale links; test the refund against the kn…
jveski Oct 25, 2026
4ddc3a0
racer-sim: trace the destinations' failed serves of a failed read's page
jveski Oct 25, 2026
7821cda
cluster-control: superseded reads drop only older records; a new seat…
jveski Oct 25, 2026
013e801
designs: Round 4: ctl3 (wave 6); Known issues 47, 48, 49, 421, 422
jveski Oct 25, 2026
c5c0600
racer: renumber ctl3 Known issues 421, 422 to 56, 57
jveski Oct 25, 2026
ea4a01d
read: test that a stale answer in a granted batch refunds only its ow…
jveski Oct 25, 2026
49632a3
racer-core: merge fix, the stale-wait bound test matches Step::Granted
jveski Oct 25, 2026
0d7c801
racer-sim: measure the stale fallback's failed reads with the stale l…
jveski Oct 25, 2026
4b98a9d
designs: Round 4: combined (wave 6), ctl3; worst full-failover pages …
jveski Oct 25, 2026
79461ff
designs: wave 6 merge wording
jveski Oct 25, 2026
a2b48ff
racer-core, dataplane: owners leave origin retries to a failing rank …
jveski Oct 25, 2026
94f11d2
racer-sim: model rank 0 failure hold; outage test (Known issue 52)
jveski Oct 25, 2026
d9a31d3
racer-core, dataplane: copy offers wait out a cut toward their site (…
jveski Oct 25, 2026
310a2e8
racer-sim: offer cut groups, read evidence, offer partition counter (…
jveski Oct 25, 2026
ea908ec
racer-core, dataplane: holders offer origin copies to every predecess…
jveski Oct 25, 2026
421eccb
racer-sim: offer to rank 1 too (Known issue 51)
jveski Oct 25, 2026
909ef1a
racer-core, dataplane: hold rank 0 failure retries only after the own…
jveski Oct 25, 2026
024b904
racer-core: probe offered hints at once; hold a site only after a cut…
jveski Oct 25, 2026
22497ca
racer-sim: own origin failures feed the rank 0 watch; orphan repeat c…
jveski Oct 25, 2026
bcaabdc
designs: Round 4: offer2 (wave 6); Known issues 50, 51, 52 resolved, …
jveski Oct 25, 2026
c020f33
designs: Known issue 431 classified: rank 1 defers readers to offer s…
jveski Oct 25, 2026
7b5ce59
designs: Known issue 431: mark the DST seed 11 explanation as inferred
jveski Oct 25, 2026
b761a5b
designs: renumber offer2 Known issue 431 to 58
jveski Oct 25, 2026
c1bcf35
designs: Round 4: combined (wave 6), offer2 and 50k evidence
jveski Oct 25, 2026
f936684
designs: Known issue 55 after the offer2 merge
jveski Oct 25, 2026
2265d26
designs: drop stale duplicate summary entries for Known issues 45 and 46
jveski Oct 25, 2026
0e1a773
racer-core: fund forwarded out-of-order Acquires with the shared rout…
jveski Oct 25, 2026
10837de
racer-core: fund an in-order owner whose shared credits cannot cover …
jveski Oct 25, 2026
ef4c75d
racer-sim: count forwarded funded routes and short or spent unfunded …
jveski Oct 25, 2026
9e362b0
designs: round 4 budget (wave 7), Known issues 47 and 57 resolved
jveski Oct 25, 2026
f6f6a6d
designs: add Known issue 511 to both lists
jveski Oct 25, 2026
9327d5b
racer: tell busy peers from hung ones in silence (Known issues 53, 54)
jveski Oct 25, 2026
962e934
racer-sim: test that readers do not return first to an owner that she…
jveski Oct 25, 2026
f0372d2
racer-sim: measure hot-page fan-out against the owners-only baseline …
jveski Oct 25, 2026
b157f30
racer-sim: assert the silence ping bound in the slow origin scenario …
jveski Oct 25, 2026
0b4fa34
designs: Round 4 busy (wave 7): resolve Known issues 53 and 54, add 521
jveski Oct 25, 2026
dd059cd
designs: busy (wave 7) 50k evidence and verification
jveski Oct 26, 2026
09449d7
racer: do not defer a returning reader to a successor again (Known is…
jveski Oct 25, 2026
42f72c3
racer-sim: report worst page without origin failure retries (Known is…
jveski Oct 25, 2026
f46c93a
racer-sim: bound full-failover worst pages by origin failure retries …
jveski Oct 25, 2026
f346099
racer: remember only deferrals to offer senders for returning readers…
jveski Oct 25, 2026
af36a9b
racer-sim: classify why readers return after a deferral (Known issue 58)
jveski Oct 25, 2026
8209da7
designs: round 4 failover (wave 7), resolve Known issues 55 and 58
jveski Oct 26, 2026
229708c
designs: renumber wave 7 Known issues 511 to 59 and 521 to 60
jveski Oct 26, 2026
7552aa4
racer-core: test that a shed-demoted rank 0 never grows budgets per h…
jveski Oct 26, 2026
89502e2
designs: point Known issue 60 at helper_probe's line after the wave 7…
jveski Oct 26, 2026
1e9e9d3
designs: Round 4 combined (wave 7) merge evidence and interplay; Know…
jveski Oct 26, 2026
1d245fb
racer: test the bound on origin requests by minimum-funded owners (Kn…
jveski Oct 26, 2026
44f1e3f
designs: resolve racer Known issue 59 with a bound (round 4, funding,…
jveski Oct 26, 2026
f98c936
racer: fund the overflow helper probe with its full link envelope
jveski Oct 26, 2026
51f6821
designs: resolve Known issue 60 (helper route envelope), wave 8 helpe…
jveski Oct 26, 2026
f2021ec
designs: wave 8 helper 50k full-cold-start evidence
jveski Oct 26, 2026
a6abf8e
designs: Round 4 combined (wave 8) merge evidence; Known issues 1-60 …
jveski Oct 26, 2026
d1a34b4
designs: note the final rebase onto PR #994
jveski Oct 27, 2026
dbf4769
images: copy racer-core and racer-sim into the dataplane build context
jveski Oct 27, 2026
cf86e0f
cluster-control: name the jitter stream argument for what it is
jveski Oct 27, 2026
6cb3303
racer: exempt bodyless ping and offer pages from receive admission
jveski Oct 28, 2026
c72def1
cluster-control: recheck primary role after replica write slot wait
jveski Oct 28, 2026
8f615f8
cluster-control: recheck callers after queued write slot waits
jveski Oct 28, 2026
30950c6
racer: release the retained flight when handover fails before submission
jveski Oct 28, 2026
4e2f4e5
racer: wake fill driver when the last handover adopter goes away
jveski Oct 28, 2026
dbff0ca
racer: route recovery pings over the link to the silent peer they test
jveski Oct 28, 2026
baf9ef0
racer: send pings and offers over HTTP without RDMA setup
jveski Oct 28, 2026
f3e17ee
racer: keep relayed pings to pre-ping peers inconclusive
jveski Oct 28, 2026
defd418
racer: key origin bookkeeping by the refreshed owner order
jveski Oct 28, 2026
c3123a9
racer: remove the sim stand-in world and standin scenario
jveski Oct 28, 2026
533293c
racer: remove unused core MetadataCohorts
jveski Oct 28, 2026
2f38899
racer: remove unused core response Payload helpers
jveski Oct 28, 2026
9e1bc7c
racer: admit seat long polls through step::admission::start_poll
jveski Oct 28, 2026
5e65bf5
racer: remove unused sim MemoryUsage and placement entry size
jveski Oct 28, 2026
fd1a65e
racer: share core FlightLimits and drop core_equivalence cross-checks
jveski Oct 28, 2026
500c3de
racer: schedule range stream windows with core range planner
jveski Oct 28, 2026
452cc99
racer: drive production fill acquisition with core FillPlan
jveski Oct 28, 2026
52508a1
racer: drop unused core and sim helpers
jveski Oct 28, 2026
fa7c932
racer: condense racer-core simulation design doc
jveski Oct 28, 2026
2f0d719
racer: update design doc references in code comments
jveski Oct 28, 2026
81ce8b6
racer: share link retry backoff shape in racer-core
jveski Oct 28, 2026
1d24bc9
racer: share hedge duplicate and charge sizes in racer-core
jveski Oct 28, 2026
2466fb4
racer: use a non-cryptographic hash for claim delay jitter
jveski Oct 28, 2026
23fc62f
Collapse racer-core into cohesive modules
jveski Oct 28, 2026
9131b68
Shrink racer-core public surface
jveski Oct 28, 2026
d31be17
Add run and always helpers to walk tests
jveski Oct 28, 2026
bc9373d
Share one flight state machine between production and the sim
jveski Oct 28, 2026
2f72bae
Move sim-only phantom rankings and shared routes into racer-sim
jveski Oct 28, 2026
9a7bfc8
Build page-alloc's PhantomEntries only for simulation
jveski Oct 28, 2026
a56f202
Merge racer-sim node config into one Config and fold node/{mod,ids}.rs
jveski Oct 28, 2026
818385b
Fold racer-sim's run helpers into one run function
jveski Oct 28, 2026
a5f14a6
Drop the unused Clock parameter from flow-control's Adaptive
jveski Oct 28, 2026
4b39654
Describe where the sim's phantom caches and config live
jveski Oct 28, 2026
ea73b04
racer: move sim-only control plane model into racer-sim
jveski Oct 28, 2026
8064d2b
racer-sim: drop trivial ControlPlane getters
jveski Oct 28, 2026
56b27e9
racer-cluster-control: drop step re-export block and jitter shim
jveski Oct 28, 2026
99e89da
racer-cluster-control: merge small step modules
jveski Oct 28, 2026
4908fe9
racer-cluster-control: use racer-core SplitMix64 for seeded entropy
jveski Oct 28, 2026
750633d
racer-cluster-control: make the fake API server's limiter concrete
jveski Oct 28, 2026
11acab6
racer-sim: inline single-use control sim helpers
jveski Oct 28, 2026
dc84505
Move subscription Demand into racer-core
jveski Oct 28, 2026
01c5a32
Move memory cache idle expiry policy into racer-core
jveski Oct 28, 2026
c091bff
Drop admission re-exports and production_floors wrapper
jveski Oct 28, 2026
40e2869
Fold owner_contracts tests into memory, admission and persist_policy
jveski Oct 28, 2026
a6e9784
Drop Known issue references from dataplane comments
jveski Oct 28, 2026
d57d7b7
Compact peer_copies test setup
jveski Oct 28, 2026
bad08ea
Drop remaining wrapped Known issue references
jveski Oct 28, 2026
e768f4c
Use racer-core cache and route items directly
jveski Oct 28, 2026
228ed4a
Lift ping verdicts and offer results into racer-core
jveski Oct 28, 2026
5ba8874
Merge relay hop failure and exchange evidence tables
jveski Oct 28, 2026
217a93b
Fold offer_noted into SuccessorHints::note_offer
jveski Oct 28, 2026
978e534
Share the sim's silence timeout handling
jveski Oct 28, 2026
b248ace
Drop single-use relay hop and offer helpers
jveski Oct 28, 2026
553ad85
Trim liveness narration and drop unused Scheduler::limits
jveski Oct 28, 2026
7f7a0cb
Group route code before one test module and trim its docs
jveski Oct 28, 2026
e6429a7
Drop unused time::Now
jveski Oct 28, 2026
4da7a9e
Shorten sim ablation switch docs
jveski Oct 28, 2026
4e21715
Trim resources model narration
jveski Oct 28, 2026
b5c6a09
Fold sim cost models and model settings into ControlPlane
jveski Oct 28, 2026
02122b9
Merge the sim ControlPlane model into control.rs
jveski Oct 28, 2026
7854d72
Drop ControlSim change-recording accessors
jveski Oct 28, 2026
c663b3d
Lift the fill and walk drivers into one racer-core Fill machine
jveski Oct 28, 2026
1f9821f
Describe the shared Fill machine in the simulation design
jveski Oct 28, 2026
700d941
Trim walk comments and expose Fill's read-only state as fields
jveski Oct 28, 2026
429b083
Trim Fill and walk funding comments to the rationale
jveski Oct 28, 2026
a255121
Pass stale-wait and fallback facts as plain arguments
jveski Oct 28, 2026
7c06da5
Drop a leftover enumerate in the demoted ranking
jveski Oct 28, 2026
31dc62f
Use the run helper where a walk test needs no state afterward
jveski Oct 28, 2026
d9c70b6
Replace subscriptions Fault trait with From<Kind> and a promote flag
jveski Oct 28, 2026
1c3b937
Inline trivial route response checks into forwarding
jveski Oct 28, 2026
e3cc174
Inline single-use LinkHealth accessors
jveski Oct 28, 2026
0077722
sim: fold ControlPlane into ControlSim
jveski Oct 28, 2026
16774e4
sim: share combined test runners and trim combined docs
jveski Oct 28, 2026
859264b
cluster-control: inline Entropy helpers and merge seat step tests
jveski Oct 28, 2026
6cb42b4
cluster-control: drop the unused Store watch registry and fake API bo…
jveski Oct 28, 2026
59a240a
cluster-control: one members::reconcile entry point
jveski Oct 28, 2026
72cad4c
cluster-control: one plan_pass test helper and shorter primary step docs
jveski Oct 28, 2026
47f9e33
cluster-control: drop unread AuthCache hit counters and condense auth…
jveski Oct 28, 2026
4cfbc78
sim: keep seat admission state in the simulator
jveski Oct 28, 2026
78e8a26
cluster-control: drop a Signal test the linear-work test already covers
jveski Oct 28, 2026
9bb8e5d
cluster-control: trim limits and authorize docs to their contracts
jveski Oct 28, 2026
fdbb8c4
Make the sim follow production stale-membership semantics
jveski Oct 28, 2026
4074eb9
Drop single-use walk accessors and the HedgeFacts struct
jveski Oct 28, 2026
b222126
Drop Known issue references from read path comments
jveski Oct 28, 2026
5d58bc6
Share the published-versions fixture in peer copy tests
jveski Oct 28, 2026
7df8eb6
Drop merge-round history from read path comments
jveski Oct 28, 2026
29b6cec
Drive hand-rolled walk test loops through the shared driver
jveski Oct 28, 2026
6e314ad
Share the flight table test setup
jveski Oct 28, 2026
97b9471
Share page resolution helpers in candidate policy tests
jveski Oct 28, 2026
2e99eb0
Reuse drive_offers in the cut-toward-site offer test
jveski Oct 28, 2026
0695c3d
Condense the hints, fan-out and hedge essays to their contracts
jveski Oct 28, 2026
cca3b2d
Merge sim node admission and membership into state.rs
jveski Oct 28, 2026
46dd9c0
Shorten sim world comments
jveski Oct 28, 2026
64ed4fb
Cap sim silence pings and copy offers in flight as production does
jveski Oct 28, 2026
bbbd3ee
Drop sim diagnostics that consult simulator truth
jveski Oct 28, 2026
209f4be
Shorten sim comments outside the node world
jveski Oct 28, 2026
aa6bef6
Consolidate sim node scenario tests that share runs
jveski Oct 28, 2026
22a5ffa
Share one hang scenario across the hung-peer contention tests
jveski Oct 28, 2026
12986d3
Fold sim CLI tests and drop single-use config readers
jveski Oct 28, 2026
38c94d6
Drop the RACER_SIM_TRACE_FAILED diagnostics
jveski Oct 28, 2026
155e298
Share the hot-page shed owner and exempt decision in racer-core
jveski Oct 28, 2026
896a5ad
sim: drop unread report sections and diagnostics, share control-messa…
jveski Oct 28, 2026
a329b2c
sim: merge node unit scenarios into contention_scenarios, add Storm::new
jveski Oct 28, 2026
a2acd1d
sim/core: trim history comments and unread report fields, table-drive…
jveski Oct 28, 2026
9f427b9
Table-drive racer-core walk tests with golden probe traces
jveski Oct 28, 2026
77ebdb1
Share a fixture across racer-core flight table tests
jveski Oct 28, 2026
a31deee
Drop Evidence::remaining and Fill::remaining; production keys on its …
jveski Oct 28, 2026
8db264a
Merge stale-membership IO tests into one table
jveski Oct 28, 2026
fc05c62
cluster-control: drop test-only budget stats, accessors and single-us…
jveski Oct 28, 2026
be6705e
sim: model the API rate limit directly; make apiserver Store test-only
jveski Oct 28, 2026
5197ebc
cluster-control: fold Gate into WriteQueue
jveski Oct 28, 2026
9afcd36
sim, cluster-control: drop issue-number and round history from commen…
jveski Oct 28, 2026
0bfbc4f
controlplane: drop unused Host::preparing (Preparing::Inline)
jveski Oct 28, 2026
dec7405
sim: table-drive control and combined test assertions; drop ControlSi…
jveski Oct 28, 2026
1a6912c
Move the sim-only Follower out of cluster-control into the sim
jveski Oct 28, 2026
2ec52fd
racer: condense comments in racer-core and sim node model
jveski Oct 28, 2026
d59aa0a
racer-sim: inline single-use node world helpers
jveski Oct 28, 2026
95911c9
racer: condense comments in read and peer modules
jveski Oct 28, 2026
e8a4628
racer: inline owner_arrivals
jveski Oct 28, 2026
7830903
Bring the racer-core simulation design doc up to date
jveski Oct 28, 2026
6e815c6
Restore main's read and peer comments
jveski Oct 28, 2026
1ccab10
Restore PR contract details in read and peer comments
jveski Oct 28, 2026
74ce6fa
Restore contract details in racer-core docs
jveski Oct 28, 2026
dc40c3e
racer-sim: restore node world docs and fix clippy warnings
jveski Oct 28, 2026
a7dd139
racer-sim: fix lineage_slack switch comment and a useless conversion
jveski Oct 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,7 @@ help: ## Show this help
@echo "Racer:"
@echo " racer-test Test the Rust Racer workspace and Go Racer API and wire contracts"
@echo " racer-gpu-test Build the CUDA shim with kernels and run GPU hardware tests"
@echo " racer-sim Run the Racer simulator (ARGS='--scenario smoke --nodes 16')"
@echo " racer-envtest Run Racer API-server tests with KUBEBUILDER_ASSETS"
@echo " racer-envtest-ci Provision pinned assets and run Racer API-server tests"
@echo " racer-generate Generate Racer deepcopy and CRD artifacts"
Expand Down Expand Up @@ -610,6 +611,12 @@ racer-python-dist: ## Build sdists and wheels for racer-client and racer-vllm in
timeout --signal=TERM --kill-after=10s 300s "$(RACER_PY_VENV)/bin/python" -m build -o tmp/racer-python-dist clients/python/racer
timeout --signal=TERM --kill-after=10s 300s "$(RACER_PY_VENV)/bin/python" -m build -o tmp/racer-python-dist clients/python/racer-vllm

RACER_SIM_TIMEOUT ?= 7200s

.PHONY: racer-sim
racer-sim: ## Run the Racer discrete-event simulator; pass options with ARGS='--nodes 50000 --seed 1'
timeout --signal=TERM --kill-after=10s $(RACER_SIM_TIMEOUT) cargo run --release --locked --manifest-path cmd/racer-dataplane/Cargo.toml -p racer-sim -- $(ARGS)

$(SETUP_ENVTEST):
@mkdir -p bin tmp/envtest-tools
TMPDIR="$(CURDIR)/tmp/envtest-tools" GOBIN="$(CURDIR)/bin" timeout --signal=TERM --kill-after=10s 300s $(GOCMD) install sigs.k8s.io/controller-runtime/tools/setup-envtest@$(SETUP_ENVTEST_VERSION)
Expand Down
28 changes: 28 additions & 0 deletions cmd/racer-dataplane/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion cmd/racer-dataplane/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[workspace]
members = [".", "runtime", "alloc", "crypto", "verbs", "gpu", "http", "topology", "telemetry", "flow", "control-wire", "controlplane", "uds-endpoint", "wire-codec", "peer-wire", "object-wire", "cluster-control", "admission"]
members = [".", "runtime", "alloc", "crypto", "verbs", "gpu", "http", "topology", "telemetry", "flow", "control-wire", "controlplane", "uds-endpoint", "wire-codec", "peer-wire", "object-wire", "cluster-control", "admission", "core", "sim"]
resolver = "3"

[package]
Expand Down Expand Up @@ -28,6 +28,7 @@ required-features = ["subscription-interop"]
controlplane = { path = "controlplane" }
peer-wire = { path = "peer-wire" }
racer-object-wire = { path = "object-wire" }
racer-core = { path = "core" }
envy = { version = "0.4.2", default-features = false }
uds-endpoint = { path = "uds-endpoint" }
wire-codec = { path = "wire-codec", features = ["rest"] }
Expand Down
2 changes: 2 additions & 0 deletions cmd/racer-dataplane/alloc/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,8 @@ pub use demand::{
DEFAULT_DECAY_WINDOWS, DEFAULT_INITIAL_TARGET, DEFAULT_MAX_DEPTH, DEFAULT_MIN_DEPTH,
DEFAULT_WINDOW, PoolDemand, PoolStats,
};
#[cfg(feature = "simulation")]
pub use segments::PhantomEntries;
pub use segments::{
FreezeGuard, Generation, SegmentClock, SegmentEntries, SegmentId, SegmentLease,
SegmentSnapshot, SegmentState, Segments,
Expand Down
58 changes: 52 additions & 6 deletions cmd/racer-dataplane/alloc/src/retention.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@ use std::time::{Duration, Instant};
const GENERATIONS: usize = 4;

/// Bounded rotating Bloom history. A hit is a hint, never identity or ownership.
pub struct SecondSight {
hash: RandomState,
///
/// Production uses the randomly keyed [`RandomState`]; simulators pass a seeded
/// [`BuildHasher`] through [`SecondSight::with_hasher`] so false positives replay.
pub struct SecondSight<S = RandomState> {
hash: S,

pages: [Vec<u64>; GENERATIONS],

Expand All @@ -24,12 +27,19 @@ pub struct SecondSight {
impl SecondSight {
/// Construct four generations within the byte budget, starting at `now`.
pub fn new(bytes: usize, period: Duration, now: Instant) -> Option<Self> {
Self::with_hasher(bytes, period, now, RandomState::new())
}
}

impl<S: BuildHasher> SecondSight<S> {
/// Like [`SecondSight::new`] with an explicit, possibly deterministic, hasher.
pub fn with_hasher(bytes: usize, period: Duration, now: Instant, hash: S) -> Option<Self> {
let words = bytes / (GENERATIONS * 8);
if words == 0 || period.is_zero() || period.as_nanos() > u64::MAX as u128 {
return None;
}
Some(Self {
hash: RandomState::new(),
hash,
pages: std::array::from_fn(|_| vec![0; words]),
occupancy: [0; GENERATIONS],
current: 0,
Expand Down Expand Up @@ -87,8 +97,11 @@ impl SecondSight {
}

/// Exact, capacity-bounded resident heat. Only explicitly tracked keys can heat up.
pub struct Heat<K> {
entries: HashMap<K, Temperature>,
///
/// The table is never iterated, so the hasher only affects performance; it is a
/// parameter so simulators can avoid OS randomness entirely.
pub struct Heat<K, S = RandomState> {
entries: HashMap<K, Temperature, S>,

capacity: usize,
}
Expand All @@ -112,8 +125,15 @@ impl Temperature {
impl<K: Eq + Hash + Clone> Heat<K> {
/// Create an empty exact table; zero capacity is invalid.
pub fn new(capacity: usize) -> Option<Self> {
Self::with_hasher(capacity, RandomState::new())
}
}

impl<K: Eq + Hash + Clone, S: BuildHasher> Heat<K, S> {
/// Like [`Heat::new`] with an explicit hasher.
pub fn with_hasher(capacity: usize, hash: S) -> Option<Self> {
(capacity != 0).then(|| Self {
entries: HashMap::new(),
entries: HashMap::with_hasher(hash),
capacity,
})
}
Expand Down Expand Up @@ -189,6 +209,32 @@ mod tests {
assert!(SecondSight::new(32, Duration::ZERO, start).is_none());
}

/// Fixed-key hashers make Bloom collisions identical across instances.
#[test]
fn seeded_hasher_replays_identically() {
use std::hash::BuildHasherDefault;
type Fixed = BuildHasherDefault<std::collections::hash_map::DefaultHasher>;
let start = Instant::now();
let run = || {
let mut history =
SecondSight::with_hasher(64, Duration::from_secs(60), start, Fixed::default())
.unwrap();
(0..200u64)
.map(|key| history.observe(&key, start))
.collect::<Vec<_>>()
};
let first = run();
assert_eq!(first, run());
assert!(first.iter().any(|seen| *seen), "tiny filter must collide");
assert!(
SecondSight::with_hasher(31, Duration::from_secs(1), start, Fixed::default()).is_none()
);
let mut heat = Heat::with_hasher(1, Fixed::default()).unwrap();
assert!(heat.track(&1u64, start));
assert!(!heat.track(&2u64, start));
assert!(Heat::<u64, Fixed>::with_hasher(0, Fixed::default()).is_none());
}

#[test]
fn exact_heat_is_bounded_saturates_decays_and_forgets() {
let now = Instant::now();
Expand Down
Loading
Loading