mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-24 02:30:51 +00:00
Merge pull request #27807 from ClickHouse/fix_bug_checking_drop_range
Fix `Unexpected merged part intersects drop range`
This commit is contained in:
commit
4e9bc06fcf
@ -2395,7 +2395,7 @@ MergeTreeData::DataPartsVector MergeTreeData::removePartsInRangeFromWorkingSet(c
|
||||
/// It's a DROP PART and it's already executed by fetching some covering part
|
||||
bool is_drop_part = !drop_range.isFakeDropRangePart() && drop_range.min_block;
|
||||
|
||||
if (is_drop_part && (part->info.min_block != drop_range.min_block || part->info.max_block != drop_range.max_block || part->info.getDataVersion() != drop_range.getDataVersion()))
|
||||
if (is_drop_part && (part->info.min_block != drop_range.min_block || part->info.max_block != drop_range.max_block || part->info.getMutationVersion() != drop_range.getMutationVersion()))
|
||||
{
|
||||
/// Why we check only min and max blocks here without checking merge
|
||||
/// level? It's a tricky situation which can happen on a stale
|
||||
@ -2412,7 +2412,7 @@ MergeTreeData::DataPartsVector MergeTreeData::removePartsInRangeFromWorkingSet(c
|
||||
/// So here we just check that all_1_3_1 covers blocks from drop
|
||||
/// all_2_2_2.
|
||||
///
|
||||
bool is_covered_by_min_max_block = part->info.min_block <= drop_range.min_block && part->info.max_block >= drop_range.max_block && part->info.getDataVersion() >= drop_range.getDataVersion();
|
||||
bool is_covered_by_min_max_block = part->info.min_block <= drop_range.min_block && part->info.max_block >= drop_range.max_block && part->info.getMutationVersion() >= drop_range.getMutationVersion();
|
||||
if (is_covered_by_min_max_block)
|
||||
{
|
||||
LOG_INFO(log, "Skipping drop range for part {} because covering part {} already exists", drop_range.getPartName(), part->name);
|
||||
|
@ -65,6 +65,12 @@ struct MergeTreePartInfo
|
||||
&& mutation >= rhs.mutation;
|
||||
}
|
||||
|
||||
/// Return part mutation version, if part wasn't mutated return zero
|
||||
Int64 getMutationVersion() const
|
||||
{
|
||||
return mutation ? mutation : 0;
|
||||
}
|
||||
|
||||
/// True if parts do not intersect in any way.
|
||||
bool isDisjoint(const MergeTreePartInfo & rhs) const
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user