]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: optimize memory usage in function rgw_bucket::get_key 19391/head
authorBingyin Zhang <zhangbingyin@cloudin.cn>
Fri, 8 Dec 2017 03:56:09 +0000 (11:56 +0800)
committerBingyin Zhang <zhangbingyin@cloudin.cn>
Fri, 8 Dec 2017 03:56:09 +0000 (11:56 +0800)
* In function rgw_bucket::get_key, the reserved 12 bytes is only useful
* for rgw_bucket_shard::get_key.

Signed-off-by: Bingyin Zhang <zhangbingyin@cloudin.cn>
src/rgw/rgw_common.cc
src/rgw/rgw_common.h

index 56a354a3faafe28a155e8e38d92f9f6bde2b62a8..9eb917335573a6ea647e5750101ce0643c25730b 100644 (file)
@@ -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));
index b3936b4588329bdd7eef49474fc228930b1944ae..3017c495f37bdbffcc1732effab8b7ea81324193 100644 (file)
@@ -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();