Uh oh!
There was an error while loading. Please reload this page.
[fix](checker) Avoid false-positive leaked delete bitmaps for unexpired job tmp rowsets - #64313
Conversation
…red job tmp rowsets The delete bitmap inverted check reported a delete bitmap as leaked when its owning rowset was not found among the committed rowsets / pending delete bitmaps of the tablet. However, a compaction/SC job writes delete bitmaps keyed by its tmp output rowset id before the job commits and makes the rowset visible. During that window the delete bitmap exists while the rowset is not yet in the committed list, so it was wrongly flagged as leaked. Add InstanceChecker::collect_unexpired_job_tmp_rowsets() to gather, per tablet, the rowset ids of job tmp rowsets that are still alive from the recycler's point of view, and skip them during the inverted check. The same calculate_tmp_rowset_expired_time() threshold as the recycler is reused (now exposed via recycler.h) so a delete bitmap is never reported as leaked while its tmp rowset is still alive from the recycler's view. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
hello-stephen
commented
Jun 9, 2026
Thank you for your contribution to Apache Doris. Please clearly describe your PR:
|
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
mymeiyi
commented
Jun 9, 2026
/review |
There was a problem hiding this comment.
Review conclusion: request changes.
Critical checkpoints:
- Goal/test coverage: The PR aims to avoid false leaked-delete-bitmap reports for still-live job tmp rowsets and adds focused unit coverage for unexpired, expired, and non-job tmp rowsets. The main path is covered, but the new overflow path is not safely handled.
- Scope/focus: The change is small and localized to the Cloud recycler checker.
- Concurrency/lifecycle: No new shared mutable state or long-lived lifecycle issue was found; this is a synchronous checker scan.
- Configuration/compatibility: No new config or storage/protocol compatibility change.
- Parallel paths: The checker now reuses the recycler tmp-rowset expiration helper, which is appropriate.
- Error handling/data correctness: One issue: when the collection cap is reached, the checker continues with incomplete tmp-rowset state and can report live delete bitmaps as leaked.
- Testing: Positive/negative tests were added, but the cap/overflow case that causes false positives is missing.
- Observability/performance: Logging exists for the cap, but logging does not prevent an incorrect checker result.
User focus: No additional user-provided focus points were listed.
Uh oh!
There was an error while loading. Please reload this page.
PR approved by at least one committer and no changes requested. |
mymeiyi
commented
Jun 9, 2026
run buildall |
hello-stephen
commented
Jun 9, 2026
Cloud UT Coverage ReportIncrement line coverage Increment coverage report
|
Uh oh!
There was an error while loading. Please reload this page.
…ed job tmp rowsets (#64313) The delete bitmap inverted check reported a delete bitmap as leaked when its owning rowset was not found among the committed rowsets / pending delete bitmaps of the tablet. However, a compaction job writes delete bitmaps keyed by its tmp output rowset id before the job commits and makes the rowset visible. During that window the delete bitmap exists while the rowset is not yet in the committed list, so it was wrongly flagged as leaked. Add InstanceChecker::collect_unexpired_job_tmp_rowsets() to gather, per tablet, the rowset ids of job tmp rowsets that are still alive from the recycler's point of view, and skip them during the inverted check. The same calculate_tmp_rowset_expired_time() threshold as the recycler is reused (now exposed via recycler.h) so a delete bitmap is never reported as leaked while its tmp rowset is still alive from the recycler's view. --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
The delete bitmap inverted check reported a delete bitmap as leaked when its owning rowset was not found among the committed rowsets / pending delete bitmaps of the tablet. However, a compaction job writes delete bitmaps keyed by its tmp output rowset id before the job commits and makes the rowset visible. During that window the delete bitmap exists while the rowset is not yet in the committed list, so it was wrongly flagged as leaked.
Add InstanceChecker::collect_unexpired_job_tmp_rowsets() to gather, per tablet, the rowset ids of job tmp rowsets that are still alive from the recycler's point of view, and skip them during the inverted check. The same calculate_tmp_rowset_expired_time() threshold as the recycler is reused (now exposed via recycler.h) so a delete bitmap is never reported as leaked while its tmp rowset is still alive from the recycler's view.