Conversation
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8e0ec8de87
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| /// The entry left the pipeline — drop its in-process condemn-marker confirmation. | ||
| meta_writer->forgetCondemnMarker(entry.ref, entry.token); | ||
| } | ||
| redeleteBlobs(redelete_now, layout, op, new_round, generation, round_work_budget, report, outcomes[shard]); |
There was a problem hiding this comment.
Batch re-deletes across shard boundaries
When cas_gc_shards > 1, this invocation completes and waits for one shard before the loop reaches the next shard, so re-deletes from different shards never overlap. If each shard has fewer than cas_gc_redelete_min_batch_size pending entries, the entire phase remains sequential despite cas_gc_redelete_concurrency > 1; even larger per-shard batches cannot use more concurrency than one shard contains. Schedule the phase's eligible entries before a single wait so the configured fan-out applies across shards.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Default value gc_shards = 1 . Yes, in some cases we could obtain seq execution. But in these cases we don;t have a lot blobs. I suggest skip this impovment now.
| CasOperation job_op = store->openRequests().resume(gen); | ||
| io_results[i] = performRedeleteIo(entries[i], layout, job_op); |
There was a problem hiding this comment.
Account for worker I/O in pending-delete metrics
When parallel re-delete is enabled, performRedeleteIo executes the blob HEAD and conditional DELETE on these pool threads, while GcPhaseTimer snapshots only the round thread's ProfileEvents. As a result, the pending_deletes row in system.cas_gc_log omits the underlying request and retry counters precisely when cas_gc_redelete_concurrency > 1, breaking per-phase operation accounting; collect the worker deltas or expose equivalent explicit phase metrics.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
This is a regression only when the feature is enabled. It is a known limitation that read-ahead also has, and it will be fixed in a separate PR for both places at once.
|
doc combining my + AI review https://gist.github.com/filimonov/a5377e47bf29f92fe12b345d10fe29ad spec + plan to rework (you can pass it to AI agent) https://gist.github.com/filimonov/eb2ef24fbc8a49e2d3cbb43fe43795d8 |
Signed-off-by: Konstantin Morozov <just.morozov.k@gmail.com>
Signed-off-by: Konstantin Morozov <just.morozov.k@gmail.com>
Signed-off-by: Konstantin Morozov <just.morozov.k@gmail.com>
Signed-off-by: Konstantin Morozov <just.morozov.k@gmail.com>
Signed-off-by: Konstantin Morozov <just.morozov.k@gmail.com>
Signed-off-by: Konstantin Morozov <just.morozov.k@gmail.com>
Signed-off-by: Konstantin Morozov <just.morozov.k@gmail.com>
Signed-off-by: Konstantin Morozov <just.morozov.k@gmail.com>
Signed-off-by: Konstantin Morozov <just.morozov.k@gmail.com>
077b088 to
3a13b95
Compare
PR #2351 Distributed-Systems Audit
Summary2 confirmed defects, both Medium. No safety defects found. Fencing, the etag-conditional delete, and crash recovery behave as they did before the PR.
Model assumptions
Confirmed defects1. Re-delete no longer fails fastSeverity: Medium · Fault class: Backpressure & resource limits / Partial & gray failure Impact. While the object store is failing, one GC round works through its whole re-delete batch instead of stopping at the first error. The batch holds up to 5000 entries (
Anchor.
Before this PR, the first Trigger. The object store is unavailable or throttling (503 or connection refused) for longer than the retry window, while a shard has 17 or more Why it's a defect. The worst-case round length, the outage load, and the time Fix direction. Stop at the first failure: set a shared flag that each task checks before it starts, and skip entries that haven't started. Alternatively, freeze one round-level deadline with Regression test direction. Use a backend that answers every HEAD with 503, and give the round 100 entries. Assert that the round takes about one policy window and sends no more than concurrency × attempts requests, at both 2. Released setting removed without an aliasSeverity: Medium · Fault class: Configuration & version skew Impact.
The PR's docs say the old name is "rejected", which is only true for the prefixed spelling. Anchor.
Trigger. Upgrade a node from Why it's a defect. A released setting now either stops the node at startup or is silently ignored, depending on spelling. The silent case contradicts the documented behaviour. Fix direction. Accept Regression test direction. In Coverage summary
Deferred. Can one shard's Limits. Static review of the PR head |
PR #2351 CI Verification ReportVerification (2026-09-24)
VerdictNo failure is caused by this PR. CI can be approved. Rebase onto 9 checks fail, plus the aggregate
All failing jobs failed the same way on every attempt. Rerunning them won't turn them green. Still red on this run — categorized
Pre-existing flaky — evidenceRates are runs failed / runs over the last 45 days on 26.6, x86_64. "Branch" means Stateless tsan CAS shard
Alter attach part 3
cas_selects
cas_lightweight_delete_4
Code-review notes (not CI)These don't affect the CI verdict.
Recommendations
|
Bench results:
Changelog category (leave one):
Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md):
Added cas_gc_io_concurrency to run blob deletes in the CAS GC pending_deletes phase in parallel.
Documentation entry for user-facing changes
...
CI/CD Options
Exclude tests:
Regression jobs to run: