Project

General

Profile

Actions

Bug #63654

closed

[diff-iterate] ObjectListSnapsRequest's LIST_SNAPS_FLAG_WHOLE_OBJECT behavior is broken

Added by Ilya Dryomov 6 months ago. Updated 3 months ago.

Status:
Resolved
Priority:
Normal
Assignee:
Target version:
-
% Done:

0%

Source:
Tags:
backport_processed
Backport:
pacific,quincy,reef
Regression:
Yes
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Pull request ID:
Crash signature (v1):
Crash signature (v2):

Description

Since pacific, LIST_SNAPS_FLAG_WHOLE_OBJECT flag is treated the same as read_whole_object case. This causes bogus holes to be reported when the object is smaller than max object size, plus a few semantic inconsistencies in other places.

On an image without fast-diff feature:

$ rbd create -s 1G --image-shared foo
$ sudo rbd device map foo
/dev/rbd0
$ sudo xfs_io -d -c 'pwrite -b 16k 0 16k' /dev/rbd0
$ sudo rbd device unmap /dev/rbd0
$ rbd snap create foo@snap1
Creating snap: 100% complete...done.
$ rbd snap create foo@snap2
Creating snap: 100% complete...done.
Running a diff from snap1 to HEAD -- no diff is expected, but --whole-object deviates:
$ rbd diff --from-snap snap1 foo
$ rbd diff --from-snap snap1 --whole-object foo
Offset  Length   Type
16384   4177920  zero

Related issues 5 (1 open4 closed)

Related to rbd - Bug #63719: [test] scribble()-based DiffIterate tests are too weakNew

Actions
Blocks rbd - Bug #53897: diff-iterate can report holes when diffing against the beginning of time (fromsnapname == NULL)ResolvedIlya Dryomov

Actions
Copied to rbd - Backport #63736: pacific: [diff-iterate] ObjectListSnapsRequest's LIST_SNAPS_FLAG_WHOLE_OBJECT behavior is brokenResolvedIlya DryomovActions
Copied to rbd - Backport #63737: quincy: [diff-iterate] ObjectListSnapsRequest's LIST_SNAPS_FLAG_WHOLE_OBJECT behavior is brokenResolvedIlya DryomovActions
Copied to rbd - Backport #63738: reef: [diff-iterate] ObjectListSnapsRequest's LIST_SNAPS_FLAG_WHOLE_OBJECT behavior is brokenResolvedIlya DryomovActions
Actions #1

Updated by Ilya Dryomov 6 months ago

  • Blocks Bug #53897: diff-iterate can report holes when diffing against the beginning of time (fromsnapname == NULL) added
Actions #2

Updated by Ilya Dryomov 6 months ago

And there is an additional regression, also introduced in pacific, in the same if statement! In read_whole_object case, exists is no longer set to true, so the whole thing doesn't work at all. Fortunately, an empty snapset which triggers this "force a read at max object size" code path is really an edge case.

Actions #3

Updated by Ilya Dryomov 6 months ago

  • Description updated (diff)
Actions #4

Updated by Ilya Dryomov 6 months ago

  • Related to Bug #63719: [test] scribble()-based DiffIterate tests are too weak added
Actions #5

Updated by Ilya Dryomov 6 months ago

  • Status changed from In Progress to Fix Under Review
  • Pull request ID set to 54755
Actions #6

Updated by Ilya Dryomov 5 months ago

  • Status changed from Fix Under Review to Pending Backport
Actions #7

Updated by Backport Bot 5 months ago

  • Copied to Backport #63736: pacific: [diff-iterate] ObjectListSnapsRequest's LIST_SNAPS_FLAG_WHOLE_OBJECT behavior is broken added
Actions #8

Updated by Backport Bot 5 months ago

  • Copied to Backport #63737: quincy: [diff-iterate] ObjectListSnapsRequest's LIST_SNAPS_FLAG_WHOLE_OBJECT behavior is broken added
Actions #9

Updated by Backport Bot 5 months ago

  • Copied to Backport #63738: reef: [diff-iterate] ObjectListSnapsRequest's LIST_SNAPS_FLAG_WHOLE_OBJECT behavior is broken added
Actions #10

Updated by Backport Bot 5 months ago

  • Tags set to backport_processed
Actions #11

Updated by Ilya Dryomov 5 months ago

  • Description updated (diff)
Actions #12

Updated by Backport Bot 3 months ago

  • Status changed from Pending Backport to Resolved

While running with --resolve-parent, the script "backport-create-issue" noticed that all backports of this issue are in status "Resolved" or "Rejected".

Actions

Also available in: Atom PDF