Bug #64450
closedrgw: bucket listing failed to make forward progress w/ versioned objects
0%
Description
When listing the objects in a bucket while ordered (RGWRados::Bucket::List::list_objects_ordered), there is a marker comparison in order to determine if progress is being made. For a versioned object with a large amount of versions, this marker comparison could be incorrect. The comparison looks at object name (which will be the same for versioned object), and then the instance version from a lexicographical order, which is how the underlying OMAP is ordered. However, the index key structure is `<obj name>\0[v<ver>\0i<instance id>]` so the different versions are ordered by <ver> rather than instance id in the OMAP. In the following example: prev_marker = file1[\0]1[\0]i*cde*, cur_marker = file1[\0]2[\0]i*abc*, the marker comparison would fail even though we made forward progress. Due to how this behavior affects the listing logic, some objects end up being omitted during bucket listing.