From: Samuel Just Date: Mon, 17 Aug 2015 18:21:27 +0000 (-0700) Subject: ReplicatedPG: treat object as degraded until on_global_recover X-Git-Tag: v9.1.0~345^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=79f310ac4d3d2c520e7665be057f2143113537a9;p=ceph.git ReplicatedPG: treat object as degraded until on_global_recover Otherwise, an op might slip by between on_local_recover and on_global_recover. Signed-off-by: Samuel Just --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 48f4277dbda1..98078f85d1f0 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -413,6 +413,12 @@ void ReplicatedPG::wait_for_all_missing(OpRequestRef op) bool ReplicatedPG::is_degraded_or_backfilling_object(const hobject_t& soid) { + /* The conditions below may clear (on_local_recover, before we queue + * the tranasction) before we actually requeue the degraded waiters + * in on_global_recover after the transaction completes. + */ + if (waiting_for_degraded_object.count(soid)) + return true; if (pg_log.get_missing().missing.count(soid)) return true; assert(!actingbackfill.empty());