From: Piotr Dałek Date: Fri, 23 Oct 2015 13:22:52 +0000 (+0200) Subject: kv/LevelDBStore: simpler code for single-key fetches X-Git-Tag: v10.0.1~116^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=76eb04aeef0cfee3bec38f9fb9109e4297518c38;p=ceph.git kv/LevelDBStore: simpler code for single-key fetches Often there's a need to fetch value for a specified, single key. Publish a new method in LevelDB that takes key and prefix and puts just value at specified address, without the need for interim keysets or resultsets. Signed-off-by: Piotr Dałek --- diff --git a/src/kv/LevelDBStore.cc b/src/kv/LevelDBStore.cc index 829f247d5287..90fd8ed36a4c 100644 --- a/src/kv/LevelDBStore.cc +++ b/src/kv/LevelDBStore.cc @@ -229,6 +229,25 @@ int LevelDBStore::get( return 0; } +int LevelDBStore::get(const string &prefix, + const string &key, + bufferlist *value) +{ + utime_t start = ceph_clock_now(g_ceph_context); + int r = 0; + KeyValueDB::Iterator it = get_iterator(prefix); + it->lower_bound(key); + if (it->valid() && it->key() == key) { + *value = it->value(); + } else { + r = -ENOENT; + } + utime_t lat = ceph_clock_now(g_ceph_context) - start; + logger->inc(l_leveldb_gets); + logger->tinc(l_leveldb_get_latency, lat); + return r; +} + string LevelDBStore::combine_strings(const string &prefix, const string &value) { string out = prefix; diff --git a/src/kv/LevelDBStore.h b/src/kv/LevelDBStore.h index f450046d38d7..c2696011bed1 100644 --- a/src/kv/LevelDBStore.h +++ b/src/kv/LevelDBStore.h @@ -205,6 +205,10 @@ public: std::map *out ); + int get(const string &prefix, + const string &key, + bufferlist *value); + class LevelDBWholeSpaceIteratorImpl : public KeyValueDB::WholeSpaceIteratorImpl { protected: