Repository navigation
Conversation
Replicas decided their spill behavior themselves, from --no-swap, a compute flag read once at pool install, and a fallback to swap when the file store failed to open. Storage's choice between upsert v1 and v2 hung off the same inputs, and a reviewer found that install-order-dependent inputs could put workers of one replica on different operator graphs. The controller now decides the backend when it provisions a replica and passes it as --spill-backend=swap|file|none. File requires a scratch directory, and clusterd halts without one or when the file store fails to open. The none backend keeps compressed extents resident. Upsert v2 renders whenever the backend is not none. The file-extents flag moves to the controller and is read per replica at provisioning. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The sqllogictest runner places replica scratch directories under the container's tmpfs /tmp. The pool's file store refuses memory-backed directories, and a replica told to spill to files halts when its store cannot open, so every replica crash-looped and every shard timed out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
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.
Replicas decided their spill behavior themselves:
--no-swapfrom the Kubernetes orchestrator, a compute flag read once when the buffer pool was installed, and a silent fallback to swap when the file store failed to open. Storage's choice between upsert v1 and v2 depended on the same inputs. Review of #40697 showed that inputs depending on install order or on one process's file store can put workers of one replica on different operator graphs.The controller now decides the spill backend when it provisions a replica and passes
--spill-backend=swap|file|noneto every process:filewhenenable_column_paged_batcher_file_extentsis on for the replica and its size has a scratch disk. The flag moves from compute to the controller, stays replica-scoped, and takes effect when a replica is next provisioned.swapwhen the size hasswap_enabled.noneotherwise.clusterd halts when told
filewithout a scratch directory, and the pool halts when the file store cannot be opened, replacing the fallback to swap and its gauge. A newnonepool backend keeps compressed extents resident and never pages them out. Upsert v2 renders, and the storage spill gate installs the pool, whenever the backend is notnone.--no-swapis gone.Production keeps its current behavior: swap sizes get
swap, disk sizes getnoneand keep upsert v1, and the file flag is off. Local and CI replica sizes set noswap_enabled, so they getfilewhile the CI flag is on andnone(upsert v1) when it is varied off.Supersedes #40697.
New test:
no_store_keeps_extents_resident.test/clusterstarts its file-store clusterd with--spill-backend=file.🤖 Generated with Claude Code