8000 issue #9654: make `--rocksdb.max-write-buffer-number` work · arangodb/arangodb@f28d179 · GitHub
[go: up one dir, main page]

Skip to content

Commit f28d179

Browse files
committed
issue #9654: make --rocksdb.max-write-buffer-number work
1 parent a608e38 commit f28d179

File tree

4 files changed

+23
-6
lines changed

4 files changed

+23
-6
lines changed

CHANGELOG

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
v3.5.1 (XXXX-XX-XX)
22
-------------------
33

4+
* Fixed issue #9654: honor value of `--rocksdb.max-write-buffer-number` if it
5+
is set to at least 9 (which is the recommended value). Ignore it if it is
6+
set to a lower value than 9, and warn the end user about it.
7+
8+
Previous versions of ArangoDB always silently ignored the value of this setting
9+
and effectively hard-coded the value to 9.
10+
411
* Fixed cut'n'pasting code from the documentation into arangosh.
512

613
* Fixed issue #9652: fix ArangoSearch wrong name collision and raising

arangod/RocksDBEngine/RocksDBEngine.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -561,9 +561,17 @@ void RocksDBEngine::start() {
561561
_options.db_write_buffer_size = opts->_totalWriteBufferSize;
562562
}
563563

564-
// this is cfFamilies.size() + 2 ... but _option needs to be set before
565-
// building cfFamilies
566-
_options.max_write_buffer_number = 7 + 2;
564+
if (!application_features::ApplicationServer::server->options()->processingResult().touched("rocksdb.max-write-buffer-number")) {
565+
// user hasn't explicitly set the number of write buffers, so we use a default value based
566+
// on the number of column families
567+
// this is cfFamilies.size() + 2 ... but _option needs to be set before
568+
// building cfFamilies
569+
// Update max_write_buffer_number above if you change number of families used
570+
_options.max_write_buffer_number = 7 + 2;
571+
} else if (_options.max_write_buffer_number < 7 + 2) {
572+
// use set the value explicitly, and it is lower than recommended
573+
LOG_TOPIC("d5c49", WARN, Logger::ENGINES) << "ignoring value for option `--rocksdb.max-write-buffer-number` because it is lower than recommended";
574+
}
567575

568576
// cf options for definitons (dbs, collections, views, ...)
569577
rocksdb::ColumnFamilyOptions definitionsCF(_options);
@@ -601,8 +609,9 @@ void RocksDBEngine::start() {
601609
cfFamilies.emplace_back("VPackIndex", vpackFixedPrefCF); // 4
602610
cfFamilies.emplace_back("GeoIndex", fixedPrefCF); // 5
603611
cfFamilies.emplace_back("FulltextIndex", fixedPrefCF); // 6
604-
// DO NOT FORGET TO DESTROY THE CFs ON CLOSE
605-
// Update max_write_buffer_number above if you change number of families used
612+
613+
TRI_ASSERT(static_cast<int>(_options.max_write_buffer_number) >= static_cast<int>(cfFamilies.size()));
614+
// Update max_write_buffer_number above if you change number of families used
606615

607616
std::vector<rocksdb::ColumnFamilyHandle*> cfHandles;
608617
size_t const numberOfColumnFamilies = RocksDBColumnFamily::minNumberOfColumnFamilies;

lib/ApplicationFeatures/RocksDBOptionFeature.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ RocksDBOptionFeature::RocksDBOptionFeature(application_features::ApplicationServ
4646
_transactionLockTimeout(rocksDBTrxDefaults.transaction_lock_timeout),
4747
_totalWriteBufferSize(rocksDBDefaults.db_write_buffer_size),
4848
_writeBufferSize(rocksDBDefaults.write_buffer_size),
49-
_maxWriteBufferNumber(rocksDBDefaults.max_write_buffer_number),
49+
_maxWriteBufferNumber(7 + 2), // number of column families plus 2
5050
_maxTotalWalSize(80 << 20),
5151
_delayedWriteRate(rocksDBDefaults.delayed_write_rate),
5252
_minWriteBufferNumberToMerge(rocksDBDefaults.min_write_buffer_number_to_merge),

lib/ApplicationFeatures/RocksDBOptionFeature.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class RocksDBOptionFeature final : public application_features::ApplicationFeatu
4949
std::string _walDirectory;
5050
uint64_t _totalWriteBufferSize;
5151
uint64_t _writeBufferSize;
52+
// Update max_write_buffer_number above if you change number of families used
5253
uint64_t _maxWriteBufferNumber;
5354
uint64_t _maxTotalWalSize;
5455
uint64_t _delayedWriteRate;

0 commit comments

Comments
 (0)
0