mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-10-21 07:50:49 +00:00
Merge
This commit is contained in:
commit
542d904058
@ -231,7 +231,8 @@ public:
|
|||||||
shutdown_called(false),
|
shutdown_called(false),
|
||||||
chunk_merger(chunk_merger_),
|
chunk_merger(chunk_merger_),
|
||||||
context(context_),
|
context(context_),
|
||||||
log(log_)
|
log(log_),
|
||||||
|
merging(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,6 +251,8 @@ private:
|
|||||||
|
|
||||||
Logger * log;
|
Logger * log;
|
||||||
time_t last_nothing_to_merge_time = 0;
|
time_t last_nothing_to_merge_time = 0;
|
||||||
|
|
||||||
|
std::atomic<bool> merging;
|
||||||
};
|
};
|
||||||
|
|
||||||
StorageChunkMerger::StorageChunkMerger(
|
StorageChunkMerger::StorageChunkMerger(
|
||||||
@ -297,6 +300,27 @@ StorageChunkMerger::~StorageChunkMerger()
|
|||||||
shutdown();
|
shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct BoolLock
|
||||||
|
{
|
||||||
|
BoolLock(std::atomic<bool> & flag_) : flag(flag_), locked(false) {}
|
||||||
|
|
||||||
|
bool trylock()
|
||||||
|
{
|
||||||
|
bool expected = false;
|
||||||
|
locked = flag.compare_exchange_weak(expected, true);
|
||||||
|
return locked;
|
||||||
|
}
|
||||||
|
|
||||||
|
~BoolLock()
|
||||||
|
{
|
||||||
|
if (locked)
|
||||||
|
flag.store(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::atomic<bool> & flag;
|
||||||
|
bool locked;
|
||||||
|
};
|
||||||
|
|
||||||
bool StorageChunkMerger::MergeTask::merge()
|
bool StorageChunkMerger::MergeTask::merge()
|
||||||
{
|
{
|
||||||
time_t now = time(0);
|
time_t now = time(0);
|
||||||
@ -306,6 +330,10 @@ bool StorageChunkMerger::MergeTask::merge()
|
|||||||
if (shutdown_called)
|
if (shutdown_called)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
BoolLock lock(merging);
|
||||||
|
if (!lock.trylock())
|
||||||
|
return false;
|
||||||
|
|
||||||
bool merged = false;
|
bool merged = false;
|
||||||
|
|
||||||
try
|
try
|
||||||
|
Loading…
Reference in New Issue
Block a user