index_key->append(entry.key.instance);
}
+// Format an omap key for an object name that sorts after all versioned keys
+// generated by get_list_index_key().
+static std::string cls_rgw_after_versions(const std::string& key)
+{
+ // assert: ! key.empty()
+ return key + '\1'; // suffix "\1" sorts after suffixes like "\0v123\0iabc"
+}
+
static void encode_obj_versioned_data_key(const cls_rgw_obj_key& key, string *index_key, bool append_delete_marker_suffix = false)
{
*index_key = BI_PREFIX_CHAR;
(!entry.is_visible() || op.start_obj.name == key.name)) {
CLS_LOG(20, "%s: entry %s[%s] is not visible",
__func__, key.name.c_str(), key.instance.c_str());
+
+ // advance past any versioned entries for this name
+ start_after_omap_key = cls_rgw_after_versions(key.name);
+ start_after_entry_key.set(start_after_omap_key);
+
+ kiter = keys.lower_bound(start_after_omap_key);
+ --kiter;
continue;
}