#pragma once #include #include #include namespace DB { class StorageReplicatedMergeTree; class AsyncBlockIDsCache { struct Cache; using CachePtr = std::shared_ptr; std::vector getChildren(); void update(); public: explicit AsyncBlockIDsCache(StorageReplicatedMergeTree & storage_); void start(); void stop() { task->deactivate(); } Strings detectConflicts(const Strings & paths, UInt64 & last_version); private: StorageReplicatedMergeTree & storage; std::atomic last_updatetime; const std::chrono::milliseconds update_min_interval; std::mutex mu; CachePtr cache_ptr; std::condition_variable cv; UInt64 version = 0; const String path; BackgroundSchedulePool::TaskHolder task; const String log_name; Poco::Logger * log; }; using AsyncBlockIDsCachePtr = std::shared_ptr; }