Fix minmax partition index during merge in case of empty part in future parts

It is possible to get empty part in future parts, during merging, that
can be created in case of there is information about this part in
zookeeper, but no replicas has it
(StorageReplicatedMergeTree::createEmptyPartInsteadOfLost())

And this may incorrectly initialize min value, which will be updated
after one more merge (since during that merge there will be no more
information about empty part) or OPTIMIZE.
This commit is contained in:
Azat Khuzhin 2021-12-03 22:29:33 +03:00
parent ae214ffc5b
commit 82e0e9d27c

View File

@ -501,7 +501,14 @@ bool MergeTask::VerticalMergeStage::finalizeVerticalMergeForAllColumns() const
bool MergeTask::MergeProjectionsStage::mergeMinMaxIndexAndPrepareProjections() const bool MergeTask::MergeProjectionsStage::mergeMinMaxIndexAndPrepareProjections() const
{ {
for (const auto & part : global_ctx->future_part->parts) for (const auto & part : global_ctx->future_part->parts)
global_ctx->new_data_part->minmax_idx->merge(*part->minmax_idx); {
/// Skip empty parts,
/// (that can be created in StorageReplicatedMergeTree::createEmptyPartInsteadOfLost())
/// since they can incorrectly set min,
/// that will be changed after one more merge/OPTIMIZE.
if (!part->isEmpty())
global_ctx->new_data_part->minmax_idx->merge(*part->minmax_idx);
}
/// Print overall profiling info. NOTE: it may duplicates previous messages /// Print overall profiling info. NOTE: it may duplicates previous messages
{ {