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>
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);
class RGWListBucket : public RGWOp {
protected:
+ RGWBucketEnt bucket;
string prefix;
rgw_obj_key marker;
rgw_obj_key next_marker;
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 {
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));
int get_params();
void send_response();
+ bool need_container_stats() { return true; }
};
class RGWStatAccount_ObjStore_SWIFT : public RGWStatAccount_ObjStore {