[useId] Trade random collisions for collisions on overflow #29781
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.
Previously ids were picked at random from 1-1.000.000.000 (1e9). Naively one could assume that the probability of a collision if two numbers are drawn is 1e9 * 1e9. However, the birthday problem puts the probability at ~1e9 (see "Probability of a shared birthday").
The problem is that we fairly quickly reach a point were collisions are pretty likely e.g. with 200 random ids on a page (conceivable with inputs and tooltips on normal pages or even more problematic in our documentation) we have a 1:50.000 collision chance. https://instacalc.com/28845 for experimentation.
Instead, we can just increment and delay collisions to the point of integer overflow (at which point we almost certainly had a collision anyway)