]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix setting of namespace in ordered and unordered bucket listing 37798/head
authorJ. Eric Ivancich <ivancich@redhat.com>
Tue, 6 Oct 2020 16:42:22 +0000 (12:42 -0400)
committerNathan Cutler <ncutler@suse.com>
Mon, 26 Oct 2020 17:44:45 +0000 (18:44 +0100)
The namespace is not always set correctly during bucket listing. This
can, for example, cause the listing of incomplete multipart uploads,
which are in the _multipart_ namespace, to not paginate correctly, and
cause entries to be re-listed.

Signed-off-by: J. Eric Ivancich <ivancich@redhat.com>
(cherry picked from commit bd6f163f366753e8ec42b85a53334f4bf78916bd)

src/rgw/rgw_rados.cc

index 48b586608b09dae909cf145cd4808b87afade905..64697e111c29ea1232a97e8e86b4c10c8772e8a3 100644 (file)
@@ -2440,13 +2440,13 @@ int RGWRados::Bucket::List::list_objects_ordered(
   // or it will be empty; either way it's OK to copy
   rgw_obj_key marker_obj(params.marker.name,
                         params.marker.instance,
-                        params.marker.ns);
+                        params.ns.empty() ? params.marker.ns : params.ns);
   rgw_obj_index_key cur_marker;
   marker_obj.get_index_key(&cur_marker);
 
   rgw_obj_key end_marker_obj(params.end_marker.name,
                             params.end_marker.instance,
-                            params.end_marker.ns);
+                            params.ns.empty() ? params.end_marker.ns : params.ns);
   rgw_obj_index_key cur_end_marker;
   end_marker_obj.get_index_key(&cur_end_marker);
   const bool cur_end_marker_valid = !params.end_marker.empty();
@@ -2671,13 +2671,13 @@ int RGWRados::Bucket::List::list_objects_unordered(int64_t max_p,
   // or it will be empty; either way it's OK to copy
   rgw_obj_key marker_obj(params.marker.name,
                         params.marker.instance,
-                        params.marker.ns);
+                        params.ns.empty() ? params.marker.ns : params.ns);
   rgw_obj_index_key cur_marker;
   marker_obj.get_index_key(&cur_marker);
 
   rgw_obj_key end_marker_obj(params.end_marker.name,
                             params.end_marker.instance,
-                            params.end_marker.ns);
+                            params.ns.empty() ? params.end_marker.ns : params.ns);
   rgw_obj_index_key cur_end_marker;
   end_marker_obj.get_index_key(&cur_end_marker);
   const bool cur_end_marker_valid = !params.end_marker.empty();