summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-08-27 15:01:02 -0700
committerSage Weil <sage@inktank.com>2013-08-30 16:57:25 -0700
commit4f6c6b2d747860b1424e71fec59f781750c99553 (patch)
tree9f35f35cf3b44423b4858f0a3933e347a3667a5d
parentb0a30a55eba6d646a04591fc038d2b1fce86f936 (diff)
downloadceph-4f6c6b2d747860b1424e71fec59f781750c99553.tar.gz
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 <sage@inktank.com>
-rw-r--r--src/osd/ReplicatedPG.cc20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc
index ccef49a81b9..0eee7b314e2 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<hobject_t,list<OpRequestRef> >::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