From: Igor Fedotov Date: Fri, 17 Nov 2017 09:08:52 +0000 (-0800) Subject: osd: make operations on ReplicatedBackend::in_progress_ops a bit more effective. X-Git-Tag: v13.0.1~122^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=de65557c6f406f4396c16a490d92d4ae71a8a9c4;p=ceph.git osd: make operations on ReplicatedBackend::in_progress_ops a bit more effective. Signed-off-by: Igor Fedotov --- diff --git a/src/osd/ReplicatedBackend.cc b/src/osd/ReplicatedBackend.cc index a0bdb0f22b31e..773b83728cb57 100644 --- a/src/osd/ReplicatedBackend.cc +++ b/src/osd/ReplicatedBackend.cc @@ -246,12 +246,13 @@ void ReplicatedBackend::on_change() dout(10) << __func__ << dendl; for (map::iterator i = in_progress_ops.begin(); i != in_progress_ops.end(); - in_progress_ops.erase(i++)) { + i++) { if (i->second.on_commit) delete i->second.on_commit; if (i->second.on_applied) delete i->second.on_applied; } + in_progress_ops.clear(); clear_recovery_state(); } @@ -480,15 +481,16 @@ void ReplicatedBackend::submit_transaction( assert(added.size() <= 1); assert(removed.size() <= 1); - assert(!in_progress_ops.count(tid)); - InProgressOp &op = in_progress_ops.insert( + auto insert_res = in_progress_ops.insert( make_pair( tid, InProgressOp( tid, on_all_commit, on_all_acked, orig_op, at_version) ) - ).first->second; + ); + assert(insert_res.second); + InProgressOp &op = insert_res.first->second; op.waiting_for_applied.insert( parent->get_actingbackfill_shards().begin(), @@ -595,9 +597,8 @@ void ReplicatedBackend::do_repop_reply(OpRequestRef op) ceph_tid_t rep_tid = r->get_tid(); pg_shard_t from = r->from; - if (in_progress_ops.count(rep_tid)) { - map::iterator iter = - in_progress_ops.find(rep_tid); + auto iter = in_progress_ops.find(rep_tid); + if (iter != in_progress_ops.end()) { InProgressOp &ip_op = iter->second; const MOSDOp *m = NULL; if (ip_op.op)