fix(storage): reconcile multi-pool writes and conditional deletes - #178
Merged
Conversation
Signed-off-by: Feng Ruohang <rh@vonng.com>
Signed-off-by: Feng Ruohang <rh@vonng.com>
Vonng
force-pushed
the
codex/multipool-correctness-20260911
branch
from
September 11, 2026 12:06
a392c0f to
51d4134
Compare
Signed-off-by: Feng Ruohang <rh@vonng.com>
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.
Multi-pool replica writes can overwrite or hide newer Object Lock metadata, and conditional DELETE can select the wrong version, leave another readable copy, or acknowledge a failed deletion. Use the existing pools-layer object lock across writes, completion and healing; reconcile each ordered metadata field across the addressed version’s copies, and retire competing copies only after replacement commits. Conditional DELETE checks the logical version once and propagates cleanup failures while preserving version history.
The new two-pool fixtures reproduce these failures and cover draining/rebalancing owners, persisted uploads, null versions, metadata COPY, concurrent mutations, and cleanup retries. Retirement also preserves remote-tier references still owned by a surviving copy, including restored objects and failed deletion, while distinct references remain eligible for garbage collection. The retained Linux acceptance report also completes the agreed #116 V1 check: 0806, 0903 and the candidate all recovered within the bounded data canary and retained every acknowledged object. The documented startup window remains observable; the health API semantics are unchanged.
Validation: full cmd and internal suites, focused race checks, Linux/arm64 pooled/replica/delete/movement tests, lint, vet, generated-file and branding/entrypoint checks. Linux OIDC login/add-provider and negative-control checks confirm the TLS fix already on main. The hidden affected OIDC deployment still requires retesting, so #154 remains open.
Compatibility: the on-disk format needs no migration. Multi-pool conditional mutations require readable candidate state and successful cleanup; failures are returned to the client. The existing retained MINIO protocol/configuration identifiers remain intact.
Evidence: release acceptance report. All commits carry the required DCO sign-off.
Closes #133.
Closes #144.
Closes #116.
Refs #154.