// Copyright (c) 2011-present, Facebook, Inc. All rights reserved. // This source code is licensed under the BSD-style license found in the // LICENSE file in the root directory of this source tree. An additional grant // of patent rights can be found in the PATENTS file in the same directory. // This source code is also licensed under the GPLv2 license found in the // COPYING file in the root directory of this source tree. #pragma once #include #include #include #include namespace rocksdb { class ColumnFamilyData; // Unless otherwise noted, all methods on FlushScheduler should be called // only with the DB mutex held or from a single-threaded recovery context. class FlushScheduler { public: FlushScheduler() : head_(nullptr) {} // May be called from multiple threads at once, but not concurrent with // any other method calls on this instance void ScheduleFlush(ColumnFamilyData* cfd); // Removes and returns Ref()-ed column family. Client needs to Unref(). // Filters column families that have been dropped. ColumnFamilyData* TakeNextColumnFamily(); bool Empty(); void Clear(); private: struct Node { ColumnFamilyData* column_family; Node* next; }; std::atomic head_; #ifndef NDEBUG std::mutex checking_mutex_; std::set checking_set_; #endif // NDEBUG }; } // namespace rocksdb