osd/PrimaryLogPG: cancel all objecter ops atomically
We want to avoid a situation like this:
- start proxy op A (epoch E)
- start proxy op B (epoch E)
- start proxy op C (epoch E)
- objecter sends none of these because target is down in epoch E
- osdmap update to E+1
- pg cancels requeues A, B
- objecter updates to E+1
- objecter sends C
- pg cancels/requeues C
Note that the key thing is that operations on each object are canceled
atomically. On the interval change we do it all at once. In the other
cases, we cancel everything on the given object together.
Fixes: http://tracker.ceph.com/issues/22123
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit
93fd56ed039363c4f169259a0a560b968d1a0333)
Conflicts:
src/osd/PrimaryLogPG.cc: - Resolved in cancel_copy and added
cancel_and_requeue_proxy_ops.
- Define io_tids to FlushOp