]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: HEAD bucket also dumps bucket meta info
authorYehuda Sadeh <yehuda@hq.newdream.net>
Wed, 18 Apr 2012 21:53:59 +0000 (14:53 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Wed, 18 Apr 2012 21:53:59 +0000 (14:53 -0700)
Shows total objects, bytes used, actual bytes used.

Signed-off-by: Yehuda Sadeh <yehuda@hq.newdream.net>
src/rgw/rgw_rest_s3.cc
src/rgw/rgw_rest_s3.h

index a2b6642dd61f7a81af9fd487f5b78bb53229a7c1..531cd7dfbb99a27ee39e85f11e2f81e300818ed9 100644 (file)
@@ -182,6 +182,31 @@ void RGWListBucket_REST_S3::send_response()
   flush_formatter_to_req_state(s, s->formatter);
 }
 
+static void dump_bucket_metadata(struct req_state *s, RGWBucketEnt& bucket)
+{
+  char buf[32];
+  snprintf(buf, sizeof(buf), "%lld", (long long)bucket.count);
+  CGI_PRINTF(s,"X-RGW-Object-Count: %s\n", buf);
+  snprintf(buf, sizeof(buf), "%lld", (long long)bucket.size);
+  CGI_PRINTF(s,"X-RGW-Bytes-Used: %s\n", buf);
+  snprintf(buf, sizeof(buf), "%lld", (long long)bucket.size_rounded);
+  CGI_PRINTF(s,"X-RGW-Bytes-Used-Actual: %s\n", buf);
+}
+
+void RGWStatBucket_REST_S3::send_response()
+{
+  if (ret >= 0) {
+    ret = STATUS_NO_CONTENT;
+    dump_bucket_metadata(s, bucket);
+  }
+
+  set_req_state_err(s, ret);
+  dump_errno(s);
+
+  end_header(s);
+  dump_start(s);
+}
+
 int RGWCreateBucket_REST_S3::get_params()
 {
   RGWAccessControlPolicy_S3 s3policy(s->cct);
@@ -533,7 +558,10 @@ RGWOp *RGWHandler_REST_S3::get_retrieve_obj_op(bool get_data)
   if (s->args.exists("uploads"))
     return new RGWListBucketMultiparts_REST_S3;
 
-  return new RGWListBucket_REST_S3;
+  if (get_data)
+    return new RGWListBucket_REST_S3;
+  else
+    return new RGWStatBucket_REST_S3;
 }
 
 RGWOp *RGWHandler_REST_S3::get_retrieve_op(bool get_data)
index bbf84abd11ba04c3f8015bc03c776bbd351d2691..72b20df7d91f091d9531824f2569b46804107f30 100644 (file)
@@ -36,6 +36,14 @@ public:
   void send_response();
 };
 
+class RGWStatBucket_REST_S3 : public RGWStatBucket_REST {
+public:
+  RGWStatBucket_REST_S3() {}
+  ~RGWStatBucket_REST_S3() {}
+
+  void send_response();
+};
+
 class RGWCreateBucket_REST_S3 : public RGWCreateBucket_REST {
 public:
   RGWCreateBucket_REST_S3() {}