Fix race on total_size

This commit is contained in:
Antonio Andelic 2023-01-02 14:18:43 +00:00
parent 24a3085251
commit e07d820156

View File

@ -186,7 +186,7 @@ public:
size_t getTotalSize() const size_t getTotalSize() const
{ {
return total_size; return total_size.load(std::memory_order_relaxed);
} }
~Impl() ~Impl()
@ -283,7 +283,7 @@ private:
buffer.reserve(block.rows()); buffer.reserve(block.rows());
for (UInt64 idx : idxs.getData()) for (UInt64 idx : idxs.getData())
{ {
total_size += temp_buffer[idx].info->size; total_size.fetch_add(temp_buffer[idx].info->size, std::memory_order_relaxed);
buffer.emplace_back(std::move(temp_buffer[idx])); buffer.emplace_back(std::move(temp_buffer[idx]));
} }
} }
@ -291,7 +291,7 @@ private:
{ {
buffer = std::move(temp_buffer); buffer = std::move(temp_buffer);
for (const auto & [_, info] : buffer) for (const auto & [_, info] : buffer)
total_size += info->size; total_size.fetch_add(info->size, std::memory_order_relaxed);
} }
/// Set iterator only after the whole batch is processed /// Set iterator only after the whole batch is processed
@ -357,7 +357,7 @@ private:
ThreadPool list_objects_pool; ThreadPool list_objects_pool;
ThreadPoolCallbackRunner<ListObjectsOutcome> list_objects_scheduler; ThreadPoolCallbackRunner<ListObjectsOutcome> list_objects_scheduler;
std::future<ListObjectsOutcome> outcome_future; std::future<ListObjectsOutcome> outcome_future;
size_t total_size = 0; std::atomic<size_t> total_size = 0;
}; };
StorageS3Source::DisclosedGlobIterator::DisclosedGlobIterator( StorageS3Source::DisclosedGlobIterator::DisclosedGlobIterator(