Consolidation is asked of every claim that changed what an order holds, and the common answer is that there is nothing to do: the party is already in one run, or was put into one by the claim before. Reaching that answer costs a read of every block the party sits in.
VenuePlacementProvider::consolidate() builds the party's context and reads its blocks, and only then hands the party to the strategy, whose first act is to answer NULL when the party sits in fewer than two fragments. That test is made by PlaceGeometry::fragments() from the party's own places alone and needs no read of what is free, so the read that precedes it is spent to be told it was not needed.
Two things make this the ordinary case rather than an edge. A consolidation is asked on every claim where any quantity changed, and a party split by one claim has already been put back together by it. A booker stepping a quantity up one at a time therefore pays a block read per step, and every one after the first is spent on a party that is already whole.
The fix is to ask the strategy whether a party is worth reconsidering before reading anything, and to read only where it says yes. The question belongs on SeatingStrategyInterface beside consolidate(), because deciding when a party could sit better is the strategy's own business; Together answers it with the three tests it already makes first, every one of them read from the party's own places. The grouping by area is worked out from the anchors too, so it moves above the read with the question.
What does not change is which parties are consolidated, or how. It is the same test, asked before the read instead of after it.
Independent of #3617880: A booker who asks to move to another part of the house is refused for a seat chosen before the wait, which wants the composition itself moved under the locks, and worth doing either way: it also shrinks what that issue would put inside a lock.
AI-Generated: Yes (Claude Code was used to draft this issue summary and to write the code, the documentation and the test on the merge request. I review and run the work before it is merged.)
Issue fork yoyaku-3618443
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
Comments
Comment #3
mably commentedComment #5
mably commented