Split DBOptions into ImmutableDBOptions and MutableDBOptions
Summary: Use ImmutableDBOptions/MutableDBOptions internally and DBOptions only for user-facing APIs. MutableDBOptions is barely a placeholder for now. I'll start to move options to MutableDBOptions in following diffs. Test Plan: make all check Reviewers: yhchiang, IslamAbdelRahman, sdong Reviewed By: sdong Subscribers: andrewkr, dhruba, leveldb Differential Revision: https://reviews.facebook.net/D64065
This commit is contained in:
parent
4bc8c88e6b
commit
9ed928e7a9
@ -200,6 +200,7 @@ set(SOURCES
|
||||
util/comparator.cc
|
||||
util/concurrent_arena.cc
|
||||
util/crc32c.cc
|
||||
util/db_options.cc
|
||||
util/delete_scheduler.cc
|
||||
util/dynamic_bloom.cc
|
||||
util/env.cc
|
||||
|
@ -88,11 +88,11 @@ const Comparator* ColumnFamilyHandleImpl::GetComparator() const {
|
||||
}
|
||||
|
||||
void GetIntTblPropCollectorFactory(
|
||||
const ColumnFamilyOptions& cf_options,
|
||||
const ImmutableCFOptions& ioptions,
|
||||
std::vector<std::unique_ptr<IntTblPropCollectorFactory>>*
|
||||
int_tbl_prop_collector_factories) {
|
||||
auto& collector_factories = cf_options.table_properties_collector_factories;
|
||||
for (size_t i = 0; i < cf_options.table_properties_collector_factories.size();
|
||||
auto& collector_factories = ioptions.table_properties_collector_factories;
|
||||
for (size_t i = 0; i < ioptions.table_properties_collector_factories.size();
|
||||
++i) {
|
||||
assert(collector_factories[i]);
|
||||
int_tbl_prop_collector_factories->emplace_back(
|
||||
@ -138,7 +138,7 @@ Status CheckConcurrentWritesSupported(const ColumnFamilyOptions& cf_options) {
|
||||
return Status::OK();
|
||||
}
|
||||
|
||||
ColumnFamilyOptions SanitizeOptions(const DBOptions& db_options,
|
||||
ColumnFamilyOptions SanitizeOptions(const ImmutableDBOptions& db_options,
|
||||
const InternalKeyComparator* icmp,
|
||||
const ColumnFamilyOptions& src) {
|
||||
ColumnFamilyOptions result = src;
|
||||
@ -340,7 +340,7 @@ void SuperVersionUnrefHandle(void* ptr) {
|
||||
ColumnFamilyData::ColumnFamilyData(
|
||||
uint32_t id, const std::string& name, Version* _dummy_versions,
|
||||
Cache* _table_cache, WriteBufferManager* write_buffer_manager,
|
||||
const ColumnFamilyOptions& cf_options, const DBOptions* db_options,
|
||||
const ColumnFamilyOptions& cf_options, const ImmutableDBOptions& db_options,
|
||||
const EnvOptions& env_options, ColumnFamilySet* column_family_set)
|
||||
: id_(id),
|
||||
name_(name),
|
||||
@ -349,14 +349,14 @@ ColumnFamilyData::ColumnFamilyData(
|
||||
refs_(0),
|
||||
dropped_(false),
|
||||
internal_comparator_(cf_options.comparator),
|
||||
options_(*db_options,
|
||||
SanitizeOptions(*db_options, &internal_comparator_, cf_options)),
|
||||
ioptions_(options_),
|
||||
mutable_cf_options_(options_),
|
||||
initial_cf_options_(
|
||||
SanitizeOptions(db_options, &internal_comparator_, cf_options)),
|
||||
ioptions_(db_options, initial_cf_options_),
|
||||
mutable_cf_options_(initial_cf_options_),
|
||||
write_buffer_manager_(write_buffer_manager),
|
||||
mem_(nullptr),
|
||||
imm_(options_.min_write_buffer_number_to_merge,
|
||||
options_.max_write_buffer_number_to_maintain),
|
||||
imm_(ioptions_.min_write_buffer_number_to_merge,
|
||||
ioptions_.max_write_buffer_number_to_maintain),
|
||||
super_version_(nullptr),
|
||||
super_version_number_(0),
|
||||
local_sv_(new ThreadLocalPtr(&SuperVersionUnrefHandle)),
|
||||
@ -370,12 +370,12 @@ ColumnFamilyData::ColumnFamilyData(
|
||||
Ref();
|
||||
|
||||
// Convert user defined table properties collector factories to internal ones.
|
||||
GetIntTblPropCollectorFactory(options_, &int_tbl_prop_collector_factories_);
|
||||
GetIntTblPropCollectorFactory(ioptions_, &int_tbl_prop_collector_factories_);
|
||||
|
||||
// if _dummy_versions is nullptr, then this is a dummy column family.
|
||||
if (_dummy_versions != nullptr) {
|
||||
internal_stats_.reset(
|
||||
new InternalStats(ioptions_.num_levels, db_options->env, this));
|
||||
new InternalStats(ioptions_.num_levels, db_options.env, this));
|
||||
table_cache_.reset(new TableCache(ioptions_, env_options, _table_cache));
|
||||
if (ioptions_.compaction_style == kCompactionStyleLevel) {
|
||||
compaction_picker_.reset(
|
||||
@ -407,7 +407,7 @@ ColumnFamilyData::ColumnFamilyData(
|
||||
if (column_family_set_->NumberOfColumnFamilies() < 10) {
|
||||
Log(InfoLogLevel::INFO_LEVEL, ioptions_.info_log,
|
||||
"--------------- Options for column family [%s]:\n", name.c_str());
|
||||
options_.DumpCFOptions(ioptions_.info_log);
|
||||
initial_cf_options_.Dump(ioptions_.info_log);
|
||||
} else {
|
||||
Log(InfoLogLevel::INFO_LEVEL, ioptions_.info_log,
|
||||
"\t(skipping printing options)\n");
|
||||
@ -485,7 +485,7 @@ void ColumnFamilyData::SetDropped() {
|
||||
}
|
||||
|
||||
ColumnFamilyOptions ColumnFamilyData::GetLatestCFOptions() const {
|
||||
return BuildColumnFamilyOptions(options_, mutable_cf_options_);
|
||||
return BuildColumnFamilyOptions(initial_cf_options_, mutable_cf_options_);
|
||||
}
|
||||
|
||||
const double kSlowdownRatio = 1.2;
|
||||
@ -869,14 +869,14 @@ Status ColumnFamilyData::SetOptions(
|
||||
#endif // ROCKSDB_LITE
|
||||
|
||||
ColumnFamilySet::ColumnFamilySet(const std::string& dbname,
|
||||
const DBOptions* db_options,
|
||||
const ImmutableDBOptions* db_options,
|
||||
const EnvOptions& env_options,
|
||||
Cache* table_cache,
|
||||
WriteBufferManager* write_buffer_manager,
|
||||
WriteController* write_controller)
|
||||
: max_column_family_(0),
|
||||
dummy_cfd_(new ColumnFamilyData(0, "", nullptr, nullptr, nullptr,
|
||||
ColumnFamilyOptions(), db_options,
|
||||
ColumnFamilyOptions(), *db_options,
|
||||
env_options, nullptr)),
|
||||
default_cfd_cache_(nullptr),
|
||||
db_name_(dbname),
|
||||
@ -948,7 +948,7 @@ ColumnFamilyData* ColumnFamilySet::CreateColumnFamily(
|
||||
assert(column_families_.find(name) == column_families_.end());
|
||||
ColumnFamilyData* new_cfd = new ColumnFamilyData(
|
||||
id, name, dummy_versions, table_cache_, write_buffer_manager_, options,
|
||||
db_options_, env_options_, this);
|
||||
*db_options_, env_options_, this);
|
||||
column_families_.insert({name, id});
|
||||
column_family_data_.insert({id, new_cfd});
|
||||
max_column_family_ = std::max(max_column_family_, id);
|
||||
|
@ -136,14 +136,14 @@ extern Status CheckCompressionSupported(const ColumnFamilyOptions& cf_options);
|
||||
extern Status CheckConcurrentWritesSupported(
|
||||
const ColumnFamilyOptions& cf_options);
|
||||
|
||||
extern ColumnFamilyOptions SanitizeOptions(const DBOptions& db_options,
|
||||
extern ColumnFamilyOptions SanitizeOptions(const ImmutableDBOptions& db_options,
|
||||
const InternalKeyComparator* icmp,
|
||||
const ColumnFamilyOptions& src);
|
||||
// Wrap user defined table proproties collector factories `from cf_options`
|
||||
// into internal ones in int_tbl_prop_collector_factories. Add a system internal
|
||||
// one too.
|
||||
extern void GetIntTblPropCollectorFactory(
|
||||
const ColumnFamilyOptions& cf_options,
|
||||
const ImmutableCFOptions& ioptions,
|
||||
std::vector<std::unique_ptr<IntTblPropCollectorFactory>>*
|
||||
int_tbl_prop_collector_factories);
|
||||
|
||||
@ -328,7 +328,8 @@ class ColumnFamilyData {
|
||||
Version* dummy_versions, Cache* table_cache,
|
||||
WriteBufferManager* write_buffer_manager,
|
||||
const ColumnFamilyOptions& options,
|
||||
const DBOptions* db_options, const EnvOptions& env_options,
|
||||
const ImmutableDBOptions& db_options,
|
||||
const EnvOptions& env_options,
|
||||
ColumnFamilySet* column_family_set);
|
||||
|
||||
uint32_t id_;
|
||||
@ -343,7 +344,7 @@ class ColumnFamilyData {
|
||||
std::vector<std::unique_ptr<IntTblPropCollectorFactory>>
|
||||
int_tbl_prop_collector_factories_;
|
||||
|
||||
const Options options_;
|
||||
const ColumnFamilyOptions initial_cf_options_;
|
||||
const ImmutableCFOptions ioptions_;
|
||||
MutableCFOptions mutable_cf_options_;
|
||||
|
||||
@ -439,7 +440,8 @@ class ColumnFamilySet {
|
||||
ColumnFamilyData* current_;
|
||||
};
|
||||
|
||||
ColumnFamilySet(const std::string& dbname, const DBOptions* db_options,
|
||||
ColumnFamilySet(const std::string& dbname,
|
||||
const ImmutableDBOptions* db_options,
|
||||
const EnvOptions& env_options, Cache* table_cache,
|
||||
WriteBufferManager* write_buffer_manager,
|
||||
WriteController* write_controller);
|
||||
@ -496,7 +498,7 @@ class ColumnFamilySet {
|
||||
ColumnFamilyData* default_cfd_cache_;
|
||||
|
||||
const std::string db_name_;
|
||||
const DBOptions* const db_options_;
|
||||
const ImmutableDBOptions* const db_options_;
|
||||
const EnvOptions env_options_;
|
||||
Cache* table_cache_;
|
||||
WriteBufferManager* write_buffer_manager_;
|
||||
|
@ -2178,8 +2178,8 @@ TEST_F(ColumnFamilyTest, SanitizeOptions) {
|
||||
original.write_buffer_size =
|
||||
l * 4 * 1024 * 1024 + i * 1024 * 1024 + j * 1024 + k;
|
||||
|
||||
ColumnFamilyOptions result =
|
||||
SanitizeOptions(db_options, nullptr, original);
|
||||
ColumnFamilyOptions result = SanitizeOptions(
|
||||
ImmutableDBOptions(db_options), nullptr, original);
|
||||
ASSERT_TRUE(result.level0_stop_writes_trigger >=
|
||||
result.level0_slowdown_writes_trigger);
|
||||
ASSERT_TRUE(result.level0_slowdown_writes_trigger >=
|
||||
|
@ -151,9 +151,9 @@ Status CompactedDBImpl::Open(const Options& options,
|
||||
std::unique_ptr<CompactedDBImpl> db(new CompactedDBImpl(db_options, dbname));
|
||||
Status s = db->Init(options);
|
||||
if (s.ok()) {
|
||||
Log(INFO_LEVEL, db->db_options_.info_log,
|
||||
Log(INFO_LEVEL, db->immutable_db_options_.info_log,
|
||||
"Opened the db as fully compacted mode");
|
||||
LogFlush(db->db_options_.info_log);
|
||||
LogFlush(db->immutable_db_options_.info_log);
|
||||
*dbptr = db.release();
|
||||
}
|
||||
return s;
|
||||
|
@ -262,7 +262,7 @@ void CompactionJob::AggregateStatistics() {
|
||||
}
|
||||
|
||||
CompactionJob::CompactionJob(
|
||||
int job_id, Compaction* compaction, const DBOptions& db_options,
|
||||
int job_id, Compaction* compaction, const ImmutableDBOptions& db_options,
|
||||
const EnvOptions& env_options, VersionSet* versions,
|
||||
std::atomic<bool>* shutting_down, LogBuffer* log_buffer,
|
||||
Directory* db_directory, Directory* output_directory, Statistics* stats,
|
||||
@ -539,7 +539,7 @@ Status CompactionJob::Run() {
|
||||
thread.join();
|
||||
}
|
||||
|
||||
if (output_directory_ && !db_options_.disableDataSync) {
|
||||
if (output_directory_ && !db_options_.disable_data_sync) {
|
||||
output_directory_->Fsync();
|
||||
}
|
||||
|
||||
@ -963,7 +963,7 @@ Status CompactionJob::FinishCompactionOutputFile(
|
||||
sub_compact->total_bytes += current_bytes;
|
||||
|
||||
// Finish and check for file errors
|
||||
if (s.ok() && !db_options_.disableDataSync) {
|
||||
if (s.ok() && !db_options_.disable_data_sync) {
|
||||
StopWatch sw(env_, stats_, COMPACTION_OUTFILE_SYNC_MICROS);
|
||||
s = sub_compact->outfile->Sync(db_options_.use_fsync);
|
||||
}
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "rocksdb/transaction_log.h"
|
||||
#include "table/scoped_arena_iterator.h"
|
||||
#include "util/autovector.h"
|
||||
#include "util/db_options.h"
|
||||
#include "util/event_logger.h"
|
||||
#include "util/stop_watch.h"
|
||||
#include "util/thread_local.h"
|
||||
@ -52,7 +53,8 @@ class Arena;
|
||||
|
||||
class CompactionJob {
|
||||
public:
|
||||
CompactionJob(int job_id, Compaction* compaction, const DBOptions& db_options,
|
||||
CompactionJob(int job_id, Compaction* compaction,
|
||||
const ImmutableDBOptions& db_options,
|
||||
const EnvOptions& env_options, VersionSet* versions,
|
||||
std::atomic<bool>* shutting_down, LogBuffer* log_buffer,
|
||||
Directory* db_directory, Directory* output_directory,
|
||||
@ -120,7 +122,7 @@ class CompactionJob {
|
||||
|
||||
// DBImpl state
|
||||
const std::string& dbname_;
|
||||
const DBOptions& db_options_;
|
||||
const ImmutableDBOptions& db_options_;
|
||||
const EnvOptions& env_options_;
|
||||
|
||||
Env* env_;
|
||||
|
@ -68,7 +68,8 @@ class CompactionJobTest : public testing::Test {
|
||||
CompactionJobTest()
|
||||
: env_(Env::Default()),
|
||||
dbname_(test::TmpDir() + "/compaction_job_test"),
|
||||
mutable_cf_options_(Options()),
|
||||
db_options_(),
|
||||
mutable_cf_options_(cf_options_),
|
||||
table_cache_(NewLRUCache(50000, 16)),
|
||||
write_buffer_manager_(db_options_.db_write_buffer_size),
|
||||
versions_(new VersionSet(dbname_, &db_options_, env_options_,
|
||||
@ -280,11 +281,11 @@ class CompactionJobTest : public testing::Test {
|
||||
Env* env_;
|
||||
std::string dbname_;
|
||||
EnvOptions env_options_;
|
||||
ImmutableDBOptions db_options_;
|
||||
ColumnFamilyOptions cf_options_;
|
||||
MutableCFOptions mutable_cf_options_;
|
||||
std::shared_ptr<Cache> table_cache_;
|
||||
WriteController write_controller_;
|
||||
DBOptions db_options_;
|
||||
ColumnFamilyOptions cf_options_;
|
||||
WriteBufferManager write_buffer_manager_;
|
||||
std::unique_ptr<VersionSet> versions_;
|
||||
InstrumentedMutex mutex_;
|
||||
|
@ -35,10 +35,10 @@ Status DBImpl::DisableFileDeletions() {
|
||||
InstrumentedMutexLock l(&mutex_);
|
||||
++disable_delete_obsolete_files_;
|
||||
if (disable_delete_obsolete_files_ == 1) {
|
||||
Log(InfoLogLevel::INFO_LEVEL, db_options_.info_log,
|
||||
Log(InfoLogLevel::INFO_LEVEL, immutable_db_options_.info_log,
|
||||
"File Deletions Disabled");
|
||||
} else {
|
||||
Log(InfoLogLevel::WARN_LEVEL, db_options_.info_log,
|
||||
Log(InfoLogLevel::WARN_LEVEL, immutable_db_options_.info_log,
|
||||
"File Deletions Disabled, but already disabled. Counter: %d",
|
||||
disable_delete_obsolete_files_);
|
||||
}
|
||||
@ -59,12 +59,12 @@ Status DBImpl::EnableFileDeletions(bool force) {
|
||||
--disable_delete_obsolete_files_;
|
||||
}
|
||||
if (disable_delete_obsolete_files_ == 0) {
|
||||
Log(InfoLogLevel::INFO_LEVEL, db_options_.info_log,
|
||||
Log(InfoLogLevel::INFO_LEVEL, immutable_db_options_.info_log,
|
||||
"File Deletions Enabled");
|
||||
should_purge_files = true;
|
||||
FindObsoleteFiles(&job_context, true);
|
||||
} else {
|
||||
Log(InfoLogLevel::WARN_LEVEL, db_options_.info_log,
|
||||
Log(InfoLogLevel::WARN_LEVEL, immutable_db_options_.info_log,
|
||||
"File Deletions Enable, but not really enabled. Counter: %d",
|
||||
disable_delete_obsolete_files_);
|
||||
}
|
||||
@ -73,7 +73,7 @@ Status DBImpl::EnableFileDeletions(bool force) {
|
||||
PurgeObsoleteFiles(job_context);
|
||||
}
|
||||
job_context.Clean();
|
||||
LogFlush(db_options_.info_log);
|
||||
LogFlush(immutable_db_options_.info_log);
|
||||
return Status::OK();
|
||||
}
|
||||
|
||||
@ -110,7 +110,7 @@ Status DBImpl::GetLiveFiles(std::vector<std::string>& ret,
|
||||
|
||||
if (!status.ok()) {
|
||||
mutex_.Unlock();
|
||||
Log(InfoLogLevel::ERROR_LEVEL, db_options_.info_log,
|
||||
Log(InfoLogLevel::ERROR_LEVEL, immutable_db_options_.info_log,
|
||||
"Cannot Flush data %s\n", status.ToString().c_str());
|
||||
return status;
|
||||
}
|
||||
|
649
db/db_impl.cc
649
db/db_impl.cc
File diff suppressed because it is too large
Load Diff
11
db/db_impl.h
11
db/db_impl.h
@ -40,6 +40,7 @@
|
||||
#include "rocksdb/write_buffer_manager.h"
|
||||
#include "table/scoped_arena_iterator.h"
|
||||
#include "util/autovector.h"
|
||||
#include "util/db_options.h"
|
||||
#include "util/event_logger.h"
|
||||
#include "util/hash.h"
|
||||
#include "util/instrumented_mutex.h"
|
||||
@ -167,7 +168,7 @@ class DBImpl : public DB {
|
||||
using DB::GetOptions;
|
||||
virtual Options GetOptions(ColumnFamilyHandle* column_family) const override;
|
||||
using DB::GetDBOptions;
|
||||
virtual const DBOptions& GetDBOptions() const override;
|
||||
virtual DBOptions GetDBOptions() const override;
|
||||
using DB::Flush;
|
||||
virtual Status Flush(const FlushOptions& options,
|
||||
ColumnFamilyHandle* column_family) override;
|
||||
@ -456,7 +457,7 @@ class DBImpl : public DB {
|
||||
~RecoveredTransaction() { delete batch_; }
|
||||
};
|
||||
|
||||
bool allow_2pc() const { return db_options_.allow_2pc; }
|
||||
bool allow_2pc() const { return immutable_db_options_.allow_2pc; }
|
||||
|
||||
std::unordered_map<std::string, RecoveredTransaction*>
|
||||
recovered_transactions() {
|
||||
@ -507,7 +508,8 @@ class DBImpl : public DB {
|
||||
Env* const env_;
|
||||
const std::string dbname_;
|
||||
unique_ptr<VersionSet> versions_;
|
||||
const DBOptions db_options_;
|
||||
const ImmutableDBOptions immutable_db_options_;
|
||||
MutableDBOptions mutable_db_options_;
|
||||
Statistics* stats_;
|
||||
std::unordered_map<std::string, RecoveredTransaction*>
|
||||
recovered_transactions_;
|
||||
@ -1071,11 +1073,10 @@ class DBImpl : public DB {
|
||||
size_t GetWalPreallocateBlockSize(uint64_t write_buffer_size) const;
|
||||
};
|
||||
|
||||
// Sanitize db options. The caller should delete result.info_log if
|
||||
// it is not equal to src.info_log.
|
||||
extern Options SanitizeOptions(const std::string& db,
|
||||
const InternalKeyComparator* icmp,
|
||||
const Options& src);
|
||||
|
||||
extern DBOptions SanitizeOptions(const std::string& db, const DBOptions& src);
|
||||
|
||||
// Fix user-supplied options to be reasonable
|
||||
|
@ -209,8 +209,8 @@ Status DBImpl::AddFile(ColumnFamilyHandle* column_family,
|
||||
for (; j < num_files; j++) {
|
||||
StopWatch sw(env_, nullptr, 0, µ_list[j], false);
|
||||
db_fname_list[j] =
|
||||
TableFileName(db_options_.db_paths, meta_list[j].fd.GetNumber(),
|
||||
meta_list[j].fd.GetPathId());
|
||||
TableFileName(immutable_db_options_.db_paths,
|
||||
meta_list[j].fd.GetNumber(), meta_list[j].fd.GetPathId());
|
||||
if (move_file) {
|
||||
status = env_->LinkFile(file_info_list[j].file_path, db_fname_list[j]);
|
||||
if (status.IsNotSupported()) {
|
||||
@ -226,7 +226,7 @@ Status DBImpl::AddFile(ColumnFamilyHandle* column_family,
|
||||
for (size_t i = 0; i < j; i++) {
|
||||
Status s = env_->DeleteFile(db_fname_list[i]);
|
||||
if (!s.ok()) {
|
||||
Log(InfoLogLevel::WARN_LEVEL, db_options_.info_log,
|
||||
Log(InfoLogLevel::WARN_LEVEL, immutable_db_options_.info_log,
|
||||
"AddFile() clean up for file %s failed : %s",
|
||||
db_fname_list[i].c_str(), s.ToString().c_str());
|
||||
}
|
||||
@ -340,7 +340,7 @@ Status DBImpl::AddFile(ColumnFamilyHandle* column_family,
|
||||
for (size_t i = 0; i < num_files; i++) {
|
||||
Status s = env_->DeleteFile(db_fname_list[i]);
|
||||
if (!s.ok()) {
|
||||
Log(InfoLogLevel::WARN_LEVEL, db_options_.info_log,
|
||||
Log(InfoLogLevel::WARN_LEVEL, immutable_db_options_.info_log,
|
||||
"AddFile() clean up for file %s failed : %s",
|
||||
db_fname_list[i].c_str(), s.ToString().c_str());
|
||||
}
|
||||
@ -350,7 +350,7 @@ Status DBImpl::AddFile(ColumnFamilyHandle* column_family,
|
||||
for (size_t i = 0; i < num_files; i++) {
|
||||
Status s = env_->DeleteFile(file_info_list[i].file_path);
|
||||
if (!s.ok()) {
|
||||
Log(InfoLogLevel::WARN_LEVEL, db_options_.info_log,
|
||||
Log(InfoLogLevel::WARN_LEVEL, immutable_db_options_.info_log,
|
||||
"%s was added to DB successfully but failed to remove original "
|
||||
"file "
|
||||
"link : %s",
|
||||
|
@ -61,7 +61,7 @@ Status DBImpl::PromoteL0(ColumnFamilyHandle* column_family, int target_level) {
|
||||
assert(column_family);
|
||||
|
||||
if (target_level < 1) {
|
||||
Log(InfoLogLevel::INFO_LEVEL, db_options_.info_log,
|
||||
Log(InfoLogLevel::INFO_LEVEL, immutable_db_options_.info_log,
|
||||
"PromoteL0 FAILED. Invalid target level %d\n", target_level);
|
||||
return Status::InvalidArgument("Invalid target level");
|
||||
}
|
||||
@ -75,7 +75,7 @@ Status DBImpl::PromoteL0(ColumnFamilyHandle* column_family, int target_level) {
|
||||
const auto* vstorage = cfd->current()->storage_info();
|
||||
|
||||
if (target_level >= vstorage->num_levels()) {
|
||||
Log(InfoLogLevel::INFO_LEVEL, db_options_.info_log,
|
||||
Log(InfoLogLevel::INFO_LEVEL, immutable_db_options_.info_log,
|
||||
"PromoteL0 FAILED. Target level %d does not exist\n", target_level);
|
||||
job_context.Clean();
|
||||
return Status::InvalidArgument("Target level does not exist");
|
||||
@ -94,7 +94,7 @@ Status DBImpl::PromoteL0(ColumnFamilyHandle* column_family, int target_level) {
|
||||
for (size_t i = 0; i < l0_files.size(); ++i) {
|
||||
auto f = l0_files[i];
|
||||
if (f->being_compacted) {
|
||||
Log(InfoLogLevel::INFO_LEVEL, db_options_.info_log,
|
||||
Log(InfoLogLevel::INFO_LEVEL, immutable_db_options_.info_log,
|
||||
"PromoteL0 FAILED. File %" PRIu64 " being compacted\n",
|
||||
f->fd.GetNumber());
|
||||
job_context.Clean();
|
||||
@ -104,7 +104,7 @@ Status DBImpl::PromoteL0(ColumnFamilyHandle* column_family, int target_level) {
|
||||
if (i == 0) continue;
|
||||
auto prev_f = l0_files[i - 1];
|
||||
if (icmp->Compare(prev_f->largest, f->smallest) >= 0) {
|
||||
Log(InfoLogLevel::INFO_LEVEL, db_options_.info_log,
|
||||
Log(InfoLogLevel::INFO_LEVEL, immutable_db_options_.info_log,
|
||||
"PromoteL0 FAILED. Files %" PRIu64 " and %" PRIu64
|
||||
" have overlapping ranges\n",
|
||||
prev_f->fd.GetNumber(), f->fd.GetNumber());
|
||||
@ -116,7 +116,7 @@ Status DBImpl::PromoteL0(ColumnFamilyHandle* column_family, int target_level) {
|
||||
// Check that all levels up to target_level are empty.
|
||||
for (int level = 1; level <= target_level; ++level) {
|
||||
if (vstorage->NumLevelFiles(level) > 0) {
|
||||
Log(InfoLogLevel::INFO_LEVEL, db_options_.info_log,
|
||||
Log(InfoLogLevel::INFO_LEVEL, immutable_db_options_.info_log,
|
||||
"PromoteL0 FAILED. Level %d not empty\n", level);
|
||||
job_context.Clean();
|
||||
return Status::InvalidArgument(
|
||||
@ -141,7 +141,7 @@ Status DBImpl::PromoteL0(ColumnFamilyHandle* column_family, int target_level) {
|
||||
cfd, &job_context, *cfd->GetLatestMutableCFOptions());
|
||||
}
|
||||
} // lock released here
|
||||
LogFlush(db_options_.info_log);
|
||||
LogFlush(immutable_db_options_.info_log);
|
||||
job_context.Clean();
|
||||
|
||||
return status;
|
||||
|
@ -19,8 +19,9 @@ namespace rocksdb {
|
||||
DBImplReadOnly::DBImplReadOnly(const DBOptions& db_options,
|
||||
const std::string& dbname)
|
||||
: DBImpl(db_options, dbname) {
|
||||
Log(INFO_LEVEL, db_options_.info_log, "Opening the db in read only mode");
|
||||
LogFlush(db_options_.info_log);
|
||||
Log(INFO_LEVEL, immutable_db_options_.info_log,
|
||||
"Opening the db in read only mode");
|
||||
LogFlush(immutable_db_options_.info_log);
|
||||
}
|
||||
|
||||
DBImplReadOnly::~DBImplReadOnly() {
|
||||
|
@ -16,12 +16,12 @@
|
||||
#include <vector>
|
||||
|
||||
#include "db/filename.h"
|
||||
#include "rocksdb/options.h"
|
||||
#include "rocksdb/env.h"
|
||||
|
||||
namespace rocksdb {
|
||||
|
||||
void DumpDBFileSummary(const DBOptions& options, const std::string& dbname) {
|
||||
void DumpDBFileSummary(const ImmutableDBOptions& options,
|
||||
const std::string& dbname) {
|
||||
if (options.info_log == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
@ -6,8 +6,9 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "rocksdb/options.h"
|
||||
#include "util/db_options.h"
|
||||
|
||||
namespace rocksdb {
|
||||
void DumpDBFileSummary(const DBOptions& options, const std::string& dbname);
|
||||
void DumpDBFileSummary(const ImmutableDBOptions& options,
|
||||
const std::string& dbname);
|
||||
} // namespace rocksdb
|
||||
|
@ -45,8 +45,9 @@ class DBOptionsTest : public DBTestBase {
|
||||
std::unordered_map<std::string, std::string> GetRandomizedMutableCFOptionsMap(
|
||||
Random* rnd) {
|
||||
Options options;
|
||||
ImmutableDBOptions db_options(options);
|
||||
test::RandomInitCFOptions(&options, rnd);
|
||||
auto sanitized_options = SanitizeOptions(options, nullptr, options);
|
||||
auto sanitized_options = SanitizeOptions(db_options, nullptr, options);
|
||||
auto opt_map = GetMutableCFOptionsMap(sanitized_options);
|
||||
delete options.compaction_filter;
|
||||
return opt_map;
|
||||
|
@ -2811,7 +2811,7 @@ class ModelDB : public DB {
|
||||
}
|
||||
|
||||
using DB::GetDBOptions;
|
||||
virtual const DBOptions& GetDBOptions() const override { return options_; }
|
||||
virtual DBOptions GetDBOptions() const override { return options_; }
|
||||
|
||||
using DB::Flush;
|
||||
virtual Status Flush(const rocksdb::FlushOptions& options,
|
||||
|
@ -651,7 +651,7 @@ class RecoveryTestHelper {
|
||||
// Create WAL files with values filled in
|
||||
static void FillData(DBWALTest* test, const Options& options,
|
||||
const size_t wal_count, size_t* count) {
|
||||
const DBOptions& db_options = options;
|
||||
const ImmutableDBOptions db_options(options);
|
||||
|
||||
*count = 0;
|
||||
|
||||
|
@ -386,10 +386,10 @@ Status SetIdentityFile(Env* env, const std::string& dbname) {
|
||||
return s;
|
||||
}
|
||||
|
||||
Status SyncManifest(Env* env, const DBOptions* db_options,
|
||||
Status SyncManifest(Env* env, const ImmutableDBOptions* db_options,
|
||||
WritableFileWriter* file) {
|
||||
TEST_KILL_RANDOM("SyncManifest:0", rocksdb_kill_odds * REDUCE_ODDS2);
|
||||
if (db_options->disableDataSync) {
|
||||
if (db_options->disable_data_sync) {
|
||||
return Status::OK();
|
||||
} else {
|
||||
StopWatch sw(env, db_options->statistics.get(), MANIFEST_FILE_SYNC_MICROS);
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "rocksdb/slice.h"
|
||||
#include "rocksdb/status.h"
|
||||
#include "rocksdb/transaction_log.h"
|
||||
#include "util/db_options.h"
|
||||
|
||||
namespace rocksdb {
|
||||
|
||||
@ -159,7 +160,7 @@ extern Status SetCurrentFile(Env* env, const std::string& dbname,
|
||||
extern Status SetIdentityFile(Env* env, const std::string& dbname);
|
||||
|
||||
// Sync manifest file `file`.
|
||||
extern Status SyncManifest(Env* env, const DBOptions* db_options,
|
||||
extern Status SyncManifest(Env* env, const ImmutableDBOptions* db_options,
|
||||
WritableFileWriter* file);
|
||||
|
||||
} // namespace rocksdb
|
||||
|
@ -56,7 +56,7 @@
|
||||
namespace rocksdb {
|
||||
|
||||
FlushJob::FlushJob(const std::string& dbname, ColumnFamilyData* cfd,
|
||||
const DBOptions& db_options,
|
||||
const ImmutableDBOptions& db_options,
|
||||
const MutableCFOptions& mutable_cf_options,
|
||||
const EnvOptions& env_options, VersionSet* versions,
|
||||
InstrumentedMutex* db_mutex,
|
||||
@ -294,7 +294,7 @@ Status FlushJob::WriteLevel0Table() {
|
||||
meta_.fd.GetFileSize(), s.ToString().c_str(),
|
||||
meta_.marked_for_compaction ? " (needs compaction)" : "");
|
||||
|
||||
if (!db_options_.disableDataSync && output_file_directory_ != nullptr) {
|
||||
if (!db_options_.disable_data_sync && output_file_directory_ != nullptr) {
|
||||
output_file_directory_->Fsync();
|
||||
}
|
||||
TEST_SYNC_POINT("FlushJob::WriteLevel0Table");
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include "rocksdb/transaction_log.h"
|
||||
#include "table/scoped_arena_iterator.h"
|
||||
#include "util/autovector.h"
|
||||
#include "util/db_options.h"
|
||||
#include "util/event_logger.h"
|
||||
#include "util/instrumented_mutex.h"
|
||||
#include "util/stop_watch.h"
|
||||
@ -53,7 +54,7 @@ class FlushJob {
|
||||
// TODO(icanadi) make effort to reduce number of parameters here
|
||||
// IMPORTANT: mutable_cf_options needs to be alive while FlushJob is alive
|
||||
FlushJob(const std::string& dbname, ColumnFamilyData* cfd,
|
||||
const DBOptions& db_options,
|
||||
const ImmutableDBOptions& db_options,
|
||||
const MutableCFOptions& mutable_cf_options,
|
||||
const EnvOptions& env_options, VersionSet* versions,
|
||||
InstrumentedMutex* db_mutex, std::atomic<bool>* shutting_down,
|
||||
@ -78,7 +79,7 @@ class FlushJob {
|
||||
Status WriteLevel0Table();
|
||||
const std::string& dbname_;
|
||||
ColumnFamilyData* cfd_;
|
||||
const DBOptions& db_options_;
|
||||
const ImmutableDBOptions& db_options_;
|
||||
const MutableCFOptions& mutable_cf_options_;
|
||||
const EnvOptions& env_options_;
|
||||
VersionSet* versions_;
|
||||
|
@ -28,6 +28,8 @@ class FlushJobTest : public testing::Test {
|
||||
FlushJobTest()
|
||||
: env_(Env::Default()),
|
||||
dbname_(test::TmpDir() + "/flush_job_test"),
|
||||
options_(),
|
||||
db_options_(options_),
|
||||
table_cache_(NewLRUCache(50000, 16)),
|
||||
write_buffer_manager_(db_options_.db_write_buffer_size),
|
||||
versions_(new VersionSet(dbname_, &db_options_, env_options_,
|
||||
@ -74,9 +76,10 @@ class FlushJobTest : public testing::Test {
|
||||
Env* env_;
|
||||
std::string dbname_;
|
||||
EnvOptions env_options_;
|
||||
Options options_;
|
||||
ImmutableDBOptions db_options_;
|
||||
std::shared_ptr<Cache> table_cache_;
|
||||
WriteController write_controller_;
|
||||
DBOptions db_options_;
|
||||
WriteBufferManager write_buffer_manager_;
|
||||
ColumnFamilyOptions cf_options_;
|
||||
std::unique_ptr<VersionSet> versions_;
|
||||
|
@ -57,14 +57,16 @@ class MemTableListTest : public testing::Test {
|
||||
|
||||
// Create a mock VersionSet
|
||||
DBOptions db_options;
|
||||
ImmutableDBOptions immutable_db_options(db_options);
|
||||
EnvOptions env_options;
|
||||
shared_ptr<Cache> table_cache(NewLRUCache(50000, 16));
|
||||
WriteBufferManager write_buffer_manager(db_options.db_write_buffer_size);
|
||||
WriteController write_controller(10000000u);
|
||||
|
||||
CreateDB();
|
||||
VersionSet versions(dbname, &db_options, env_options, table_cache.get(),
|
||||
&write_buffer_manager, &write_controller);
|
||||
VersionSet versions(dbname, &immutable_db_options, env_options,
|
||||
table_cache.get(), &write_buffer_manager,
|
||||
&write_controller);
|
||||
|
||||
// Create mock default ColumnFamilyData
|
||||
ColumnFamilyOptions cf_options;
|
||||
|
@ -99,10 +99,11 @@ class Repairer {
|
||||
env_(db_options.env),
|
||||
env_options_(),
|
||||
db_options_(SanitizeOptions(dbname_, db_options)),
|
||||
immutable_db_options_(db_options_),
|
||||
icmp_(default_cf_opts.comparator),
|
||||
default_cf_opts_(default_cf_opts),
|
||||
default_cf_iopts_(
|
||||
ImmutableCFOptions(Options(db_options_, default_cf_opts))),
|
||||
ImmutableCFOptions(immutable_db_options_, default_cf_opts)),
|
||||
unknown_cf_opts_(unknown_cf_opts),
|
||||
create_unknown_cfs_(create_unknown_cfs),
|
||||
raw_table_cache_(
|
||||
@ -113,8 +114,8 @@ class Repairer {
|
||||
raw_table_cache_.get())),
|
||||
wb_(db_options_.db_write_buffer_size),
|
||||
wc_(db_options_.delayed_write_rate),
|
||||
vset_(dbname_, &db_options_, env_options_, raw_table_cache_.get(), &wb_,
|
||||
&wc_),
|
||||
vset_(dbname_, &immutable_db_options_, env_options_,
|
||||
raw_table_cache_.get(), &wb_, &wc_),
|
||||
next_file_number_(1) {
|
||||
for (const auto& cfd : column_families) {
|
||||
cf_name_to_opts_[cfd.name] = cfd.options;
|
||||
@ -222,6 +223,7 @@ class Repairer {
|
||||
Env* const env_;
|
||||
const EnvOptions env_options_;
|
||||
const DBOptions db_options_;
|
||||
const ImmutableDBOptions immutable_db_options_;
|
||||
const InternalKeyComparator icmp_;
|
||||
const ColumnFamilyOptions default_cf_opts_;
|
||||
const ImmutableCFOptions default_cf_iopts_; // table_cache_ holds reference
|
||||
|
@ -256,7 +256,7 @@ void TestCustomizedTablePropertiesCollector(
|
||||
int_tbl_prop_collector_factories.emplace_back(
|
||||
new RegularKeysStartWithAFactory(backward_mode));
|
||||
} else {
|
||||
GetIntTblPropCollectorFactory(options, &int_tbl_prop_collector_factories);
|
||||
GetIntTblPropCollectorFactory(ioptions, &int_tbl_prop_collector_factories);
|
||||
}
|
||||
MakeBuilder(options, ioptions, internal_comparator,
|
||||
&int_tbl_prop_collector_factories, &writer, &builder);
|
||||
@ -393,7 +393,8 @@ void TestInternalKeyPropertiesCollector(
|
||||
options = SanitizeOptions("db", // just a place holder
|
||||
&pikc,
|
||||
options);
|
||||
GetIntTblPropCollectorFactory(options, &int_tbl_prop_collector_factories);
|
||||
ImmutableCFOptions ioptions(options);
|
||||
GetIntTblPropCollectorFactory(ioptions, &int_tbl_prop_collector_factories);
|
||||
options.comparator = comparator;
|
||||
} else {
|
||||
int_tbl_prop_collector_factories.emplace_back(
|
||||
|
@ -16,7 +16,7 @@
|
||||
namespace rocksdb {
|
||||
|
||||
TransactionLogIteratorImpl::TransactionLogIteratorImpl(
|
||||
const std::string& dir, const DBOptions* options,
|
||||
const std::string& dir, const ImmutableDBOptions* options,
|
||||
const TransactionLogIterator::ReadOptions& read_options,
|
||||
const EnvOptions& soptions, const SequenceNumber seq,
|
||||
std::unique_ptr<VectorLogPtr> files, VersionSet const* const versions)
|
||||
|
@ -2,19 +2,20 @@
|
||||
// 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.
|
||||
#pragma once
|
||||
|
||||
#ifndef ROCKSDB_LITE
|
||||
#pragma once
|
||||
#include <vector>
|
||||
|
||||
#include "db/filename.h"
|
||||
#include "db/log_reader.h"
|
||||
#include "db/version_set.h"
|
||||
#include "port/port.h"
|
||||
#include "rocksdb/env.h"
|
||||
#include "rocksdb/options.h"
|
||||
#include "rocksdb/types.h"
|
||||
#include "rocksdb/transaction_log.h"
|
||||
#include "db/version_set.h"
|
||||
#include "db/log_reader.h"
|
||||
#include "db/filename.h"
|
||||
#include "port/port.h"
|
||||
#include "rocksdb/types.h"
|
||||
#include "util/db_options.h"
|
||||
|
||||
namespace rocksdb {
|
||||
|
||||
@ -58,7 +59,7 @@ class LogFileImpl : public LogFile {
|
||||
class TransactionLogIteratorImpl : public TransactionLogIterator {
|
||||
public:
|
||||
TransactionLogIteratorImpl(
|
||||
const std::string& dir, const DBOptions* options,
|
||||
const std::string& dir, const ImmutableDBOptions* options,
|
||||
const TransactionLogIterator::ReadOptions& read_options,
|
||||
const EnvOptions& soptions, const SequenceNumber seqNum,
|
||||
std::unique_ptr<VectorLogPtr> files, VersionSet const* const versions);
|
||||
@ -73,7 +74,7 @@ class TransactionLogIteratorImpl : public TransactionLogIterator {
|
||||
|
||||
private:
|
||||
const std::string& dir_;
|
||||
const DBOptions* options_;
|
||||
const ImmutableDBOptions* options_;
|
||||
const TransactionLogIterator::ReadOptions read_options_;
|
||||
const EnvOptions& soptions_;
|
||||
SequenceNumber startingSequenceNumber_;
|
||||
|
@ -2093,7 +2093,8 @@ struct VersionSet::ManifestWriter {
|
||||
: done(false), cv(mu), cfd(_cfd), edit_list(e) {}
|
||||
};
|
||||
|
||||
VersionSet::VersionSet(const std::string& dbname, const DBOptions* db_options,
|
||||
VersionSet::VersionSet(const std::string& dbname,
|
||||
const ImmutableDBOptions* db_options,
|
||||
const EnvOptions& storage_options, Cache* table_cache,
|
||||
WriteBufferManager* write_buffer_manager,
|
||||
WriteController* write_controller)
|
||||
@ -2335,8 +2336,9 @@ Status VersionSet::LogAndApply(ColumnFamilyData* column_family_data,
|
||||
// If we just created a new descriptor file, install it by writing a
|
||||
// new CURRENT file that points to it.
|
||||
if (s.ok() && new_descriptor_log) {
|
||||
s = SetCurrentFile(env_, dbname_, pending_manifest_file_number_,
|
||||
db_options_->disableDataSync ? nullptr : db_directory);
|
||||
s = SetCurrentFile(
|
||||
env_, dbname_, pending_manifest_file_number_,
|
||||
db_options_->disable_data_sync ? nullptr : db_directory);
|
||||
}
|
||||
|
||||
if (s.ok()) {
|
||||
@ -2847,12 +2849,13 @@ Status VersionSet::ReduceNumberOfLevels(const std::string& dbname,
|
||||
"Number of levels needs to be bigger than 1");
|
||||
}
|
||||
|
||||
ImmutableDBOptions db_options(*options);
|
||||
ColumnFamilyOptions cf_options(*options);
|
||||
std::shared_ptr<Cache> 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, options, env_options, tc.get(), &wb, &wc);
|
||||
VersionSet versions(dbname, &db_options, env_options, tc.get(), &wb, &wc);
|
||||
Status status;
|
||||
|
||||
std::vector<ColumnFamilyDescriptor> dummy;
|
||||
|
@ -28,18 +28,19 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "db/dbformat.h"
|
||||
#include "db/version_builder.h"
|
||||
#include "db/version_edit.h"
|
||||
#include "port/port.h"
|
||||
#include "db/table_cache.h"
|
||||
#include "db/column_family.h"
|
||||
#include "db/compaction.h"
|
||||
#include "db/compaction_picker.h"
|
||||
#include "db/column_family.h"
|
||||
#include "db/log_reader.h"
|
||||
#include "db/dbformat.h"
|
||||
#include "db/file_indexer.h"
|
||||
#include "db/log_reader.h"
|
||||
#include "db/table_cache.h"
|
||||
#include "db/version_builder.h"
|
||||
#include "db/version_edit.h"
|
||||
#include "db/write_controller.h"
|
||||
#include "port/port.h"
|
||||
#include "rocksdb/env.h"
|
||||
#include "util/db_options.h"
|
||||
#include "util/instrumented_mutex.h"
|
||||
|
||||
namespace rocksdb {
|
||||
@ -574,7 +575,7 @@ class Version {
|
||||
|
||||
class VersionSet {
|
||||
public:
|
||||
VersionSet(const std::string& dbname, const DBOptions* db_options,
|
||||
VersionSet(const std::string& dbname, const ImmutableDBOptions* db_options,
|
||||
const EnvOptions& env_options, Cache* table_cache,
|
||||
WriteBufferManager* write_buffer_manager,
|
||||
WriteController* write_controller);
|
||||
@ -756,7 +757,7 @@ class VersionSet {
|
||||
|
||||
Env* const env_;
|
||||
const std::string dbname_;
|
||||
const DBOptions* const db_options_;
|
||||
const ImmutableDBOptions* const db_options_;
|
||||
std::atomic<uint64_t> next_file_number_;
|
||||
uint64_t manifest_file_number_;
|
||||
uint64_t options_file_number_;
|
||||
|
@ -128,8 +128,8 @@ Status WalManager::GetUpdatesSince(
|
||||
// b. get sorted non-empty archived logs
|
||||
// c. delete what should be deleted
|
||||
void WalManager::PurgeObsoleteWALFiles() {
|
||||
bool const ttl_enabled = db_options_.WAL_ttl_seconds > 0;
|
||||
bool const size_limit_enabled = db_options_.WAL_size_limit_MB > 0;
|
||||
bool const ttl_enabled = db_options_.wal_ttl_seconds > 0;
|
||||
bool const size_limit_enabled = db_options_.wal_size_limit_mb > 0;
|
||||
if (!ttl_enabled && !size_limit_enabled) {
|
||||
return;
|
||||
}
|
||||
@ -144,7 +144,7 @@ void WalManager::PurgeObsoleteWALFiles() {
|
||||
}
|
||||
uint64_t const now_seconds = static_cast<uint64_t>(current_time);
|
||||
uint64_t const time_to_check = (ttl_enabled && !size_limit_enabled)
|
||||
? db_options_.WAL_ttl_seconds / 2
|
||||
? db_options_.wal_ttl_seconds / 2
|
||||
: kDefaultIntervalToDeleteObsoleteWAL;
|
||||
|
||||
if (purge_wal_files_last_run_ + time_to_check > now_seconds) {
|
||||
@ -180,7 +180,7 @@ void WalManager::PurgeObsoleteWALFiles() {
|
||||
file_path.c_str(), s.ToString().c_str());
|
||||
continue;
|
||||
}
|
||||
if (now_seconds - file_m_time > db_options_.WAL_ttl_seconds) {
|
||||
if (now_seconds - file_m_time > db_options_.wal_ttl_seconds) {
|
||||
s = env_->DeleteFile(file_path);
|
||||
if (!s.ok()) {
|
||||
Log(InfoLogLevel::WARN_LEVEL, db_options_.info_log,
|
||||
@ -229,7 +229,7 @@ void WalManager::PurgeObsoleteWALFiles() {
|
||||
}
|
||||
|
||||
size_t const files_keep_num =
|
||||
db_options_.WAL_size_limit_MB * 1024 * 1024 / log_file_size;
|
||||
db_options_.wal_size_limit_mb * 1024 * 1024 / log_file_size;
|
||||
if (log_files_num <= files_keep_num) {
|
||||
return;
|
||||
}
|
||||
|
@ -17,22 +17,21 @@
|
||||
#include <string>
|
||||
#include <memory>
|
||||
|
||||
#include "port/port.h"
|
||||
|
||||
#include "rocksdb/env.h"
|
||||
#include "rocksdb/options.h"
|
||||
#include "rocksdb/types.h"
|
||||
#include "rocksdb/transaction_log.h"
|
||||
#include "rocksdb/status.h"
|
||||
|
||||
#include "db/version_set.h"
|
||||
#include "port/port.h"
|
||||
#include "rocksdb/env.h"
|
||||
#include "rocksdb/status.h"
|
||||
#include "rocksdb/transaction_log.h"
|
||||
#include "rocksdb/types.h"
|
||||
#include "util/db_options.h"
|
||||
|
||||
namespace rocksdb {
|
||||
|
||||
#ifndef ROCKSDB_LITE
|
||||
class WalManager {
|
||||
public:
|
||||
WalManager(const DBOptions& db_options, const EnvOptions& env_options)
|
||||
WalManager(const ImmutableDBOptions& db_options,
|
||||
const EnvOptions& env_options)
|
||||
: db_options_(db_options),
|
||||
env_options_(env_options),
|
||||
env_(db_options.env),
|
||||
@ -75,7 +74,7 @@ class WalManager {
|
||||
SequenceNumber* sequence);
|
||||
|
||||
// ------- state from DBImpl ------
|
||||
const DBOptions& db_options_;
|
||||
const ImmutableDBOptions& db_options_;
|
||||
const EnvOptions& env_options_;
|
||||
Env* env_;
|
||||
|
||||
|
@ -33,6 +33,7 @@ class WalManagerTest : public testing::Test {
|
||||
WalManagerTest()
|
||||
: env_(new MockEnv(Env::Default())),
|
||||
dbname_(test::TmpDir() + "/wal_manager_test"),
|
||||
db_options_(),
|
||||
table_cache_(NewLRUCache(50000, 16)),
|
||||
write_buffer_manager_(db_options_.db_write_buffer_size),
|
||||
current_log_number_(0) {
|
||||
@ -100,10 +101,10 @@ class WalManagerTest : public testing::Test {
|
||||
|
||||
std::unique_ptr<MockEnv> env_;
|
||||
std::string dbname_;
|
||||
ImmutableDBOptions db_options_;
|
||||
WriteController write_controller_;
|
||||
EnvOptions env_options_;
|
||||
std::shared_ptr<Cache> table_cache_;
|
||||
DBOptions db_options_;
|
||||
WriteBufferManager write_buffer_manager_;
|
||||
std::unique_ptr<VersionSet> versions_;
|
||||
std::unique_ptr<WalManager> wal_manager_;
|
||||
@ -205,8 +206,8 @@ int CountRecords(TransactionLogIterator* iter) {
|
||||
} // namespace
|
||||
|
||||
TEST_F(WalManagerTest, WALArchivalSizeLimit) {
|
||||
db_options_.WAL_ttl_seconds = 0;
|
||||
db_options_.WAL_size_limit_MB = 1000;
|
||||
db_options_.wal_ttl_seconds = 0;
|
||||
db_options_.wal_size_limit_mb = 1000;
|
||||
Init();
|
||||
|
||||
// TEST : Create WalManager with huge size limit and no ttl.
|
||||
@ -214,7 +215,7 @@ TEST_F(WalManagerTest, WALArchivalSizeLimit) {
|
||||
// Count the archived log files that survived.
|
||||
// Assert that all of them did.
|
||||
// Change size limit. Re-open WalManager.
|
||||
// Assert that archive is not greater than WAL_size_limit_MB after
|
||||
// Assert that archive is not greater than wal_size_limit_mb after
|
||||
// PurgeObsoleteWALFiles()
|
||||
// Set ttl and time_to_check_ to small values. Re-open db.
|
||||
// Assert that there are no archived logs left.
|
||||
@ -226,14 +227,14 @@ TEST_F(WalManagerTest, WALArchivalSizeLimit) {
|
||||
ListSpecificFiles(env_.get(), archive_dir, kLogFile);
|
||||
ASSERT_EQ(log_files.size(), 20U);
|
||||
|
||||
db_options_.WAL_size_limit_MB = 8;
|
||||
db_options_.wal_size_limit_mb = 8;
|
||||
Reopen();
|
||||
wal_manager_->PurgeObsoleteWALFiles();
|
||||
|
||||
uint64_t archive_size = GetLogDirSize(archive_dir, env_.get());
|
||||
ASSERT_TRUE(archive_size <= db_options_.WAL_size_limit_MB * 1024 * 1024);
|
||||
ASSERT_TRUE(archive_size <= db_options_.wal_size_limit_mb * 1024 * 1024);
|
||||
|
||||
db_options_.WAL_ttl_seconds = 1;
|
||||
db_options_.wal_ttl_seconds = 1;
|
||||
env_->FakeSleepForMicroseconds(2 * 1000 * 1000);
|
||||
Reopen();
|
||||
wal_manager_->PurgeObsoleteWALFiles();
|
||||
@ -243,7 +244,7 @@ TEST_F(WalManagerTest, WALArchivalSizeLimit) {
|
||||
}
|
||||
|
||||
TEST_F(WalManagerTest, WALArchivalTtl) {
|
||||
db_options_.WAL_ttl_seconds = 1000;
|
||||
db_options_.wal_ttl_seconds = 1000;
|
||||
Init();
|
||||
|
||||
// TEST : Create WalManager with a ttl and no size limit.
|
||||
@ -259,7 +260,7 @@ TEST_F(WalManagerTest, WALArchivalTtl) {
|
||||
ListSpecificFiles(env_.get(), archive_dir, kLogFile);
|
||||
ASSERT_GT(log_files.size(), 0U);
|
||||
|
||||
db_options_.WAL_ttl_seconds = 1;
|
||||
db_options_.wal_ttl_seconds = 1;
|
||||
env_->FakeSleepForMicroseconds(3 * 1000 * 1000);
|
||||
Reopen();
|
||||
wal_manager_->PurgeObsoleteWALFiles();
|
||||
|
@ -701,7 +701,7 @@ class DB {
|
||||
return GetOptions(DefaultColumnFamily());
|
||||
}
|
||||
|
||||
virtual const DBOptions& GetDBOptions() const = 0;
|
||||
virtual DBOptions GetDBOptions() const = 0;
|
||||
|
||||
// Flush all mem-table data.
|
||||
virtual Status Flush(const FlushOptions& options,
|
||||
|
@ -224,7 +224,7 @@ class StackableDB : public DB {
|
||||
}
|
||||
|
||||
using DB::GetDBOptions;
|
||||
virtual const DBOptions& GetDBOptions() const override {
|
||||
virtual DBOptions GetDBOptions() const override {
|
||||
return db_->GetDBOptions();
|
||||
}
|
||||
|
||||
|
63
src.mk
63
src.mk
@ -88,18 +88,21 @@ LIB_SOURCES = \
|
||||
util/arena.cc \
|
||||
util/bloom.cc \
|
||||
util/build_version.cc \
|
||||
util/cf_options.cc \
|
||||
util/clock_cache.cc \
|
||||
util/coding.cc \
|
||||
util/comparator.cc \
|
||||
util/compaction_job_stats_impl.cc \
|
||||
util/concurrent_arena.cc \
|
||||
util/crc32c.cc \
|
||||
util/db_options.cc \
|
||||
util/delete_scheduler.cc \
|
||||
util/dynamic_bloom.cc \
|
||||
util/env.cc \
|
||||
util/env_chroot.cc \
|
||||
util/env_hdfs.cc \
|
||||
util/env_posix.cc \
|
||||
util/event_logger.cc \
|
||||
util/file_util.cc \
|
||||
util/file_reader_writer.cc \
|
||||
util/filter_policy.cc \
|
||||
@ -109,13 +112,39 @@ LIB_SOURCES = \
|
||||
util/instrumented_mutex.cc \
|
||||
util/iostats_context.cc \
|
||||
util/io_posix.cc \
|
||||
util/log_buffer.cc \
|
||||
util/logging.cc \
|
||||
util/lru_cache.cc \
|
||||
util/memenv.cc \
|
||||
util/murmurhash.cc \
|
||||
util/options.cc \
|
||||
util/options_helper.cc \
|
||||
util/options_parser.cc \
|
||||
util/options_sanity_check.cc \
|
||||
util/perf_context.cc \
|
||||
util/perf_level.cc \
|
||||
util/random.cc \
|
||||
util/rate_limiter.cc \
|
||||
util/sharded_cache.cc \
|
||||
util/slice.cc \
|
||||
util/sst_file_manager_impl.cc \
|
||||
util/statistics.cc \
|
||||
util/status.cc \
|
||||
util/status_message.cc \
|
||||
util/string_util.cc \
|
||||
util/sync_point.cc \
|
||||
util/thread_local.cc \
|
||||
util/thread_status_impl.cc \
|
||||
util/thread_status_updater.cc \
|
||||
util/thread_status_updater_debug.cc \
|
||||
util/thread_status_util.cc \
|
||||
util/thread_status_util_debug.cc \
|
||||
util/threadpool_imp.cc \
|
||||
util/transaction_test_util.cc \
|
||||
util/sharded_cache.cc \
|
||||
util/sst_file_manager_impl.cc \
|
||||
util/xfunc.cc \
|
||||
util/xxhash.cc \
|
||||
utilities/backupable/backupable_db.cc \
|
||||
utilities/blob_db/blob_db.cc \
|
||||
utilities/blob_db/blob_db.cc \
|
||||
utilities/convenience/info_log_finder.cc \
|
||||
utilities/checkpoint/checkpoint.cc \
|
||||
utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc \
|
||||
@ -156,34 +185,6 @@ LIB_SOURCES = \
|
||||
utilities/date_tiered/date_tiered_db_impl.cc \
|
||||
utilities/write_batch_with_index/write_batch_with_index.cc \
|
||||
utilities/write_batch_with_index/write_batch_with_index_internal.cc \
|
||||
util/cf_options.cc \
|
||||
util/event_logger.cc \
|
||||
util/log_buffer.cc \
|
||||
util/logging.cc \
|
||||
util/memenv.cc \
|
||||
util/murmurhash.cc \
|
||||
util/options.cc \
|
||||
util/options_helper.cc \
|
||||
util/options_parser.cc \
|
||||
util/options_sanity_check.cc \
|
||||
util/perf_context.cc \
|
||||
util/perf_level.cc \
|
||||
util/random.cc \
|
||||
util/rate_limiter.cc \
|
||||
util/slice.cc \
|
||||
util/statistics.cc \
|
||||
util/status.cc \
|
||||
util/status_message.cc \
|
||||
util/string_util.cc \
|
||||
util/sync_point.cc \
|
||||
util/thread_local.cc \
|
||||
util/thread_status_impl.cc \
|
||||
util/thread_status_updater.cc \
|
||||
util/thread_status_updater_debug.cc \
|
||||
util/thread_status_util.cc \
|
||||
util/thread_status_util_debug.cc \
|
||||
util/xfunc.cc \
|
||||
util/xxhash.cc \
|
||||
|
||||
TOOL_LIB_SOURCES = \
|
||||
tools/ldb_cmd.cc \
|
||||
|
@ -881,7 +881,8 @@ void DumpManifestFile(std::string file, bool verbose, bool hex, bool json) {
|
||||
options.num_levels = 64;
|
||||
WriteController wc(options.delayed_write_rate);
|
||||
WriteBufferManager wb(options.db_write_buffer_size);
|
||||
VersionSet versions(dbname, &options, sopt, tc.get(), &wb, &wc);
|
||||
ImmutableDBOptions immutable_db_options(options);
|
||||
VersionSet versions(dbname, &immutable_db_options, sopt, tc.get(), &wb, &wc);
|
||||
Status s = versions.DumpManifest(options, file, verbose, hex, json);
|
||||
if (!s.ok()) {
|
||||
printf("Error in processing file %s %s\n", file.c_str(),
|
||||
@ -1585,13 +1586,14 @@ Options ReduceDBLevelsCommand::PrepareOptionsForOpenDB() {
|
||||
|
||||
Status ReduceDBLevelsCommand::GetOldNumOfLevels(Options& opt,
|
||||
int* levels) {
|
||||
ImmutableDBOptions db_options(opt);
|
||||
EnvOptions soptions;
|
||||
std::shared_ptr<Cache> tc(
|
||||
NewLRUCache(opt.max_open_files - 10, opt.table_cache_numshardbits));
|
||||
const InternalKeyComparator cmp(opt.comparator);
|
||||
WriteController wc(opt.delayed_write_rate);
|
||||
WriteBufferManager wb(opt.db_write_buffer_size);
|
||||
VersionSet versions(db_path_, &opt, soptions, tc.get(), &wb, &wc);
|
||||
VersionSet versions(db_path_, &db_options, soptions, tc.get(), &wb, &wc);
|
||||
std::vector<ColumnFamilyDescriptor> dummy;
|
||||
ColumnFamilyDescriptor dummy_descriptor(kDefaultColumnFamilyName,
|
||||
ColumnFamilyOptions(opt));
|
||||
|
@ -16,51 +16,62 @@
|
||||
#include "port/port.h"
|
||||
#include "rocksdb/env.h"
|
||||
#include "rocksdb/options.h"
|
||||
#include "util/db_options.h"
|
||||
|
||||
namespace rocksdb {
|
||||
|
||||
ImmutableCFOptions::ImmutableCFOptions(const Options& options)
|
||||
: compaction_style(options.compaction_style),
|
||||
compaction_pri(options.compaction_pri),
|
||||
compaction_options_universal(options.compaction_options_universal),
|
||||
compaction_options_fifo(options.compaction_options_fifo),
|
||||
prefix_extractor(options.prefix_extractor.get()),
|
||||
comparator(options.comparator),
|
||||
merge_operator(options.merge_operator.get()),
|
||||
compaction_filter(options.compaction_filter),
|
||||
compaction_filter_factory(options.compaction_filter_factory.get()),
|
||||
inplace_update_support(options.inplace_update_support),
|
||||
inplace_callback(options.inplace_callback),
|
||||
info_log(options.info_log.get()),
|
||||
statistics(options.statistics.get()),
|
||||
env(options.env),
|
||||
delayed_write_rate(options.delayed_write_rate),
|
||||
allow_mmap_reads(options.allow_mmap_reads),
|
||||
allow_mmap_writes(options.allow_mmap_writes),
|
||||
db_paths(options.db_paths),
|
||||
memtable_factory(options.memtable_factory.get()),
|
||||
table_factory(options.table_factory.get()),
|
||||
: ImmutableCFOptions(ImmutableDBOptions(options), options) {}
|
||||
|
||||
ImmutableCFOptions::ImmutableCFOptions(const ImmutableDBOptions& db_options,
|
||||
const ColumnFamilyOptions& cf_options)
|
||||
: compaction_style(cf_options.compaction_style),
|
||||
compaction_pri(cf_options.compaction_pri),
|
||||
compaction_options_universal(cf_options.compaction_options_universal),
|
||||
compaction_options_fifo(cf_options.compaction_options_fifo),
|
||||
prefix_extractor(cf_options.prefix_extractor.get()),
|
||||
comparator(cf_options.comparator),
|
||||
merge_operator(cf_options.merge_operator.get()),
|
||||
compaction_filter(cf_options.compaction_filter),
|
||||
compaction_filter_factory(cf_options.compaction_filter_factory.get()),
|
||||
min_write_buffer_number_to_merge(
|
||||
cf_options.min_write_buffer_number_to_merge),
|
||||
max_write_buffer_number_to_maintain(
|
||||
cf_options.max_write_buffer_number_to_maintain),
|
||||
inplace_update_support(cf_options.inplace_update_support),
|
||||
inplace_callback(cf_options.inplace_callback),
|
||||
info_log(db_options.info_log.get()),
|
||||
statistics(db_options.statistics.get()),
|
||||
env(db_options.env),
|
||||
delayed_write_rate(db_options.delayed_write_rate),
|
||||
allow_mmap_reads(db_options.allow_mmap_reads),
|
||||
allow_mmap_writes(db_options.allow_mmap_writes),
|
||||
db_paths(db_options.db_paths),
|
||||
memtable_factory(cf_options.memtable_factory.get()),
|
||||
table_factory(cf_options.table_factory.get()),
|
||||
table_properties_collector_factories(
|
||||
options.table_properties_collector_factories),
|
||||
advise_random_on_open(options.advise_random_on_open),
|
||||
bloom_locality(options.bloom_locality),
|
||||
purge_redundant_kvs_while_flush(options.purge_redundant_kvs_while_flush),
|
||||
disable_data_sync(options.disableDataSync),
|
||||
use_fsync(options.use_fsync),
|
||||
compression_per_level(options.compression_per_level),
|
||||
bottommost_compression(options.bottommost_compression),
|
||||
compression_opts(options.compression_opts),
|
||||
cf_options.table_properties_collector_factories),
|
||||
advise_random_on_open(db_options.advise_random_on_open),
|
||||
bloom_locality(cf_options.bloom_locality),
|
||||
purge_redundant_kvs_while_flush(
|
||||
cf_options.purge_redundant_kvs_while_flush),
|
||||
disable_data_sync(db_options.disable_data_sync),
|
||||
use_fsync(db_options.use_fsync),
|
||||
compression_per_level(cf_options.compression_per_level),
|
||||
bottommost_compression(cf_options.bottommost_compression),
|
||||
compression_opts(cf_options.compression_opts),
|
||||
level_compaction_dynamic_level_bytes(
|
||||
options.level_compaction_dynamic_level_bytes),
|
||||
access_hint_on_compaction_start(options.access_hint_on_compaction_start),
|
||||
cf_options.level_compaction_dynamic_level_bytes),
|
||||
access_hint_on_compaction_start(
|
||||
db_options.access_hint_on_compaction_start),
|
||||
new_table_reader_for_compaction_inputs(
|
||||
options.new_table_reader_for_compaction_inputs),
|
||||
compaction_readahead_size(options.compaction_readahead_size),
|
||||
num_levels(options.num_levels),
|
||||
optimize_filters_for_hits(options.optimize_filters_for_hits),
|
||||
listeners(options.listeners),
|
||||
row_cache(options.row_cache),
|
||||
max_subcompactions(options.max_subcompactions) {}
|
||||
db_options.new_table_reader_for_compaction_inputs),
|
||||
compaction_readahead_size(db_options.compaction_readahead_size),
|
||||
num_levels(cf_options.num_levels),
|
||||
optimize_filters_for_hits(cf_options.optimize_filters_for_hits),
|
||||
listeners(db_options.listeners),
|
||||
row_cache(db_options.row_cache),
|
||||
max_subcompactions(db_options.max_subcompactions) {}
|
||||
|
||||
// Multiple two operands. If they overflow, return op1.
|
||||
uint64_t MultiplyCheckOverflow(uint64_t op1, int op2) {
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
#include "rocksdb/options.h"
|
||||
#include "util/compression.h"
|
||||
#include "util/db_options.h"
|
||||
|
||||
namespace rocksdb {
|
||||
|
||||
@ -18,8 +19,12 @@ namespace rocksdb {
|
||||
// of DB. Raw pointers defined in this struct do not have ownership to the data
|
||||
// they point to. Options contains shared_ptr to these data.
|
||||
struct ImmutableCFOptions {
|
||||
ImmutableCFOptions();
|
||||
explicit ImmutableCFOptions(const Options& options);
|
||||
|
||||
ImmutableCFOptions(const ImmutableDBOptions& db_options,
|
||||
const ColumnFamilyOptions& cf_options);
|
||||
|
||||
CompactionStyle compaction_style;
|
||||
|
||||
CompactionPri compaction_pri;
|
||||
@ -37,6 +42,10 @@ struct ImmutableCFOptions {
|
||||
|
||||
CompactionFilterFactory* compaction_filter_factory;
|
||||
|
||||
int min_write_buffer_number_to_merge;
|
||||
|
||||
int max_write_buffer_number_to_maintain;
|
||||
|
||||
bool inplace_update_support;
|
||||
|
||||
UpdateStatus (*inplace_callback)(char* existing_value,
|
||||
|
233
util/db_options.cc
Normal file
233
util/db_options.cc
Normal file
@ -0,0 +1,233 @@
|
||||
// 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.
|
||||
|
||||
#include "util/db_options.h"
|
||||
|
||||
#ifndef __STDC_FORMAT_MACROS
|
||||
#define __STDC_FORMAT_MACROS
|
||||
#endif
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
#include "port/port.h"
|
||||
#include "rocksdb/cache.h"
|
||||
#include "rocksdb/env.h"
|
||||
#include "rocksdb/sst_file_manager.h"
|
||||
#include "rocksdb/wal_filter.h"
|
||||
|
||||
namespace rocksdb {
|
||||
|
||||
ImmutableDBOptions::ImmutableDBOptions() : ImmutableDBOptions(Options()) {}
|
||||
|
||||
ImmutableDBOptions::ImmutableDBOptions(const DBOptions& options)
|
||||
: create_if_missing(options.create_if_missing),
|
||||
create_missing_column_families(options.create_missing_column_families),
|
||||
error_if_exists(options.error_if_exists),
|
||||
paranoid_checks(options.paranoid_checks),
|
||||
env(options.env),
|
||||
rate_limiter(options.rate_limiter),
|
||||
sst_file_manager(options.sst_file_manager),
|
||||
info_log(options.info_log),
|
||||
info_log_level(options.info_log_level),
|
||||
max_open_files(options.max_open_files),
|
||||
max_file_opening_threads(options.max_file_opening_threads),
|
||||
max_total_wal_size(options.max_total_wal_size),
|
||||
statistics(options.statistics),
|
||||
disable_data_sync(options.disableDataSync),
|
||||
use_fsync(options.use_fsync),
|
||||
db_paths(options.db_paths),
|
||||
db_log_dir(options.db_log_dir),
|
||||
wal_dir(options.wal_dir),
|
||||
delete_obsolete_files_period_micros(
|
||||
options.delete_obsolete_files_period_micros),
|
||||
base_background_compactions(options.base_background_compactions),
|
||||
max_background_compactions(options.max_background_compactions),
|
||||
max_subcompactions(options.max_subcompactions),
|
||||
max_background_flushes(options.max_background_flushes),
|
||||
max_log_file_size(options.max_log_file_size),
|
||||
log_file_time_to_roll(options.log_file_time_to_roll),
|
||||
keep_log_file_num(options.keep_log_file_num),
|
||||
recycle_log_file_num(options.recycle_log_file_num),
|
||||
max_manifest_file_size(options.max_manifest_file_size),
|
||||
table_cache_numshardbits(options.table_cache_numshardbits),
|
||||
wal_ttl_seconds(options.WAL_ttl_seconds),
|
||||
wal_size_limit_mb(options.WAL_size_limit_MB),
|
||||
manifest_preallocation_size(options.manifest_preallocation_size),
|
||||
allow_os_buffer(options.allow_os_buffer),
|
||||
allow_mmap_reads(options.allow_mmap_reads),
|
||||
allow_mmap_writes(options.allow_mmap_writes),
|
||||
allow_fallocate(options.allow_fallocate),
|
||||
is_fd_close_on_exec(options.is_fd_close_on_exec),
|
||||
stats_dump_period_sec(options.stats_dump_period_sec),
|
||||
advise_random_on_open(options.advise_random_on_open),
|
||||
db_write_buffer_size(options.db_write_buffer_size),
|
||||
write_buffer_manager(options.write_buffer_manager),
|
||||
access_hint_on_compaction_start(options.access_hint_on_compaction_start),
|
||||
new_table_reader_for_compaction_inputs(
|
||||
options.new_table_reader_for_compaction_inputs),
|
||||
compaction_readahead_size(options.compaction_readahead_size),
|
||||
random_access_max_buffer_size(options.random_access_max_buffer_size),
|
||||
writable_file_max_buffer_size(options.writable_file_max_buffer_size),
|
||||
use_adaptive_mutex(options.use_adaptive_mutex),
|
||||
bytes_per_sync(options.bytes_per_sync),
|
||||
wal_bytes_per_sync(options.wal_bytes_per_sync),
|
||||
listeners(options.listeners),
|
||||
enable_thread_tracking(options.enable_thread_tracking),
|
||||
delayed_write_rate(options.delayed_write_rate),
|
||||
allow_concurrent_memtable_write(options.allow_concurrent_memtable_write),
|
||||
enable_write_thread_adaptive_yield(
|
||||
options.enable_write_thread_adaptive_yield),
|
||||
write_thread_max_yield_usec(options.write_thread_max_yield_usec),
|
||||
write_thread_slow_yield_usec(options.write_thread_slow_yield_usec),
|
||||
skip_stats_update_on_db_open(options.skip_stats_update_on_db_open),
|
||||
wal_recovery_mode(options.wal_recovery_mode),
|
||||
allow_2pc(options.allow_2pc),
|
||||
row_cache(options.row_cache),
|
||||
#ifndef ROCKSDB_LITE
|
||||
wal_filter(options.wal_filter),
|
||||
#endif // ROCKSDB_LITE
|
||||
fail_if_options_file_error(options.fail_if_options_file_error),
|
||||
dump_malloc_stats(options.dump_malloc_stats),
|
||||
avoid_flush_during_recovery(options.avoid_flush_during_recovery) {
|
||||
}
|
||||
|
||||
void ImmutableDBOptions::Dump(Logger* log) const {
|
||||
Header(log, " Options.error_if_exists: %d",
|
||||
error_if_exists);
|
||||
Header(log, " Options.create_if_missing: %d",
|
||||
create_if_missing);
|
||||
Header(log, " Options.paranoid_checks: %d",
|
||||
paranoid_checks);
|
||||
Header(log, " Options.env: %p", env);
|
||||
Header(log, " Options.info_log: %p",
|
||||
info_log.get());
|
||||
Header(log, " Options.max_open_files: %d",
|
||||
max_open_files);
|
||||
Header(log, " Options.max_file_opening_threads: %d",
|
||||
max_file_opening_threads);
|
||||
Header(log, " Options.max_total_wal_size: %" PRIu64,
|
||||
max_total_wal_size);
|
||||
Header(log, " Options.disableDataSync: %d",
|
||||
disable_data_sync);
|
||||
Header(log, " Options.use_fsync: %d", use_fsync);
|
||||
Header(log,
|
||||
" Options.max_log_file_size: %" ROCKSDB_PRIszt,
|
||||
max_log_file_size);
|
||||
Header(log, " Options.max_manifest_file_size: %" PRIu64,
|
||||
max_manifest_file_size);
|
||||
Header(log,
|
||||
" Options.log_file_time_to_roll: %" ROCKSDB_PRIszt,
|
||||
log_file_time_to_roll);
|
||||
Header(log,
|
||||
" Options.keep_log_file_num: %" ROCKSDB_PRIszt,
|
||||
keep_log_file_num);
|
||||
Header(log,
|
||||
" Options.recycle_log_file_num: %" ROCKSDB_PRIszt,
|
||||
recycle_log_file_num);
|
||||
Header(log, " Options.allow_os_buffer: %d",
|
||||
allow_os_buffer);
|
||||
Header(log, " Options.allow_mmap_reads: %d",
|
||||
allow_mmap_reads);
|
||||
Header(log, " Options.allow_fallocate: %d",
|
||||
allow_fallocate);
|
||||
Header(log, " Options.allow_mmap_writes: %d",
|
||||
allow_mmap_writes);
|
||||
Header(log, " Options.create_missing_column_families: %d",
|
||||
create_missing_column_families);
|
||||
Header(log, " Options.db_log_dir: %s",
|
||||
db_log_dir.c_str());
|
||||
Header(log, " Options.wal_dir: %s",
|
||||
wal_dir.c_str());
|
||||
Header(log, " Options.table_cache_numshardbits: %d",
|
||||
table_cache_numshardbits);
|
||||
Header(log, " Options.delete_obsolete_files_period_micros: %" PRIu64,
|
||||
delete_obsolete_files_period_micros);
|
||||
Header(log, " Options.base_background_compactions: %d",
|
||||
base_background_compactions);
|
||||
Header(log, " Options.max_background_compactions: %d",
|
||||
max_background_compactions);
|
||||
Header(log, " Options.max_subcompactions: %" PRIu32,
|
||||
max_subcompactions);
|
||||
Header(log, " Options.max_background_flushes: %d",
|
||||
max_background_flushes);
|
||||
Header(log, " Options.WAL_ttl_seconds: %" PRIu64,
|
||||
wal_ttl_seconds);
|
||||
Header(log, " Options.WAL_size_limit_MB: %" PRIu64,
|
||||
wal_size_limit_mb);
|
||||
Header(log,
|
||||
" Options.manifest_preallocation_size: %" ROCKSDB_PRIszt,
|
||||
manifest_preallocation_size);
|
||||
Header(log, " Options.allow_os_buffer: %d",
|
||||
allow_os_buffer);
|
||||
Header(log, " Options.allow_mmap_reads: %d",
|
||||
allow_mmap_reads);
|
||||
Header(log, " Options.allow_mmap_writes: %d",
|
||||
allow_mmap_writes);
|
||||
Header(log, " Options.is_fd_close_on_exec: %d",
|
||||
is_fd_close_on_exec);
|
||||
Header(log, " Options.stats_dump_period_sec: %u",
|
||||
stats_dump_period_sec);
|
||||
Header(log, " Options.advise_random_on_open: %d",
|
||||
advise_random_on_open);
|
||||
Header(log,
|
||||
" Options.db_write_buffer_size: %" ROCKSDB_PRIszt,
|
||||
db_write_buffer_size);
|
||||
Header(log, " Options.access_hint_on_compaction_start: %d",
|
||||
static_cast<int>(access_hint_on_compaction_start));
|
||||
Header(log, " Options.new_table_reader_for_compaction_inputs: %d",
|
||||
new_table_reader_for_compaction_inputs);
|
||||
Header(log,
|
||||
" Options.compaction_readahead_size: %" ROCKSDB_PRIszt,
|
||||
compaction_readahead_size);
|
||||
Header(log,
|
||||
" Options.random_access_max_buffer_size: %" ROCKSDB_PRIszt,
|
||||
random_access_max_buffer_size);
|
||||
Header(log,
|
||||
" Options.writable_file_max_buffer_size: %" ROCKSDB_PRIszt,
|
||||
writable_file_max_buffer_size);
|
||||
Header(log, " Options.use_adaptive_mutex: %d",
|
||||
use_adaptive_mutex);
|
||||
Header(log, " Options.rate_limiter: %p",
|
||||
rate_limiter.get());
|
||||
Header(
|
||||
log, " Options.sst_file_manager.rate_bytes_per_sec: %" PRIi64,
|
||||
sst_file_manager ? sst_file_manager->GetDeleteRateBytesPerSecond() : 0);
|
||||
Header(log, " Options.bytes_per_sync: %" PRIu64,
|
||||
bytes_per_sync);
|
||||
Header(log, " Options.wal_bytes_per_sync: %" PRIu64,
|
||||
wal_bytes_per_sync);
|
||||
Header(log, " Options.wal_recovery_mode: %d",
|
||||
wal_recovery_mode);
|
||||
Header(log, " Options.enable_thread_tracking: %d",
|
||||
enable_thread_tracking);
|
||||
Log(log, " Options.delayed_write_rate : %" PRIu64,
|
||||
delayed_write_rate);
|
||||
Header(log, " Options.allow_concurrent_memtable_write: %d",
|
||||
allow_concurrent_memtable_write);
|
||||
Header(log, " Options.enable_write_thread_adaptive_yield: %d",
|
||||
enable_write_thread_adaptive_yield);
|
||||
Header(log, " Options.write_thread_max_yield_usec: %" PRIu64,
|
||||
write_thread_max_yield_usec);
|
||||
Header(log, " Options.write_thread_slow_yield_usec: %" PRIu64,
|
||||
write_thread_slow_yield_usec);
|
||||
if (row_cache) {
|
||||
Header(log, " Options.row_cache: %" PRIu64,
|
||||
row_cache->GetCapacity());
|
||||
} else {
|
||||
Header(log, " Options.row_cache: None");
|
||||
}
|
||||
#ifndef ROCKSDB_LITE
|
||||
Header(log, " Options.wal_filter: %s",
|
||||
wal_filter ? wal_filter->Name() : "None");
|
||||
#endif // ROCKDB_LITE
|
||||
Header(log, " Options.avoid_flush_during_recovery: %d",
|
||||
avoid_flush_during_recovery);
|
||||
}
|
||||
|
||||
MutableDBOptions::MutableDBOptions(const DBOptions& options) {}
|
||||
|
||||
void MutableDBOptions::Dump(Logger* log) const {}
|
||||
|
||||
} // namespace rocksdb
|
96
util/db_options.h
Normal file
96
util/db_options.h
Normal file
@ -0,0 +1,96 @@
|
||||
// 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.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "rocksdb/options.h"
|
||||
|
||||
namespace rocksdb {
|
||||
|
||||
struct ImmutableDBOptions {
|
||||
ImmutableDBOptions();
|
||||
explicit ImmutableDBOptions(const DBOptions& options);
|
||||
|
||||
void Dump(Logger* log) const;
|
||||
|
||||
bool create_if_missing;
|
||||
bool create_missing_column_families;
|
||||
bool error_if_exists;
|
||||
bool paranoid_checks;
|
||||
Env* env;
|
||||
std::shared_ptr<RateLimiter> rate_limiter;
|
||||
std::shared_ptr<SstFileManager> sst_file_manager;
|
||||
std::shared_ptr<Logger> info_log;
|
||||
InfoLogLevel info_log_level;
|
||||
int max_open_files;
|
||||
int max_file_opening_threads;
|
||||
uint64_t max_total_wal_size;
|
||||
std::shared_ptr<Statistics> statistics;
|
||||
bool disable_data_sync;
|
||||
bool use_fsync;
|
||||
std::vector<DbPath> db_paths;
|
||||
std::string db_log_dir;
|
||||
std::string wal_dir;
|
||||
uint64_t delete_obsolete_files_period_micros;
|
||||
int base_background_compactions;
|
||||
int max_background_compactions;
|
||||
uint32_t max_subcompactions;
|
||||
int max_background_flushes;
|
||||
size_t max_log_file_size;
|
||||
size_t log_file_time_to_roll;
|
||||
size_t keep_log_file_num;
|
||||
size_t recycle_log_file_num;
|
||||
uint64_t max_manifest_file_size;
|
||||
int table_cache_numshardbits;
|
||||
uint64_t wal_ttl_seconds;
|
||||
uint64_t wal_size_limit_mb;
|
||||
size_t manifest_preallocation_size;
|
||||
bool allow_os_buffer;
|
||||
bool allow_mmap_reads;
|
||||
bool allow_mmap_writes;
|
||||
bool allow_fallocate;
|
||||
bool is_fd_close_on_exec;
|
||||
unsigned int stats_dump_period_sec;
|
||||
bool advise_random_on_open;
|
||||
size_t db_write_buffer_size;
|
||||
std::shared_ptr<WriteBufferManager> write_buffer_manager;
|
||||
DBOptions::AccessHint access_hint_on_compaction_start;
|
||||
bool new_table_reader_for_compaction_inputs;
|
||||
size_t compaction_readahead_size;
|
||||
size_t random_access_max_buffer_size;
|
||||
size_t writable_file_max_buffer_size;
|
||||
bool use_adaptive_mutex;
|
||||
uint64_t bytes_per_sync;
|
||||
uint64_t wal_bytes_per_sync;
|
||||
std::vector<std::shared_ptr<EventListener>> listeners;
|
||||
bool enable_thread_tracking;
|
||||
uint64_t delayed_write_rate;
|
||||
bool allow_concurrent_memtable_write;
|
||||
bool enable_write_thread_adaptive_yield;
|
||||
uint64_t write_thread_max_yield_usec;
|
||||
uint64_t write_thread_slow_yield_usec;
|
||||
bool skip_stats_update_on_db_open;
|
||||
WALRecoveryMode wal_recovery_mode;
|
||||
bool allow_2pc;
|
||||
std::shared_ptr<Cache> row_cache;
|
||||
#ifndef ROCKSDB_LITE
|
||||
WalFilter* wal_filter;
|
||||
#endif // ROCKSDB_LITE
|
||||
bool fail_if_options_file_error;
|
||||
bool dump_malloc_stats;
|
||||
bool avoid_flush_during_recovery;
|
||||
};
|
||||
|
||||
struct MutableDBOptions {
|
||||
explicit MutableDBOptions(const MutableDBOptions& options) = default;
|
||||
explicit MutableDBOptions(const DBOptions& options);
|
||||
|
||||
void Dump(Logger* log) const;
|
||||
};
|
||||
|
||||
} // namespace rocksdb
|
@ -9,7 +9,6 @@
|
||||
#include <algorithm>
|
||||
|
||||
#include "rocksdb/env.h"
|
||||
#include "rocksdb/options.h"
|
||||
#include "util/sst_file_manager_impl.h"
|
||||
#include "util/file_reader_writer.h"
|
||||
|
||||
@ -82,8 +81,8 @@ Status CreateFile(Env* env, const std::string& destination,
|
||||
return dest_writer->Append(Slice(contents));
|
||||
}
|
||||
|
||||
Status DeleteSSTFile(const DBOptions* db_options, const std::string& fname,
|
||||
uint32_t path_id) {
|
||||
Status DeleteSSTFile(const ImmutableDBOptions* db_options,
|
||||
const std::string& fname, uint32_t path_id) {
|
||||
// TODO(tec): support sst_file_manager for multiple path_ids
|
||||
auto sfm =
|
||||
static_cast<SstFileManagerImpl*>(db_options->sst_file_manager.get());
|
||||
|
@ -6,10 +6,10 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
|
||||
#include "rocksdb/env.h"
|
||||
#include "rocksdb/status.h"
|
||||
#include "rocksdb/types.h"
|
||||
#include "rocksdb/env.h"
|
||||
#include "rocksdb/options.h"
|
||||
#include "util/db_options.h"
|
||||
|
||||
namespace rocksdb {
|
||||
|
||||
@ -19,7 +19,7 @@ extern Status CopyFile(Env* env, const std::string& source,
|
||||
extern Status CreateFile(Env* env, const std::string& destination,
|
||||
const std::string& contents);
|
||||
|
||||
extern Status DeleteSSTFile(const DBOptions* db_options,
|
||||
extern Status DeleteSSTFile(const ImmutableDBOptions* db_options,
|
||||
const std::string& fname, uint32_t path_id);
|
||||
|
||||
} // namespace rocksdb
|
||||
|
@ -26,6 +26,99 @@
|
||||
|
||||
namespace rocksdb {
|
||||
|
||||
DBOptions BuildDBOptions(const ImmutableDBOptions& immutable_db_options,
|
||||
const MutableDBOptions& mutable_db_options) {
|
||||
DBOptions options;
|
||||
|
||||
options.create_if_missing = immutable_db_options.create_if_missing;
|
||||
options.create_missing_column_families =
|
||||
immutable_db_options.create_missing_column_families;
|
||||
options.error_if_exists = immutable_db_options.error_if_exists;
|
||||
options.paranoid_checks = immutable_db_options.paranoid_checks;
|
||||
options.env = immutable_db_options.env;
|
||||
options.rate_limiter = immutable_db_options.rate_limiter;
|
||||
options.sst_file_manager = immutable_db_options.sst_file_manager;
|
||||
options.info_log = immutable_db_options.info_log;
|
||||
options.info_log_level = immutable_db_options.info_log_level;
|
||||
options.max_open_files = immutable_db_options.max_open_files;
|
||||
options.max_file_opening_threads =
|
||||
immutable_db_options.max_file_opening_threads;
|
||||
options.max_total_wal_size = immutable_db_options.max_total_wal_size;
|
||||
options.statistics = immutable_db_options.statistics;
|
||||
options.disableDataSync = immutable_db_options.disable_data_sync;
|
||||
options.use_fsync = immutable_db_options.use_fsync;
|
||||
options.db_paths = immutable_db_options.db_paths;
|
||||
options.db_log_dir = immutable_db_options.db_log_dir;
|
||||
options.wal_dir = immutable_db_options.wal_dir;
|
||||
options.delete_obsolete_files_period_micros =
|
||||
immutable_db_options.delete_obsolete_files_period_micros;
|
||||
options.base_background_compactions =
|
||||
immutable_db_options.base_background_compactions;
|
||||
options.max_background_compactions =
|
||||
immutable_db_options.max_background_compactions;
|
||||
options.max_subcompactions = immutable_db_options.max_subcompactions;
|
||||
options.max_background_flushes = immutable_db_options.max_background_flushes;
|
||||
options.max_log_file_size = immutable_db_options.max_log_file_size;
|
||||
options.log_file_time_to_roll = immutable_db_options.log_file_time_to_roll;
|
||||
options.keep_log_file_num = immutable_db_options.keep_log_file_num;
|
||||
options.recycle_log_file_num = immutable_db_options.recycle_log_file_num;
|
||||
options.max_manifest_file_size = immutable_db_options.max_manifest_file_size;
|
||||
options.table_cache_numshardbits =
|
||||
immutable_db_options.table_cache_numshardbits;
|
||||
options.WAL_ttl_seconds = immutable_db_options.wal_ttl_seconds;
|
||||
options.WAL_size_limit_MB = immutable_db_options.wal_size_limit_mb;
|
||||
options.manifest_preallocation_size =
|
||||
immutable_db_options.manifest_preallocation_size;
|
||||
options.allow_os_buffer = immutable_db_options.allow_os_buffer;
|
||||
options.allow_mmap_reads = immutable_db_options.allow_mmap_reads;
|
||||
options.allow_mmap_writes = immutable_db_options.allow_mmap_writes;
|
||||
options.allow_fallocate = immutable_db_options.allow_fallocate;
|
||||
options.is_fd_close_on_exec = immutable_db_options.is_fd_close_on_exec;
|
||||
options.stats_dump_period_sec = immutable_db_options.stats_dump_period_sec;
|
||||
options.advise_random_on_open = immutable_db_options.advise_random_on_open;
|
||||
options.db_write_buffer_size = immutable_db_options.db_write_buffer_size;
|
||||
options.write_buffer_manager = immutable_db_options.write_buffer_manager;
|
||||
options.access_hint_on_compaction_start =
|
||||
immutable_db_options.access_hint_on_compaction_start;
|
||||
options.new_table_reader_for_compaction_inputs =
|
||||
immutable_db_options.new_table_reader_for_compaction_inputs;
|
||||
options.compaction_readahead_size =
|
||||
immutable_db_options.compaction_readahead_size;
|
||||
options.random_access_max_buffer_size =
|
||||
immutable_db_options.random_access_max_buffer_size;
|
||||
options.writable_file_max_buffer_size =
|
||||
immutable_db_options.writable_file_max_buffer_size;
|
||||
options.use_adaptive_mutex = immutable_db_options.use_adaptive_mutex;
|
||||
options.bytes_per_sync = immutable_db_options.bytes_per_sync;
|
||||
options.wal_bytes_per_sync = immutable_db_options.wal_bytes_per_sync;
|
||||
options.listeners = immutable_db_options.listeners;
|
||||
options.enable_thread_tracking = immutable_db_options.enable_thread_tracking;
|
||||
options.delayed_write_rate = immutable_db_options.delayed_write_rate;
|
||||
options.allow_concurrent_memtable_write =
|
||||
immutable_db_options.allow_concurrent_memtable_write;
|
||||
options.enable_write_thread_adaptive_yield =
|
||||
immutable_db_options.enable_write_thread_adaptive_yield;
|
||||
options.write_thread_max_yield_usec =
|
||||
immutable_db_options.write_thread_max_yield_usec;
|
||||
options.write_thread_slow_yield_usec =
|
||||
immutable_db_options.write_thread_slow_yield_usec;
|
||||
options.skip_stats_update_on_db_open =
|
||||
immutable_db_options.skip_stats_update_on_db_open;
|
||||
options.wal_recovery_mode = immutable_db_options.wal_recovery_mode;
|
||||
options.allow_2pc = immutable_db_options.allow_2pc;
|
||||
options.row_cache = immutable_db_options.row_cache;
|
||||
#ifndef ROCKSDB_LITE
|
||||
options.wal_filter = immutable_db_options.wal_filter;
|
||||
#endif // ROCKSDB_LITE
|
||||
options.fail_if_options_file_error =
|
||||
immutable_db_options.fail_if_options_file_error;
|
||||
options.dump_malloc_stats = immutable_db_options.dump_malloc_stats;
|
||||
options.avoid_flush_during_recovery =
|
||||
immutable_db_options.avoid_flush_during_recovery;
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
ColumnFamilyOptions BuildColumnFamilyOptions(
|
||||
const ColumnFamilyOptions& options,
|
||||
const MutableCFOptions& mutable_cf_options) {
|
||||
|
@ -13,9 +13,13 @@
|
||||
#include "rocksdb/status.h"
|
||||
#include "rocksdb/table.h"
|
||||
#include "util/cf_options.h"
|
||||
#include "util/db_options.h"
|
||||
|
||||
namespace rocksdb {
|
||||
|
||||
DBOptions BuildDBOptions(const ImmutableDBOptions& immutable_db_options,
|
||||
const MutableDBOptions& mutable_db_options);
|
||||
|
||||
ColumnFamilyOptions BuildColumnFamilyOptions(
|
||||
const ColumnFamilyOptions& ioptions,
|
||||
const MutableCFOptions& mutable_cf_options);
|
||||
|
Loading…
Reference in New Issue
Block a user