Putative fix for mutable special placement #51574
Merged
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.
Summary
None
Purpose of change
I think I figured out why mutable special placement was sometimes failing. Some joins could be postponed but others could appear pointing at the same tile and be satisfied in the absence of the postponed joins. Then, when the postponed joins are restored they cannot be satisfied.
Describe the solution
Avoid this by keeping track of the tiles with postponed joins and ensuring that they new joins pointing at the same tiles are added directly to the postponed list rather than the unresolved list.
Describe alternatives you've considered
When these new joins appear we could re-insert the postponed joins for that tile back into the unresolved list, since there's now some hope that they could be resolved. But that would be more complicated.
Testing
I was never able to reliably reproduce the problem, and it happens with very low probability, so it's hard to test. We'll just have to see whether the problem recurs in CI sometime.
I did spawn a few anthills to verify that it's not obviously broken.
Additional context
Thanks to @eltank for providing the test failure log that helped track down the issue.