mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-26 09:32:01 +00:00
update ClusterDiscovery::ConcurrentFlags::set
This commit is contained in:
parent
a76e93209d
commit
3934e99dce
@ -60,20 +60,17 @@ public:
|
|||||||
|
|
||||||
void set(const T & key)
|
void set(const T & key)
|
||||||
{
|
{
|
||||||
setFlag(key, true);
|
auto it = flags.find(key);
|
||||||
cv.notify_one();
|
if (it == flags.end())
|
||||||
}
|
throw DB::Exception(ErrorCodes::LOGICAL_ERROR, "Unknown value '{}'", key);
|
||||||
|
it->second = true;
|
||||||
/// `need_update` expected to be value from `flags` corresponding to some key
|
|
||||||
void set(std::atomic_bool & need_update)
|
|
||||||
{
|
|
||||||
any_need_update = true;
|
any_need_update = true;
|
||||||
need_update = true;
|
|
||||||
cv.notify_one();
|
cv.notify_one();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// waits unit at least one flag is set
|
/// waits unit at least one flag is set
|
||||||
/// caller should handle all set flags (or set it again manually)
|
/// caller should handle all set flags (or set it again manually)
|
||||||
|
/// note: keys of returen map should not be changed!
|
||||||
std::unordered_map<T, std::atomic_bool> & wait(std::atomic_bool & finished, std::chrono::milliseconds timeout)
|
std::unordered_map<T, std::atomic_bool> & wait(std::atomic_bool & finished, std::chrono::milliseconds timeout)
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> lk(mu);
|
std::unique_lock<std::mutex> lk(mu);
|
||||||
@ -89,16 +86,6 @@ public:
|
|||||||
void notify() { cv.notify_one(); }
|
void notify() { cv.notify_one(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setFlag(const T & key, bool value)
|
|
||||||
{
|
|
||||||
any_need_update = any_need_update || value;
|
|
||||||
|
|
||||||
auto it = flags.find(key);
|
|
||||||
if (it == flags.end())
|
|
||||||
throw DB::Exception(ErrorCodes::LOGICAL_ERROR, "Unknown value '{}'", key);
|
|
||||||
it->second = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::condition_variable cv;
|
std::condition_variable cv;
|
||||||
std::mutex mu;
|
std::mutex mu;
|
||||||
|
|
||||||
@ -395,7 +382,8 @@ bool ClusterDiscovery::runMainThread()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
clusters_to_update->set(need_update);
|
/// no need to trigger convar, will retry after timeout in `wait`
|
||||||
|
need_update = true;
|
||||||
LOG_WARNING(log, "Cluster '{}' wasn't updated, will retry", cluster_name);
|
LOG_WARNING(log, "Cluster '{}' wasn't updated, will retry", cluster_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user