From 4f6c6b2d747860b1424e71fec59f781750c99553 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 27 Aug 2013 15:01:02 -0700 Subject: [PATCH] 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 --- src/osd/ReplicatedPG.cc | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) 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 -- 2.47.3