From e1622e4f9cb26e9740ec1608410ab08a100daba7 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Wed, 18 Apr 2012 14:53:59 -0700 Subject: [PATCH] rgw: HEAD bucket also dumps bucket meta info Shows total objects, bytes used, actual bytes used. Signed-off-by: Yehuda Sadeh --- src/rgw/rgw_rest_s3.cc | 30 +++++++++++++++++++++++++++++- src/rgw/rgw_rest_s3.h | 8 ++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index a2b6642dd61f7..531cd7dfbb99a 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -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) diff --git a/src/rgw/rgw_rest_s3.h b/src/rgw/rgw_rest_s3.h index bbf84abd11ba0..72b20df7d91f0 100644 --- a/src/rgw/rgw_rest_s3.h +++ b/src/rgw/rgw_rest_s3.h @@ -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() {} -- 2.39.5