max_open_files dynamic set, follow up
Summary: Followup to make 0x40000 a TableCache constant that indicates infinite capacity Closes https://github.com/facebook/rocksdb/pull/2247 Differential Revision: D5001349 Pulled By: lgalanis fbshipit-source-id: ce7bd2e54b0975bb9f8680fdaa0f8bb0e7ae81a2
This commit is contained in:
parent
6b99dbe049
commit
a45e98a5b5
@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
### New Features
|
### New Features
|
||||||
* DB::ResetStats() to reset internal stats.
|
* DB::ResetStats() to reset internal stats.
|
||||||
* Support dynamically change `max_open_files` option via SetDBOptions()
|
|
||||||
* Statistics::Reset() to reset user stats.
|
* Statistics::Reset() to reset user stats.
|
||||||
* ldb add option --try_load_options, which will open DB with its own option file.
|
* ldb add option --try_load_options, which will open DB with its own option file.
|
||||||
* Support dynamically change `max_open_files` option via SetDBOptions()
|
* Support dynamically change `max_open_files` option via SetDBOptions()
|
||||||
|
@ -193,7 +193,7 @@ DBImpl::DBImpl(const DBOptions& options, const std::string& dbname)
|
|||||||
// Reserve ten files or so for other uses and give the rest to TableCache.
|
// Reserve ten files or so for other uses and give the rest to TableCache.
|
||||||
// Give a large number for setting of "infinite" open files.
|
// Give a large number for setting of "infinite" open files.
|
||||||
const int table_cache_size = (mutable_db_options_.max_open_files == -1)
|
const int table_cache_size = (mutable_db_options_.max_open_files == -1)
|
||||||
? 0x400000
|
? TableCache::kInfiniteCapacity
|
||||||
: mutable_db_options_.max_open_files - 10;
|
: mutable_db_options_.max_open_files - 10;
|
||||||
table_cache_ = NewLRUCache(table_cache_size,
|
table_cache_ = NewLRUCache(table_cache_size,
|
||||||
immutable_db_options_.table_cache_numshardbits);
|
immutable_db_options_.table_cache_numshardbits);
|
||||||
@ -582,7 +582,7 @@ Status DBImpl::SetDBOptions(
|
|||||||
|
|
||||||
write_controller_.set_max_delayed_write_rate(new_options.delayed_write_rate);
|
write_controller_.set_max_delayed_write_rate(new_options.delayed_write_rate);
|
||||||
table_cache_.get()->SetCapacity(new_options.max_open_files == -1
|
table_cache_.get()->SetCapacity(new_options.max_open_files == -1
|
||||||
? 0x400000
|
? TableCache::kInfiniteCapacity
|
||||||
: new_options.max_open_files - 10);
|
: new_options.max_open_files - 10);
|
||||||
|
|
||||||
mutable_db_options_ = new_options;
|
mutable_db_options_ = new_options;
|
||||||
|
@ -117,6 +117,10 @@ class TableCache {
|
|||||||
// Release the handle from a cache
|
// Release the handle from a cache
|
||||||
void ReleaseHandle(Cache::Handle* handle);
|
void ReleaseHandle(Cache::Handle* handle);
|
||||||
|
|
||||||
|
// Capacity of the backing Cache that indicates inifinite TableCache capacity.
|
||||||
|
// For example when max_open_files is -1 we set the backing Cache to this.
|
||||||
|
static const int kInfiniteCapacity = 0x400000;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Build a table reader
|
// Build a table reader
|
||||||
Status GetTableReader(const EnvOptions& env_options,
|
Status GetTableReader(const EnvOptions& env_options,
|
||||||
|
@ -1123,9 +1123,9 @@ void Version::UpdateAccumulatedStats(bool update_stats) {
|
|||||||
// already been read, so MaybeInitializeFileMetaData() won't incur
|
// already been read, so MaybeInitializeFileMetaData() won't incur
|
||||||
// any I/O cost. "max_open_files=-1" means that the table cache passed
|
// any I/O cost. "max_open_files=-1" means that the table cache passed
|
||||||
// to the VersionSet and then to the ColumnFamilySet has a size of
|
// to the VersionSet and then to the ColumnFamilySet has a size of
|
||||||
// 0x400000
|
// TableCache::kInfiniteCapacity
|
||||||
if (vset_->GetColumnFamilySet()->get_table_cache()->GetCapacity() ==
|
if (vset_->GetColumnFamilySet()->get_table_cache()->GetCapacity() ==
|
||||||
0x400000) {
|
TableCache::kInfiniteCapacity) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (++init_count >= kMaxInitCount) {
|
if (++init_count >= kMaxInitCount) {
|
||||||
@ -2384,7 +2384,7 @@ Status VersionSet::LogAndApply(ColumnFamilyData* column_family_data,
|
|||||||
TEST_SYNC_POINT("VersionSet::LogAndApply:WriteManifest");
|
TEST_SYNC_POINT("VersionSet::LogAndApply:WriteManifest");
|
||||||
if (!w.edit_list.front()->IsColumnFamilyManipulation() &&
|
if (!w.edit_list.front()->IsColumnFamilyManipulation() &&
|
||||||
this->GetColumnFamilySet()->get_table_cache()->GetCapacity() ==
|
this->GetColumnFamilySet()->get_table_cache()->GetCapacity() ==
|
||||||
0x400000) {
|
TableCache::kInfiniteCapacity) {
|
||||||
// unlimited table cache. Pre-load table handle now.
|
// unlimited table cache. Pre-load table handle now.
|
||||||
// Need to do it out of the mutex.
|
// Need to do it out of the mutex.
|
||||||
builder_guard->version_builder()->LoadTableHandlers(
|
builder_guard->version_builder()->LoadTableHandlers(
|
||||||
@ -2830,7 +2830,8 @@ Status VersionSet::Recover(
|
|||||||
assert(builders_iter != builders.end());
|
assert(builders_iter != builders.end());
|
||||||
auto* builder = builders_iter->second->version_builder();
|
auto* builder = builders_iter->second->version_builder();
|
||||||
|
|
||||||
if (GetColumnFamilySet()->get_table_cache()->GetCapacity() == 0x400000) {
|
if (GetColumnFamilySet()->get_table_cache()->GetCapacity() ==
|
||||||
|
TableCache::kInfiniteCapacity) {
|
||||||
// unlimited table cache. Pre-load table handle now.
|
// unlimited table cache. Pre-load table handle now.
|
||||||
// Need to do it out of the mutex.
|
// Need to do it out of the mutex.
|
||||||
builder->LoadTableHandlers(
|
builder->LoadTableHandlers(
|
||||||
|
Loading…
Reference in New Issue
Block a user