diff --git a/db/column_family.cc b/db/column_family.cc index 9cf0c0d49..45a3e9a82 100644 --- a/db/column_family.cc +++ b/db/column_family.cc @@ -506,6 +506,10 @@ void ColumnFamilySet::UpdateMaxColumnFamily(uint32_t new_max_column_family) { max_column_family_ = std::max(new_max_column_family, max_column_family_); } +size_t ColumnFamilySet::NumberOfColumnFamilies() const { + return column_families_.size(); +} + // under a DB mutex ColumnFamilyData* ColumnFamilySet::CreateColumnFamily( const std::string& name, uint32_t id, Version* dummy_versions, diff --git a/db/column_family.h b/db/column_family.h index b5a70e76f..991bb0112 100644 --- a/db/column_family.h +++ b/db/column_family.h @@ -302,8 +302,8 @@ class ColumnFamilyData { // family might get dropped when the DB mutex is released // * GetDefault() -- thread safe // * GetColumnFamily() -- either inside of DB mutex or call Lock() <-> Unlock() -// * GetNextColumnFamilyID(), GetMaxColumnFamily(), UpdateMaxColumnFamily() -- -// inside of DB mutex +// * GetNextColumnFamilyID(), GetMaxColumnFamily(), UpdateMaxColumnFamily(), +// NumberOfColumnFamilies -- inside of DB mutex class ColumnFamilySet { public: // ColumnFamilySet supports iteration @@ -342,6 +342,7 @@ class ColumnFamilySet { uint32_t GetNextColumnFamilyID(); uint32_t GetMaxColumnFamily(); void UpdateMaxColumnFamily(uint32_t new_max_column_family); + size_t NumberOfColumnFamilies() const; ColumnFamilyData* CreateColumnFamily(const std::string& name, uint32_t id, Version* dummy_version, diff --git a/db/db_impl.cc b/db/db_impl.cc index 4e6136281..536a52e9f 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -3684,15 +3684,17 @@ Status DBImpl::Write(const WriteOptions& options, WriteBatch* my_batch) { uint64_t flush_column_family_if_log_file = 0; uint64_t max_total_wal_size = (options_.max_total_wal_size == 0) - ? 2 * max_total_in_memory_state_ + ? 4 * max_total_in_memory_state_ : options_.max_total_wal_size; - if (alive_log_files_.begin()->getting_flushed == false && + if (versions_->GetColumnFamilySet()->NumberOfColumnFamilies() > 1 && + alive_log_files_.begin()->getting_flushed == false && total_log_size_ > max_total_wal_size) { flush_column_family_if_log_file = alive_log_files_.begin()->number; alive_log_files_.begin()->getting_flushed = true; Log(options_.info_log, - "Flushing all column families with data in WAL number %" PRIu64, - flush_column_family_if_log_file); + "Flushing all column families with data in WAL number %" PRIu64 + ". Total log size is %" PRIu64 " while max_total_wal_size is %" PRIu64, + flush_column_family_if_log_file, total_log_size_, max_total_wal_size); } Status status;