From: Piotr Dałek Date: Thu, 29 Oct 2015 14:16:29 +0000 (+0100) Subject: os/osd: disable extra iterator validation X-Git-Tag: v10.0.1~116^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=057d39a10766eea2897ec199bc65b4878b166aaf;p=ceph.git os/osd: disable extra iterator validation 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 --- diff --git a/src/os/KeyValueStore.cc b/src/os/KeyValueStore.cc index 1a633c6af777..4d3a95844dda 100644 --- a/src/os/KeyValueStore.cc +++ b/src/os/KeyValueStore.cc @@ -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()); } } diff --git a/src/osd/PGLog.cc b/src/osd/PGLog.cc index 86dbd3a84964..72520a771b68 100644 --- a/src/osd/PGLog.cc +++ b/src/osd/PGLog.cc @@ -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; diff --git a/src/osd/ReplicatedBackend.cc b/src/osd/ReplicatedBackend.cc index 9e7c44238186..d7109ef42f8a 100644 --- a/src/osd/ReplicatedBackend.cc +++ b/src/osd/ReplicatedBackend.cc @@ -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; diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 1464d694ec93..38372cf43980 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -5287,7 +5287,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& 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& 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);