fix: transient table does not work as expected inside explicit transaction #18215
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.
I hereby agree to the terms of the CLA available at: https://docs.databend.com/dev/policies/cla/
Summary
Enhanced Timestamp Handling in Explicit Transactions
To ensure vacuum operation safety, a critical invariant should be maintained (among others): any successfully committed table snapshot must have all new table data (segments, blocks, indexes) timestamped greater than or equal to its direct predecessor snapshot's timestamp.
The current implementation maintains this invariant but is overly conservative and may cause unexpected exceptions during transient table mutations within an explicit transaction (issue #18159). This issue also occurs when
data_retention_time_in_days
is set to 0.This PR:
Adjust Auto-Vacuum Trigger Timing
Auto-vacuum execution now occurs only after successful transaction commit.
Table Meta Timestamp Cache Clearing
Added proactive clearing of table meta timestamp cache before hooks(compaction, index refreshing) execution to resolve issues reported in #18167.
Code Organization Improvements
Test-specific code has been properly annotated with
#[cfg(test)]
to ensure it's not used outside unit tests, and fixed previous misuses of these test utilities.Tests
Type of change
This change is