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

Skip to content

Commit 0f03655

Browse files
jsteemannKVS85
authored andcommitted
issue #9654: make --rocksdb.max-write-buffer-number work (#9751)
* issue #9654: make `--rocksdb.max-write-buffer-number` work * fix the logic
1 parent 87ae616 commit 0f03655

File tree

4 files changed

+24
-6
lines changed

4 files changed

+24
-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 internal issue #4378: fix bug in MoveShard::abort which causes a
512
duplicate entry in the follower list.
613

arangod/RocksDBEngine/RocksDBEngine.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -561,9 +561,18 @@ 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+
// user set the value explicitly, and it is lower than recommended
573+
_options.max_write_buffer_number = 7 + 2;
574+
LOG_TOPIC("d5c49", WARN, Logger::ENGINES) << "ignoring value for option `--rocksdb.max-write-buffer-number` because it is lower than recommended";
575+
}
567576

568577
// cf options for definitons (dbs, collections, views, ...)
569578
rocksdb::ColumnFamilyOptions definitionsCF(_options);
@@ -601,8 +610,9 @@ void RocksDBEngine::start() {
601610
cfFamilies.emplace_back("VPackIndex", vpackFixedPrefCF); // 4
602611
cfFamilies.emplace_back("GeoIndex", fixedPrefCF); // 5
603612
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
613+
614+
TRI_ASSERT(static_cast<int>(_options.max_write_buffer_number) >= static_cast<int>(cfFamilies.size()));
615+
// Update max_write_buffer_number above if you change number of families used
606616

607617
std::vector<rocksdb::ColumnFamilyHandle*> cfHandles;
608618
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