]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: abstract partial data processing in RGWListBuckets.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Mon, 28 Aug 2017 19:53:28 +0000 (21:53 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Mon, 28 Aug 2017 19:59:04 +0000 (21:59 +0200)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/rgw/rgw_op.cc
src/rgw/rgw_op.h

index db00d2ea6276819e1faf015838927cda621a4aaa..26bd5cba3d7760b7948b83c0feaaef2c3379b3bb 100644 (file)
@@ -1807,7 +1807,7 @@ void RGWListBuckets::execute()
   bool started = false;
   uint64_t total_count = 0;
 
-  uint64_t max_buckets = s->cct->_conf->rgw_list_buckets_max_chunk;
+  const uint64_t max_buckets = s->cct->_conf->rgw_list_buckets_max_chunk;
 
   op_ret = get_params();
   if (op_ret < 0) {
@@ -1861,10 +1861,10 @@ void RGWListBuckets::execute()
     }
 
     if (!m.empty()) {
-      send_response_data(buckets);
-
       map<string, RGWBucketEnt>::reverse_iterator riter = m.rbegin();
       marker = riter->first;
+
+      handle_listing_chunk((buckets));
     }
   } while (is_truncated && !done);
 
index d9ce2b400011ff815b3c800cad4b9364e9d04809..7fe86fade054f79fbd3bff70b201dff73758b5db 100644 (file)
@@ -616,6 +616,13 @@ public:
   void execute() override;
 
   virtual int get_params() = 0;
+  virtual void handle_listing_chunk(RGWUserBuckets& buckets) {
+    /* The default implementation, used by e.g. S3, just generates a new
+     * part of listing and sends it client immediately. Swift can behave
+     * differently: when the reverse option is requested, all incoming
+     * instances of RGWUserBuckets are buffered and finally reversed. */
+    return send_response_data(buckets);
+  }
   virtual void send_response_begin(bool has_buckets) = 0;
   virtual void send_response_data(RGWUserBuckets& buckets) = 0;
   virtual void send_response_end() = 0;