From: Sage Weil Date: Tue, 27 Aug 2013 22:01:02 +0000 (-0700) Subject: osd/ReplicatedPG: do not requeue if not primary X-Git-Tag: v0.69~27^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F541%2Fhead;p=ceph.git osd/ReplicatedPG: do not requeue if not primary This saves us a bit of work, since we will discard the op anyway if we aren't primary (or even if we become primary again before we get to it). Signed-off-by: Sage Weil --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index ccef49a81b90..0eee7b314e2c 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -6785,17 +6785,27 @@ void ReplicatedPG::on_change(ObjectStore::Transaction *t) context_registry_on_change(); // requeue object waiters - requeue_ops(waiting_for_backfill_pos); - requeue_object_waiters(waiting_for_missing_object); + if (is_primary()) { + requeue_ops(waiting_for_backfill_pos); + requeue_object_waiters(waiting_for_missing_object); + } else { + waiting_for_backfill_pos.clear(); + waiting_for_missing_object.clear(); + } for (map >::iterator p = waiting_for_degraded_object.begin(); p != waiting_for_degraded_object.end(); waiting_for_degraded_object.erase(p++)) { - requeue_ops(p->second); + if (is_primary()) + requeue_ops(p->second); + else + p->second.clear(); finish_degraded_object(p->first); } - requeue_ops(waiting_for_all_missing); - waiting_for_all_missing.clear(); + if (is_primary()) + requeue_ops(waiting_for_all_missing); + else + waiting_for_all_missing.clear(); // this will requeue ops we were working on but didn't finish, and // any dups