// Copyright (c) 2013, 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. #include "db/flush_scheduler.h" #include #include "db/column_family.h" namespace rocksdb { void FlushScheduler::ScheduleFlush(ColumnFamilyData* cfd) { #ifndef NDEBUG assert(column_families_set_.find(cfd) == column_families_set_.end()); column_families_set_.insert(cfd); #endif // NDEBUG cfd->Ref(); column_families_.push_back(cfd); } ColumnFamilyData* FlushScheduler::GetNextColumnFamily() { ColumnFamilyData* cfd = nullptr; while (column_families_.size() > 0) { cfd = column_families_.front(); column_families_.pop_front(); if (cfd->IsDropped()) { if (cfd->Unref()) { delete cfd; cfd = nullptr; } } else { break; } } #ifndef NDEBUG if (cfd != nullptr) { auto itr = column_families_set_.find(cfd); assert(itr != column_families_set_.end()); column_families_set_.erase(itr); } #endif // NDEBUG return cfd; } bool FlushScheduler::Empty() { return column_families_.empty(); } void FlushScheduler::Clear() { for (auto cfd : column_families_) { #ifndef NDEBUG auto itr = column_families_set_.find(cfd); assert(itr != column_families_set_.end()); column_families_set_.erase(itr); #endif // NDEBUG if (cfd->Unref()) { delete cfd; } } column_families_.clear(); } } // namespace rocksdb