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-27 15:42:45 -0700
commit7d44c08ee1c07a24182d31e0bc321dba0e76bacb (patch)
treecd2c493b3ccbebfee6f6aff822f85601462a2cf4
parent63f05222f530f08dfa0cd881e71918630ea1f1db (diff)
downloadceph-7d44c08ee1c07a24182d31e0bc321dba0e76bacb.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 a951c899493..238c2289de6 100644
--- a/src/osd/ReplicatedPG.cc
+++ b/src/osd/ReplicatedPG.cc
@@ -6798,17 +6798,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