From: Igor Fedotov Date: Wed, 1 Feb 2023 20:53:41 +0000 (+0300) Subject: kv/RocksDBStore: avoid redundant prefix lookup. X-Git-Tag: v19.0.0~1575^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=deb2f9703b1e10dc90d978506c241e912c36f5e9;p=ceph.git kv/RocksDBStore: avoid redundant prefix lookup. Signed-off-by: Igor Fedotov --- diff --git a/src/kv/RocksDBStore.cc b/src/kv/RocksDBStore.cc index a3ecf3a5a1f..bd716d2093f 100644 --- a/src/kv/RocksDBStore.cc +++ b/src/kv/RocksDBStore.cc @@ -667,11 +667,10 @@ rocksdb::ColumnFamilyHandle *RocksDBStore::get_cf_handle(const std::string& pref * CF handle. In all other cases, we return a nullptr to indicate that the specified bounds cannot necessarily be mapped * to a single CF. */ -rocksdb::ColumnFamilyHandle *RocksDBStore::get_cf_handle(const std::string& prefix, const IteratorBounds& bounds) { +rocksdb::ColumnFamilyHandle *RocksDBStore::check_cf_handle_bounds(const cf_handles_iterator& iter, const IteratorBounds& bounds) { if (!bounds.lower_bound || !bounds.upper_bound) { return nullptr; } - auto iter = cf_handles.find(prefix); ceph_assert(iter != cf_handles.end()); ceph_assert(iter->second.handles.size() != 1); if (iter->second.hash_l != 0) { @@ -2996,7 +2995,7 @@ KeyValueDB::Iterator RocksDBStore::get_iterator(const std::string& prefix, Itera if (cf_it->second.handles.size() == 1) { cf = cf_it->second.handles[0]; } else if (cct->_conf->osd_rocksdb_iterator_bounds_enabled) { - cf = get_cf_handle(prefix, bounds); + cf = check_cf_handle_bounds(cf_it, bounds); } if (cf) { return std::make_shared( diff --git a/src/kv/RocksDBStore.h b/src/kv/RocksDBStore.h index 25a2045ffaf..629d6ef995e 100644 --- a/src/kv/RocksDBStore.h +++ b/src/kv/RocksDBStore.h @@ -122,6 +122,7 @@ private: std::vector handles; }; std::unordered_map cf_handles; + typedef decltype(cf_handles)::iterator cf_handles_iterator; std::unordered_map cf_ids_to_prefix; std::unordered_map cf_bbt_opts; @@ -132,7 +133,7 @@ private: rocksdb::ColumnFamilyHandle *get_key_cf(const prefix_shards& shards, const char* key, const size_t keylen); rocksdb::ColumnFamilyHandle *get_cf_handle(const std::string& prefix, const std::string& key); rocksdb::ColumnFamilyHandle *get_cf_handle(const std::string& prefix, const char* key, size_t keylen); - rocksdb::ColumnFamilyHandle *get_cf_handle(const std::string& prefix, const IteratorBounds& bounds); + rocksdb::ColumnFamilyHandle *check_cf_handle_bounds(const cf_handles_iterator& it, const IteratorBounds& bounds); int submit_common(rocksdb::WriteOptions& woptions, KeyValueDB::Transaction t); int install_cf_mergeop(const std::string &cf_name, rocksdb::ColumnFamilyOptions *cf_opt);