]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commit
librbd: OBJECT_PENDING should always be treated as dirty
authorIlya Dryomov <idryomov@gmail.com>
Fri, 8 Dec 2023 14:19:02 +0000 (15:19 +0100)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 11 Dec 2023 16:45:57 +0000 (17:45 +0100)
commit70c1991f225c137abf769111086b6c61abc0ece3
treeca8ad11121d3f6cc099b3f156999d907c64fb6d1
parent6b45a2d920aad2edf17544807f7032e2b11efef3
librbd: OBJECT_PENDING should always be treated as dirty

OBJECT_PENDING is a transition state which normally isn't encountered
in (snapshot) object maps.  In case it's encountered, for example when
a snapshot is taken after losing power at the time a discard was being
handled, the object should be treated as dirty and produce a diff as
a result.

Assuming an object is marked OBJECT_PENDING, theoretically there are
four cases with respect to object's state in the next snapshot:

    1. OBJECT_NONEXISTENT
    2. OBJECT_EXISTS
    3. OBJECT_PENDING
    4. OBJECT_EXISTS_CLEAN

Prior to commit b81cd2460de7 ("librbd/object_map: diff state machine
should track object existence"), (3) was handled incorrectly (diff set
to DIFF_STATE_NONE instead of DIFF_STATE_UPDATED).

Post commit 399a45e11332 ("librbd/object_map: rbd diff between two
snapshots lists entire image content"), (4) is handled incorrectly
(diff set to DIFF_STATE_DATA instead of DIFF_STATE_DATA_UPDATED).

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
src/librbd/object_map/DiffRequest.cc