From: Samuel Just Date: Tue, 11 Sep 2012 18:05:40 +0000 (-0700) Subject: ReplicatedPG: do not start_recovery_op if we are already pushing X-Git-Tag: v0.52~28 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=4e5283d476fc3405f30c91f1447e6059a1b52c8c;p=ceph.git ReplicatedPG: do not start_recovery_op if we are already pushing Should fix bug #2761. If we are already pushing soid, recovery_ops will only be decremented once for all current pushes, so only increment recovery_ops if we are not currently pushing it. This bug causes us to leak a recovery op and get stuck in backfill. Signed-off-by: Samuel Just Reviewed-by: Sage Weil --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 3f37284e77068..10e6bc79baf3f 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -6438,7 +6438,8 @@ void ReplicatedPG::push_backfill_object(hobject_t oid, eversion_t v, eversion_t backfills_in_flight.insert(oid); - start_recovery_op(oid); + if (!pushing.count(oid)) + start_recovery_op(oid); ObjectContext *obc = get_object_context(oid, OLOC_BLANK, false); obc->ondisk_read_lock(); push_to_replica(obc, oid, peer);