]> git.apps.os.sepia.ceph.com Git - ceph.git/commit
PG: explicitely delay ops on backfill_pos
authorSamuel Just <sam.just@inktank.com>
Mon, 24 Sep 2012 21:33:17 +0000 (14:33 -0700)
committerSage Weil <sage@inktank.com>
Thu, 27 Sep 2012 20:21:53 +0000 (13:21 -0700)
commit3f952afe5da644b30015fead8e3d42a129b59989
treedaf38a61736be7673e610d7517354f426c66888d
parenta351f7a1f43e518b4bba98ecbc05b5d8153fae4d
PG: explicitely delay ops on backfill_pos

Previously, we considered backfill_pos degraded in order to delay
ops since a write to backfill_pos could generate a snap before
backfill_pos, and we assume that (0, backfill_pos) is fully
backfilled.  This is a problem since it's possible that
backfill_pos is a valid object, but not one that currently exists.
For example, it might have been deleted since last_backfill was
last changed.  Instead, we will explicitly delay ops on
backfill_pos in waiting_for_backfill_pos.

This error resulted in #2691 since wait_for_degraded_object also
attempts to recover the object. At this point, the primary would
attempt to recover the object, find that it isn't there, and put
it in the missing set with need=0,0.  Eventually, recover_primary
attempts to recover that object, finds that it has been deleted
in the log, and asserts.

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/PG.h
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h