Repository navigation
Conversation
dajac
force-pushed
the
uniform2-fuzzer
branch
5 times, most recently
from
September 17, 2026 13:24
d1c087f to
0909a67
Compare
dajac
force-pushed
the
uniform2-assignor
branch
from
September 17, 2026 16:10
519d9c1 to
b98d977
Compare
dajac
force-pushed
the
uniform2-fuzzer
branch
2 times, most recently
from
September 18, 2026 07:39
24db529 to
3019427
Compare
dajac
force-pushed
the
uniform2-rack
branch
from
September 18, 2026 07:58
03c06ab to
b57d694
Compare
dajac
force-pushed
the
uniform2-fuzzer
branch
from
September 18, 2026 07:58
3019427 to
48486c3
Compare
dajac
force-pushed
the
uniform2-rack
branch
from
September 18, 2026 13:12
b57d694 to
fc0ebc2
Compare
dajac
force-pushed
the
uniform2-fuzzer
branch
from
September 18, 2026 13:12
48486c3 to
01b0dd3
Compare
Uniform2AssignorFuzzTest runs the assignor over seeded random groups and sequences of events (members joining and leaving, alone or in bulk, partitions added, subscriptions changing, replicas and racks moving) generated by Uniform2FuzzScenario, and checks the documented properties at every step: completeness, spread and balance, order independence of members, topics and partitions, fixed point with the same partition set instances, the rack mode equivalences, movement bounds for single joins and leaves, and rack alignment within a small gap of a max-flow upper bound. For tiny groups, a brute force oracle enumerates every assignment having the properties and checks that the number of moved partitions is the smallest, or one above it. Failures print the seed, the event and a dump of the scenario, so that they can be reproduced in a unit test. The default run covers 2000 seeds with 12 events each in a few seconds. The budget can be raised with uniform2.fuzz.seeds, one seed can be replayed with uniform2.fuzz.seed, uniform2.fuzz.events lengthens the event sequences for soak runs, and uniform2.fuzz.reference adds a comparison with the uniform assignor to the summary. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…flow in the fuzzer The fuzzer gains a per topic oracle for tiny groups using racks: a minimum cost flow from the partitions to the members, for the quotas of the result, gives the largest number of aligned partitions and the fewest moves reaching it. A topic reaching that alignment must move at most 8 partitions more than the fewest, and over a run the excess is at most 5% of the topics checked. The tolerance cannot be one move as for the plain oracle: the remaining excess comes from the maximum flow choosing between the groups able to serve a rack, and between the members of a rack, without looking at who could take a leftover back. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
dajac
force-pushed
the
uniform2-rack
branch
from
September 18, 2026 14:27
fc0ebc2 to
17ba635
Compare
dajac
force-pushed
the
uniform2-fuzzer
branch
from
September 18, 2026 14:27
01b0dd3 to
5957617
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Uniform2AssignorFuzzTest runs the assignor over seeded random groups
and sequences of events (members joining and leaving, alone or in
bulk, partitions added, subscriptions changing, replicas and racks
moving) generated by Uniform2FuzzScenario, and checks the documented
properties at every step: completeness, spread and balance, order
independence of members, topics and partitions, fixed point with the
same partition set instances, the rack mode equivalences, movement
bounds for single joins and leaves, and rack alignment within a small
gap of a max-flow upper bound. For tiny groups, a brute force oracle
enumerates every assignment having the properties and checks that the
number of moved partitions is the smallest, or one above it. Failures
print the seed, the event and a dump of the scenario, so that they can
be reproduced in a unit test.
The default run covers 2000 seeds with 12 events each in a few
seconds. The budget can be raised with uniform2.fuzz.seeds, one seed
can be replayed with uniform2.fuzz.seed, uniform2.fuzz.events lengthens
the event sequences for soak runs, and uniform2.fuzz.reference adds a
comparison with the uniform assignor to the summary.
Review PR on the fork, stacked on
uniform2-assignor. The first commit is the fuzzer, the second its rack aware oracle.ef324b059fMINOR: Add a fuzzer for the uniform2 consumer group assignor0909a67581MINOR: Check the rack aware uniform2 movement against a minimum cost flow in the fuzzer🤖 Generated with Claude Code