diff --git a/db/column_family.cc b/db/column_family.cc index 4de19b8e6c8..b670905ef94 100644 --- a/db/column_family.cc +++ b/db/column_family.cc @@ -1677,6 +1677,9 @@ ColumnFamilyData* ColumnFamilySet::CreateColumnFamily( if (write_buffer_manager_map_.count(name)) { write_buffer_manager = write_buffer_manager_[write_buffer_manager_map_[name]]; + } else { + write_buffer_manager = + write_buffer_manager_[write_buffer_manager_.size() - 1]; } ColumnFamilyData* new_cfd = new ColumnFamilyData( id, name, dummy_versions, table_cache_, write_buffer_manager, options, diff --git a/db/db_impl/db_impl.cc b/db/db_impl/db_impl.cc index c5cd4442290..c74529ff26d 100644 --- a/db/db_impl/db_impl.cc +++ b/db/db_impl/db_impl.cc @@ -184,6 +184,7 @@ DBImpl::DBImpl(const DBOptions& options, const std::string& dbname, log_sync_cv_(&log_write_mutex_), total_log_size_(0), is_snapshot_supported_(true), + write_buffer_manager_map_(immutable_db_options_.write_buffer_manager_map), write_thread_(immutable_db_options_), nonmem_write_thread_(immutable_db_options_), write_controller_(mutable_db_options_.delayed_write_rate), diff --git a/db/db_impl/db_impl_open.cc b/db/db_impl/db_impl_open.cc index 405ecc088eb..090534a5143 100644 --- a/db/db_impl/db_impl_open.cc +++ b/db/db_impl/db_impl_open.cc @@ -1911,18 +1911,21 @@ Status DBImpl::Open(const DBOptions& db_options, const std::string& dbname, for (auto* cf : *handles) { std::string cf_name = cf->GetName(); + size_t idx; if (impl->write_buffer_manager_map_.count(cf_name)) { - size_t idx = impl->write_buffer_manager_map_[cf_name]; - auto write_buffer_manager = impl->write_buffer_manager_[idx]; - if (cf_name == kDefaultColumnFamilyName) { - write_buffer_manager->RegisterColumnFamily(impl, - impl->default_cf_handle_); - } else if (cf_name == kPersistentStatsColumnFamilyName) { - write_buffer_manager->RegisterColumnFamily( - impl, impl->persist_stats_cf_handle_); - } else { - write_buffer_manager->RegisterColumnFamily(impl, cf); - } + idx = impl->write_buffer_manager_map_[cf_name]; + } else { + idx = impl->write_buffer_manager_.size() - 1; + } + auto write_buffer_manager = impl->write_buffer_manager_[idx]; + if (cf_name == kDefaultColumnFamilyName) { + write_buffer_manager->RegisterColumnFamily(impl, + impl->default_cf_handle_); + } else if (cf_name == kPersistentStatsColumnFamilyName) { + write_buffer_manager->RegisterColumnFamily( + impl, impl->persist_stats_cf_handle_); + } else { + write_buffer_manager->RegisterColumnFamily(impl, cf); } } } else { diff --git a/db/version_set.cc b/db/version_set.cc index 54bcb66f21c..464a8c20f73 100644 --- a/db/version_set.cc +++ b/db/version_set.cc @@ -5163,9 +5163,11 @@ Status VersionSet::ReduceNumberOfLevels(const std::string& dbname, std::shared_ptr tc(NewLRUCache(options->max_open_files - 10, options->table_cache_numshardbits)); WriteController wc(options->delayed_write_rate); - WriteBufferManager wb(options->db_write_buffer_size); - VersionSet versions(dbname, &db_options, file_options, tc.get(), &wb, &wc, - nullptr /*BlockCacheTracer*/, nullptr /*IOTracer*/, + std::vector wbms{ + new WriteBufferManager(options->db_write_buffer_size)}; + std::unordered_map wbmm; + VersionSet versions(dbname, &db_options, file_options, tc.get(), wbms, wbmm, + &wc, nullptr /*BlockCacheTracer*/, nullptr /*IOTracer*/, /*db_session_id*/ ""); Status status; @@ -6050,7 +6052,8 @@ ReactiveVersionSet::ReactiveVersionSet( WriteController* write_controller, const std::shared_ptr& io_tracer) : VersionSet(dbname, _db_options, _file_options, table_cache, - write_buffer_manager, write_controller, + write_buffer_manager, write_buffer_manager_map, + write_controller, /*block_cache_tracer=*/nullptr, io_tracer, /*db_session_id*/ "") {} diff --git a/db/version_set.h b/db/version_set.h index d03968ad83d..591faf56b3f 100644 --- a/db/version_set.h +++ b/db/version_set.h @@ -1488,12 +1488,13 @@ class VersionSet { // reconstruct and install versions. class ReactiveVersionSet : public VersionSet { public: - ReactiveVersionSet(const std::string& dbname, - const ImmutableDBOptions* _db_options, - const FileOptions& _file_options, Cache* table_cache, - std::vector write_buffer_manager, - WriteController* write_controller, - const std::shared_ptr& io_tracer); + ReactiveVersionSet( + const std::string& dbname, const ImmutableDBOptions* _db_options, + const FileOptions& _file_options, Cache* table_cache, + std::vector write_buffer_manager, + std::unordered_map write_buffer_manager_map, + WriteController* write_controller, + const std::shared_ptr& io_tracer); ~ReactiveVersionSet() override; diff --git a/include/rocksdb/db.h b/include/rocksdb/db.h index 880f68d0e76..4f95a9865a8 100644 --- a/include/rocksdb/db.h +++ b/include/rocksdb/db.h @@ -69,7 +69,6 @@ class WriteBatch; extern const std::string kDefaultColumnFamilyName; extern const std::string kPersistentStatsColumnFamilyName; -extern const std::string kLockColumnFamilyName; struct ColumnFamilyDescriptor { std::string name; ColumnFamilyOptions options;