]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
osd/PrimaryLogPG: cancel all objecter ops atomically 20609/head
authorSage Weil <sage@redhat.com>
Mon, 19 Feb 2018 14:54:58 +0000 (08:54 -0600)
committerPrashant D <pdhange@redhat.com>
Tue, 27 Feb 2018 06:04:14 +0000 (01:04 -0500)
commit458c1f22a4d215418122f63942782b8a9108fc41
tree8a6d35819e5a2b73201a564440eeb05e2cf3522b
parentb696021856cf31f9ab34998c7869b222c8461173
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
src/osd/PrimaryLogPG.cc
src/osd/PrimaryLogPG.h