From 260801f9bb78169648c3f2052ebc3e1328113367 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Wed, 1 Feb 2017 19:05:50 +0100 Subject: [PATCH] rgw: be aware abount tenants on cls_user_bucket -> rgw_bucket conversion. Fixes: http://tracker.ceph.com/issues/18364 Fixes: http://tracker.ceph.com/issues/16355 Signed-off-by: Radoslaw Zarzynski (cherry picked from commit 871e1f51afe9d6c8b88debc07460b4316121f999) --- src/rgw/rgw_bucket.cc | 5 ++--- src/rgw/rgw_bucket.h | 2 +- src/rgw/rgw_common.h | 25 ++++++++++++++++--------- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index b3e5e0ec42dbe..8184741a4fff5 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -134,9 +134,8 @@ int rgw_read_user_buckets(RGWRados * store, if (ret < 0) return ret; - for (list::iterator q = entries.begin(); q != entries.end(); ++q) { - RGWBucketEnt e(*q); - buckets.add(e); + for (const auto& entry : entries) { + buckets.add(RGWBucketEnt(user_id, entry)); total++; } diff --git a/src/rgw/rgw_bucket.h b/src/rgw/rgw_bucket.h index 12182d12935ab..ed678f5ce994c 100644 --- a/src/rgw/rgw_bucket.h +++ b/src/rgw/rgw_bucket.h @@ -126,7 +126,7 @@ class RGWUserBuckets /** * Add a (created) bucket to the user's bucket list. */ - void add(RGWBucketEnt& bucket) { + void add(const RGWBucketEnt& bucket) { buckets[bucket.bucket.name] = bucket; } diff --git a/src/rgw/rgw_common.h b/src/rgw/rgw_common.h index 3175d6ac58510..645f236f3f389 100644 --- a/src/rgw/rgw_common.h +++ b/src/rgw/rgw_common.h @@ -693,10 +693,15 @@ struct rgw_bucket { rgw_bucket() { } // cppcheck-suppress noExplicitConstructor - rgw_bucket(const cls_user_bucket& b) : name(b.name), data_pool(b.data_pool), - data_extra_pool(b.data_extra_pool), - index_pool(b.index_pool), marker(b.marker), - bucket_id(b.bucket_id) {} + explicit rgw_bucket(const rgw_user& u, const cls_user_bucket& b) + : tenant(u.tenant), + name(b.name), + data_pool(b.data_pool), + data_extra_pool(b.data_extra_pool), + index_pool(b.index_pool), + marker(b.marker), + bucket_id(b.bucket_id) { + } rgw_bucket(const string& s) : name(s) { data_pool = index_pool = s; marker = ""; @@ -1352,11 +1357,13 @@ struct RGWBucketEnt { RGWBucketEnt() : size(0), size_rounded(0), count(0) {} - explicit RGWBucketEnt(const cls_user_bucket_entry& e) : bucket(e.bucket), - size(e.size), - size_rounded(e.size_rounded), - creation_time(e.creation_time), - count(e.count) {} + explicit RGWBucketEnt(const rgw_user& u, const cls_user_bucket_entry& e) + : bucket(u, e.bucket), + size(e.size), + size_rounded(e.size_rounded), + creation_time(e.creation_time), + count(e.count) { + } void convert(cls_user_bucket_entry *b) { bucket.convert(&b->bucket);