]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: Swift API. Complement the response to "show container details"
authorDmytro Iurchenko <diurchenko@mirantis.com>
Mon, 16 Feb 2015 16:47:59 +0000 (18:47 +0200)
committerYehuda Sadeh <yehuda@redhat.com>
Mon, 2 Mar 2015 18:32:04 +0000 (10:32 -0800)
OpenStack Object Storage API v1 states that X-Container-Object-Count, X-Container-Bytes-Used and user-defined metadata headers should be included in a response.

Fixes: #10666
Backport: hammer
Reported-by: Ahmad Faheem <ahmad.faheem@ril.com>
Reviewed-by: Yehuda Sadeh <yehuda@redhat.com>
Signed-off-by: Dmytro Iurchenko <diurchenko@mirantis.com>
src/rgw/rgw_op.cc
src/rgw/rgw_op.h
src/rgw/rgw_rest_swift.cc
src/rgw/rgw_rest_swift.h

index c6992b2df8471890617fe4ee5b2f858a8bb6be0c..26238c91215cb7bf3384af56632b4d0d67545d77 100644 (file)
@@ -1193,12 +1193,20 @@ void RGWListBucket::pre_exec()
 
 void RGWListBucket::execute()
 {
-  string no_ns;
-
   ret = get_params();
   if (ret < 0)
     return;
 
+  if (need_container_stats()) {
+    map<string, RGWBucketEnt> m;
+    m[s->bucket.name] = RGWBucketEnt();
+    m.begin()->second.bucket = s->bucket;
+    ret = store->update_containers_stats(m);
+    if (ret > 0) {
+      bucket = m.begin()->second;
+    } 
+  }
+
   RGWRados::Bucket target(store, s->bucket);
   RGWRados::Bucket::List list_op(&target);
 
index 1be7db7ac70463b710f5a98c0bc05d493dbbd46b..577df8527041d47ce699fe532ee7ceffd419d7c5 100644 (file)
@@ -245,6 +245,7 @@ public:
 
 class RGWListBucket : public RGWOp {
 protected:
+  RGWBucketEnt bucket;
   string prefix;
   rgw_obj_key marker; 
   rgw_obj_key next_marker; 
@@ -273,6 +274,7 @@ public:
   virtual const string name() { return "list_bucket"; }
   virtual RGWOpType get_type() { return RGW_OP_LIST_BUCKET; }
   virtual uint32_t op_mask() { return RGW_OP_TYPE_READ; }
+  virtual bool need_container_stats() { return false; }
 };
 
 class RGWGetBucketLogging : public RGWOp {
index b4b40940777c7d6a5f375150e56075ce130b569b..12976553b2532b632a263fd543d6f2af2f1e5965 100644 (file)
@@ -151,12 +151,15 @@ int RGWListBucket_ObjStore_SWIFT::get_params()
   return 0;
 }
 
+static void dump_container_metadata(struct req_state *, RGWBucketEnt&);
+
 void RGWListBucket_ObjStore_SWIFT::send_response()
 {
   vector<RGWObjEnt>::iterator iter = objs.begin();
   map<string, bool>::iterator pref_iter = common_prefixes.begin();
 
   dump_start(s);
+  dump_container_metadata(s, bucket);
 
   s->formatter->open_array_section_with_attrs("container", FormatterAttrs("name", s->bucket.name.c_str(), NULL));
 
index 2374e15bd0fd25e0bc7a49c11ff92dedb7aeb0c1..811bf0deaea67377ff36162c638dc7e173c6d21f 100644 (file)
@@ -40,6 +40,7 @@ public:
 
   int get_params();
   void send_response();
+  bool need_container_stats() { return true; }
 };
 
 class RGWStatAccount_ObjStore_SWIFT : public RGWStatAccount_ObjStore {