From f767aafd42b72520b1a743daa6c075ed1c5ef299 Mon Sep 17 00:00:00 2001 From: Bingyin Zhang Date: Fri, 8 Dec 2017 11:56:09 +0800 Subject: [PATCH] rgw: optimize memory usage in function rgw_bucket::get_key * In function rgw_bucket::get_key, the reserved 12 bytes is only useful * for rgw_bucket_shard::get_key. Signed-off-by: Bingyin Zhang --- src/rgw/rgw_common.cc | 8 ++++---- src/rgw/rgw_common.h | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/rgw/rgw_common.cc b/src/rgw/rgw_common.cc index 56a354a3faa..9eb91733557 100644 --- a/src/rgw/rgw_common.cc +++ b/src/rgw/rgw_common.cc @@ -1825,11 +1825,10 @@ void rgw_raw_obj::decode_from_rgw_obj(bufferlist::iterator& bl) pool = old_obj.get_explicit_data_pool(); } -std::string rgw_bucket::get_key(char tenant_delim, char id_delim) const +std::string rgw_bucket::get_key(char tenant_delim, char id_delim, size_t reserve) const { - static constexpr size_t shard_len{12}; // ":4294967295\0" const size_t max_len = tenant.size() + sizeof(tenant_delim) + - name.size() + sizeof(id_delim) + bucket_id.size() + shard_len; + name.size() + sizeof(id_delim) + bucket_id.size() + reserve; std::string key; key.reserve(max_len); @@ -1848,7 +1847,8 @@ std::string rgw_bucket::get_key(char tenant_delim, char id_delim) const std::string rgw_bucket_shard::get_key(char tenant_delim, char id_delim, char shard_delim) const { - auto key = bucket.get_key(tenant_delim, id_delim); + static constexpr size_t shard_len{12}; // ":4294967295\0" + auto key = bucket.get_key(tenant_delim, id_delim, shard_len); if (shard_id >= 0 && shard_delim) { key.append(1, shard_delim); key.append(std::to_string(shard_id)); diff --git a/src/rgw/rgw_common.h b/src/rgw/rgw_common.h index b3936b45883..3017c495f37 100644 --- a/src/rgw/rgw_common.h +++ b/src/rgw/rgw_common.h @@ -1080,7 +1080,8 @@ struct rgw_bucket { // format a key for the bucket/instance. pass delim=0 to skip a field std::string get_key(char tenant_delim = '/', - char id_delim = ':') const; + char id_delim = ':', + size_t reserve = 0) const; const rgw_pool& get_data_extra_pool() const { return explicit_placement.get_data_extra_pool(); -- 2.39.5