Repository navigation
Conversation
Replace the parallel `io_results`, `io_errors` and `delete_submitted` vectors in `Gc::redeleteBlobs` with one `RedeleteBlobState` per entry. The observation result (`live_token`) is now separate from the delete result (`del`), so `performRedeleteIo` becomes `observeRetiredBlob`. Rename `applyRedeleteOutcome` to `recordRedeleteSuccess` and `reportRedeleteFailure` to `recordRedeleteFailure`: the delete has already run when they are called, and `Outcome` already names the persisted `GcOutcomes` log. Rename the test hook and test names to match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Move the selection of token-matched entries and their split into conditional delete chunks out of `Gc::redeleteBlobs` into `Gc::prepareConditionalDeleteChunks`. The second wave now only submits the prepared chunks, so `matched`, `delete_begin` and `delete_indices` are gone. The function and its value types are public so that the new `CASGCConditionalDeleteChunks` tests can call it without a pool or a backend request. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Move the conditional delete chunk size calculation out of `Gc::redeleteBlobs` into a method next to `Gc::bulkDeleteChunkKeys`. No behavior change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add `Gc::runRedeleteIoJobs` and use it for both the observation wave and the conditional delete wave in `Gc::redeleteBlobs`. It runs jobs inline when `concurrency <= 1` or there is at most one job, and on the GC I/O pool otherwise. It returns per-job errors and the enqueue refusal. `jobs_scheduled` still counts only observation jobs submitted to the pool. The delete wave now also runs inline at `concurrency <= 1`, and both waves use one injected enqueue refusal message. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Split the tail of `Gc::redeleteBlobs`: - `Gc::recordRedeleteResults` records failures and successes and returns the error with the lowest entry index; - `Gc::scheduleBlobMetaDeletes` schedules `.meta` deletion for `Removed` and `Gone` blobs; - `Gc::redeleteBlobs` rethrows the error after both steps. `Gc::recordRedeleteSuccess` no longer schedules `.meta` deletion, so a later batch `.meta` delete changes only `Gc::scheduleBlobMetaDeletes`. If recording throws, no `.meta` deletion is scheduled for the round; the next round records the blobs as `Absent` and schedules it then. Rename `RedeleteBlobState::del` to `removal` (it can come from the observation wave, not only from a delete) and the wave results to `observe_jobs` and `delete_jobs`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
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.
Changelog category (leave one):
Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md):
CAS garbage collection deletes retired blob bodies on S3 with batched DeleteObjects requests that carry a per-object ETag.
Documentation entry for user-facing changes
...
CI/CD Options
Exclude tests:
Regression jobs to run: