]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/rgw/rgw_multi.cc
import ceph 16.2.7
[ceph.git] / ceph / src / rgw / rgw_multi.cc
index 10bc6559f75d1256ff414559d5e52543734a949c..f035d1bc21477c825726b7a510903318a310d561 100644 (file)
@@ -288,17 +288,20 @@ int abort_multipart_upload(const DoutPrefixProvider *dpp,
   return (ret == -ENOENT) ? -ERR_NO_SUCH_UPLOAD : ret;
 }
 
-int list_bucket_multiparts(const DoutPrefixProvider *dpp, 
-                           rgw::sal::RGWRadosStore *store, RGWBucketInfo& bucket_info,
-                          const string& prefix, const string& marker,
-                          const string& delim,
+int list_bucket_multiparts(const DoutPrefixProvider* dpp,
+                          rgw::sal::RGWRadosStore* store,
+                          RGWBucketInfo& bucket_info,
+                          const std::string& prefix,
+                          std::string& marker, // in/out
+                          const std::string& delim,
                           const int& max_uploads,
-                          vector<rgw_bucket_dir_entry> *objs,
-                          map<string, bool> *common_prefixes, bool *is_truncated)
+                          std::vector<rgw_bucket_dir_entry>* objs,
+                          std::map<std::string, bool>* common_prefixes,
+                          bool* is_truncated)
 {
   RGWRados::Bucket target(store->getRados(), bucket_info);
   RGWRados::Bucket::List list_op(&target);
-  MultipartMetaFilter mp_filter;
+  MultipartMetaFilter mp_filter; // filter out all but ".meta" entries
 
   list_op.params.prefix = prefix;
   list_op.params.delim = delim;
@@ -306,12 +309,17 @@ int list_bucket_multiparts(const DoutPrefixProvider *dpp,
   list_op.params.ns = RGW_OBJ_NS_MULTIPART;
   list_op.params.filter = &mp_filter;
 
-  return(list_op.list_objects(dpp, max_uploads, objs, common_prefixes, is_truncated, null_yield));
+  int ret = list_op.list_objects(dpp, max_uploads, objs, common_prefixes, is_truncated, null_yield);
+  if (ret >= 0) {
+    marker = list_op.params.marker.name;
+  }
+  return ret;
 }
 
-int abort_bucket_multiparts(const DoutPrefixProvider *dpp, 
-                            rgw::sal::RGWRadosStore *store, CephContext *cct, 
-                            RGWBucketInfo& bucket_info, string& prefix, string& delim)
+int abort_bucket_multiparts(const DoutPrefixProvider* dpp,
+                           rgw::sal::RGWRadosStore* store,
+                           CephContext* cct,
+                           RGWBucketInfo& bucket_info)
 {
   constexpr int max = 1000;
   int ret, num_deleted = 0;
@@ -320,14 +328,16 @@ int abort_bucket_multiparts(const DoutPrefixProvider *dpp,
   string marker;
   bool is_truncated;
 
+  const std::string empty_delim;
+  const std::string empty_prefix;
+
   do {
-    ret = list_bucket_multiparts(dpp, store, bucket_info, prefix, marker, delim,
+    ret = list_bucket_multiparts(dpp, store, bucket_info, empty_prefix, marker, empty_delim,
                                 max, &objs, nullptr, &is_truncated);
     if (ret < 0) {
       ldpp_dout(dpp, 0) << __func__ <<
        " ERROR : calling list_bucket_multiparts; ret=" << ret <<
-       "; bucket=\"" << bucket_info.bucket << "\"; prefix=\"" <<
-       prefix << "\"; delim=\"" << delim << "\"" << dendl;
+       "; bucket=\"" << bucket_info.bucket << "\"" << dendl;
       return ret;
     }
     ldpp_dout(dpp, 20) << __func__ <<