]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kv/LevelDBStore: simpler code for single-key fetches
authorPiotr Dałek <piotr.dalek@ts.fujitsu.com>
Fri, 23 Oct 2015 13:22:52 +0000 (15:22 +0200)
committerSage Weil <sage@redhat.com>
Mon, 9 Nov 2015 14:03:22 +0000 (09:03 -0500)
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 <piotr.dalek@ts.fujitsu.com>
src/kv/LevelDBStore.cc
src/kv/LevelDBStore.h

index 829f247d5287f6c2419d2a3f9d89b7747bc35098..90fd8ed36a4ca7c71fe6fa02475671e4ef889e82 100644 (file)
@@ -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;
index f450046d38d764b54d5f805fab5147df27d85997..c2696011bed1f0f28d7d28e52586597411b9956f 100644 (file)
@@ -205,6 +205,10 @@ public:
     std::map<string, bufferlist> *out
     );
 
+  int get(const string &prefix, 
+    const string &key,   
+    bufferlist *value);
+      
   class LevelDBWholeSpaceIteratorImpl :
     public KeyValueDB::WholeSpaceIteratorImpl {
   protected: