]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/osd: disable extra iterator validation
authorPiotr Dałek <piotr.dalek@ts.fujitsu.com>
Thu, 29 Oct 2015 14:16:29 +0000 (15:16 +0100)
committerSage Weil <sage@redhat.com>
Mon, 9 Nov 2015 14:03:23 +0000 (09:03 -0500)
In a number of loops using ObjectMapIterator, the iterator is validated
twice, first as an loop break condition, then during iter->next() call.
Suppress the validation in next() method in those cases for better
performance.

Signed-off-by: Piotr Dałek <piotr.dalek@ts.fujitsu.com>
src/os/KeyValueStore.cc
src/osd/PGLog.cc
src/osd/ReplicatedBackend.cc
src/osd/ReplicatedPG.cc

index 1a633c6af777aa2bf13d235a25e1717eadb8aa01..4d3a95844ddaa7231c49a00b50801f28278bc25b 100644 (file)
@@ -2729,7 +2729,7 @@ int KeyValueStore::_omap_rmkeyrange(coll_t cid, const ghobject_t &hoid,
       return -ENOENT;
 
     for (iter->lower_bound(first); iter->valid() && iter->key() < last;
-         iter->next()) {
+         iter->next(false)) {
       keys.insert(iter->key());
     }
   }
index 86dbd3a849649a1c42bcbe86bf2fe27085b81721..72520a771b688125db7180ebf35d67728c9a6be9 100644 (file)
@@ -887,7 +887,7 @@ void PGLog::read_log(ObjectStore *store, coll_t pg_coll,
   log.rollback_info_trimmed_to = eversion_t();
   ObjectMap::ObjectMapIterator p = store->get_omap_iterator(log_coll, log_oid);
   if (p) {
-    for (p->seek_to_first(); p->valid() ; p->next()) {
+    for (p->seek_to_first(); p->valid() ; p->next(false)) {
       // non-log pgmeta_oid keys are prefixed with _; skip those
       if (p->key()[0] == '_')
        continue;
index 9e7c44238186bbc18916509820651e60161bbdbb..d7109ef42f8ade69c6ebae2fa1923615763e94eb 100644 (file)
@@ -813,7 +813,7 @@ void ReplicatedBackend::be_deep_scrub(
       poid, ghobject_t::NO_GEN, get_parent()->whoami_shard().shard));
   assert(iter);
   uint64_t keys_scanned = 0;
-  for (iter->seek_to_first(); iter->valid() ; iter->next()) {
+  for (iter->seek_to_first(); iter->valid() ; iter->next(false)) {
     if (cct->_conf->osd_scan_list_ping_tp_interval &&
        (keys_scanned % cct->_conf->osd_scan_list_ping_tp_interval == 0)) {
       handle.reset_tp_timeout();
@@ -2034,7 +2034,7 @@ int ReplicatedBackend::build_push_op(const ObjectRecoveryInfo &recovery_info,
                               ghobject_t(recovery_info.soid));
     for (iter->lower_bound(progress.omap_recovered_to);
         iter->valid();
-        iter->next()) {
+        iter->next(false)) {
       if (!out_op->omap_entries.empty() &&
          available <= (iter->key().size() + iter->value().length()))
        break;
index 1464d694ec93eb4e0216973809d0f0383d88c103..38372cf43980895229733038869e6b0cdb8150a9 100644 (file)
@@ -5287,7 +5287,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
          iter->upper_bound(start_after);
          for (uint64_t i = 0;
               i < max_return && iter->valid();
-              ++i, iter->next()) {
+              ++i, iter->next(false)) {
            out_set.insert(iter->key());
          }
        } // else return empty out_set
@@ -5329,7 +5329,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
          for (uint64_t i = 0;
               i < max_return && iter->valid() &&
                 iter->key().substr(0, filter_prefix.size()) == filter_prefix;
-              ++i, iter->next()) {
+              ++i, iter->next(false)) {
            dout(20) << "Found key " << iter->key() << dendl;
            out_set.insert(make_pair(iter->key(), iter->value()));
          }
@@ -6728,7 +6728,7 @@ int ReplicatedPG::fill_in_copy_get(
        osd->store->get_omap_iterator(coll, ghobject_t(oi.soid));
       assert(iter);
       iter->upper_bound(cursor.omap_offset);
-      for (; iter->valid(); iter->next()) {
+      for (; iter->valid(); iter->next(false)) {
        ++omap_keys;
        ::encode(iter->key(), omap_data);
        ::encode(iter->value(), omap_data);