]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
LevelDBStore: use Get for multiget 9411/head
authorHaomai Wang <haomai@xsky.com>
Thu, 2 Jun 2016 14:59:30 +0000 (22:59 +0800)
committerHaomai Wang <haomai@xsky.com>
Sun, 19 Jun 2016 17:22:28 +0000 (01:22 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/kv/LevelDBStore.cc

index 9346992c700c7733e118ac3799a85ac46ca6e627..3c3b4993817c42692159c69d9e42c112332e0056 100644 (file)
@@ -247,15 +247,13 @@ int LevelDBStore::get(
     std::map<string, bufferlist> *out)
 {
   utime_t start = ceph_clock_now(g_ceph_context);
-  KeyValueDB::Iterator it = get_iterator(prefix);
   for (std::set<string>::const_iterator i = keys.begin();
-       i != keys.end();
-       ++i) {
-    it->lower_bound(*i);
-    if (it->valid() && it->key() == *i) {
-      out->insert(make_pair(*i, it->value()));
-    } else if (!it->valid())
-      break;
+       i != keys.end(); ++i) {
+    std::string value;
+    std::string bound = combine_strings(prefix, *i);
+    auto status = db->Get(leveldb::ReadOptions(), leveldb::Slice(bound), &value);
+    if (status.ok())
+      (*out)[*i].append(value);
   }
   utime_t lat = ceph_clock_now(g_ceph_context) - start;
   logger->inc(l_leveldb_gets);