Skip to content

Commit

Permalink
Merge pull request #58696 from ClickHouse/backport/23.12/58624
Browse files Browse the repository at this point in the history
Backport #58624 to 23.12: Fix possible race in ManyAggregatedData dtor.
  • Loading branch information
robot-clickhouse committed Jan 11, 2024
2 parents e502a3f + 3cf7dba commit d0864ee
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 4 deletions.
2 changes: 1 addition & 1 deletion src/Interpreters/Aggregator.cpp
Expand Up @@ -2856,7 +2856,7 @@ void NO_INLINE Aggregator::mergeBucketImpl(
}
}

ManyAggregatedDataVariants Aggregator::prepareVariantsToMerge(ManyAggregatedDataVariants & data_variants) const
ManyAggregatedDataVariants Aggregator::prepareVariantsToMerge(ManyAggregatedDataVariants && data_variants) const
{
if (data_variants.empty())
throw Exception(ErrorCodes::EMPTY_DATA_PASSED, "Empty data passed to Aggregator::prepareVariantsToMerge.");
Expand Down
2 changes: 1 addition & 1 deletion src/Interpreters/Aggregator.h
Expand Up @@ -1230,7 +1230,7 @@ class Aggregator final
*/
BlocksList convertToBlocks(AggregatedDataVariants & data_variants, bool final, size_t max_threads) const;

ManyAggregatedDataVariants prepareVariantsToMerge(ManyAggregatedDataVariants & data_variants) const;
ManyAggregatedDataVariants prepareVariantsToMerge(ManyAggregatedDataVariants && data_variants) const;

using BucketToBlocks = std::map<Int32, BlocksList>;
/// Merge partially aggregated blocks separated to buckets into one data structure.
Expand Down
4 changes: 2 additions & 2 deletions src/Processors/Transforms/AggregatingTransform.cpp
Expand Up @@ -732,14 +732,14 @@ void AggregatingTransform::initGenerate()
{
if (!skip_merging)
{
auto prepared_data = params->aggregator.prepareVariantsToMerge(many_data->variants);
auto prepared_data = params->aggregator.prepareVariantsToMerge(std::move(many_data->variants));
auto prepared_data_ptr = std::make_shared<ManyAggregatedDataVariants>(std::move(prepared_data));
processors.emplace_back(
std::make_shared<ConvertingAggregatedToChunksTransform>(params, std::move(prepared_data_ptr), max_threads));
}
else
{
auto prepared_data = params->aggregator.prepareVariantsToMerge(many_data->variants);
auto prepared_data = params->aggregator.prepareVariantsToMerge(std::move(many_data->variants));
Pipes pipes;
for (auto & variant : prepared_data)
{
Expand Down

0 comments on commit d0864ee

Please sign in to comment.