diff options
author | Sage Weil <sage@inktank.com> | 2012-08-16 02:19:22 +0200 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2012-08-16 22:15:11 +0200 |
commit | da210bee091705fc488cc7c839c32d46280c1719 (patch) | |
tree | 6a3a8f562d8b21d30d8cf228e95ed1e07b62afc6 /src | |
parent | osd: simplify how in-progress ops are requeued (diff) | |
download | ceph-da210bee091705fc488cc7c839c32d46280c1719.tar.xz ceph-da210bee091705fc488cc7c839c32d46280c1719.zip |
osd: explicitly requeue waiting_for_map in on_change()
Since we are requeuing stuff anyway, do it all in the correct order. This
fixes a bug where take_waiters() comes along later (at activate_map time)
and puts waiting_for_map events at the front of the queue, in front of
e.g. waiting_for_missing. This breaks ordering from the client's
perspective.
The convention should be: whenever you requeue, requeuing everything
that logically follows it first.
Fixes: #2947
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Samuel Just <sam.just@inktank.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/osd/ReplicatedPG.cc | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 3e1b0dfbd0e..3396511d374 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -5772,6 +5772,10 @@ void ReplicatedPG::on_change() { dout(10) << "on_change" << dendl; + // requeue everything in the reverse order they should be + // reexamined. + requeue_ops(waiting_for_map); + clear_scrub_reserved(); scrub_clear_state(); |