fix: handle logtail compaction during dirty scan#23664
fix: handle logtail compaction during dirty scan#23664mergify[bot] merged 4 commits intomatrixorigin:mainfrom
Conversation
PR Compliance Guide 🔍Below is a summary of compliance checks for this PR:
Compliance status legend🟢 - Fully Compliant🟡 - Partial Compliant 🔴 - Not Compliant ⚪ - Requires Further Human Verification 🏷️ - Compliance label |
||||||||||||||||||||||||
PR Code Suggestions ✨Explore these optional code suggestions:
|
||||||||||||||
Merge Queue Status✅ The pull request has been merged at 1c65cdf This pull request spent 54 minutes 22 seconds in the queue, including 54 minutes 10 seconds running CI. Required conditions to merge
|
User description
What type of PR is this?
Which issue(s) this PR fixes:
issue #23631
What this PR does / why we need it:
Avoid missing dirty tables when logtail blocks are compacted during
dirty scan. The reader now falls back to block summaries and waits
for compaction summary to be published before merging.
PR Type
Bug fix
Description
Handle logtail block compaction during dirty table scan
Add fallback to block summaries when memo becomes nil
Wait for compaction summary publication before merging
Simplify IsDirtyOnTable by reusing GetDirty logic
Diagram Walkthrough
flowchart LR A["GetDirty scan"] --> B{"Block memo nil?"} B -->|No| C["Merge memo dirty data"] B -->|Yes| D["Set compact flag"] D --> E["Wait for summary"] E --> F["Merge summary data"] F --> G["Return dirty tree"] C --> GFile Walkthrough
reader.go
Handle block compaction during dirty scanpkg/vm/engine/tae/logtail/reader.go
runtimeimport forGosched()callmergeSummary()helper function to consolidate table merginglogic
GetDirty()to detect and handle block compaction duringiteration
postBlkOpcallback to wait for compaction summary and merge dataIsDirtyOnTable()to reuseGetDirty()instead of customlogic
GetMaxLSN()call signature to include newpostBlkOpparametertable.go
Add post-block operation callbackpkg/vm/engine/tae/logtail/table.go
postBlkOpparameter toForeachRowInBetween()function signaturepost-block operations