From fc06ea8ded8a8ba92a363226d017ed2c7a7a395b Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Mon, 27 Feb 2023 19:58:11 -0800 Subject: [PATCH] ircd::db::options::map: Add merge suite for adding to existing options. --- include/ircd/db/opts.h | 8 ++++- ircd/db.cc | 80 +++++++++++++++++++++++++++++------------- 2 files changed, 63 insertions(+), 25 deletions(-) diff --git a/include/ircd/db/opts.h b/include/ircd/db/opts.h index 702211fbe..4633e3729 100644 --- a/include/ircd/db/opts.h +++ b/include/ircd/db/opts.h @@ -110,6 +110,12 @@ struct ircd::db::options struct ircd::db::options::map :std::unordered_map { + // Merge output of options structures from map (map takes precedence). + rocksdb::DBOptions merge(const rocksdb::DBOptions &) const; + rocksdb::ColumnFamilyOptions merge(const rocksdb::ColumnFamilyOptions &) const; + rocksdb::PlainTableOptions merge(const rocksdb::PlainTableOptions &) const; + rocksdb::BlockBasedTableOptions merge(const rocksdb::BlockBasedTableOptions &) const; + // Output of options structures from map operator rocksdb::DBOptions() const; operator rocksdb::ColumnFamilyOptions() const; @@ -120,7 +126,7 @@ struct ircd::db::options::map map(const options &); // Input of options map from user - map(std::unordered_map m) + map(std::unordered_map m = {}) :std::unordered_map{std::move(m)} {} }; diff --git a/ircd/db.cc b/ircd/db.cc index a5f9c902b..18e7d87e2 100644 --- a/ircd/db.cc +++ b/ircd/db.cc @@ -3920,49 +3920,81 @@ ircd::db::options::map::map(const options &o) }; } -ircd::db::options::map::operator rocksdb::PlainTableOptions() -const -{ - rocksdb::PlainTableOptions ret; - throw_on_error - { - rocksdb::GetPlainTableOptionsFromMap(ret, *this, &ret) - }; - - return ret; -} - ircd::db::options::map::operator rocksdb::BlockBasedTableOptions() const { rocksdb::BlockBasedTableOptions ret; - throw_on_error - { - rocksdb::GetBlockBasedTableOptionsFromMap(ret, *this, &ret) - }; + return merge(ret); +} - return ret; +ircd::db::options::map::operator rocksdb::PlainTableOptions() +const +{ + rocksdb::PlainTableOptions ret; + return merge(ret); } ircd::db::options::map::operator rocksdb::ColumnFamilyOptions() const { rocksdb::ColumnFamilyOptions ret; - throw_on_error - { - rocksdb::GetColumnFamilyOptionsFromMap(ret, *this, &ret) - }; - - return ret; + return merge(ret); } ircd::db::options::map::operator rocksdb::DBOptions() const { rocksdb::DBOptions ret; + return merge(ret); +} + +rocksdb::BlockBasedTableOptions +ircd::db::options::map::merge(const rocksdb::BlockBasedTableOptions &opts) +const +{ + rocksdb::BlockBasedTableOptions ret; throw_on_error { - rocksdb::GetDBOptionsFromMap(ret, *this, &ret) + rocksdb::GetBlockBasedTableOptionsFromMap(opts, *this, &ret, true, true) + }; + + return ret; +} + +rocksdb::PlainTableOptions +ircd::db::options::map::merge(const rocksdb::PlainTableOptions &opts) +const +{ + rocksdb::PlainTableOptions ret; + throw_on_error + { + rocksdb::GetPlainTableOptionsFromMap(opts, *this, &ret, true, true) + }; + + return ret; +} + +rocksdb::ColumnFamilyOptions +ircd::db::options::map::merge(const rocksdb::ColumnFamilyOptions &opts) +const +{ + rocksdb::ColumnFamilyOptions ret; + throw_on_error + { + rocksdb::GetColumnFamilyOptionsFromMap(opts, *this, &ret, true, true) + }; + + return ret; +} + +rocksdb::DBOptions +ircd::db::options::map::merge(const rocksdb::DBOptions &opts) +const +{ + rocksdb::DBOptions ret; + throw_on_error + { + rocksdb::GetDBOptionsFromMap(opts, *this, &ret, true, true) }; return ret;