From: Yehuda Sadeh Date: Thu, 18 Feb 2016 23:11:00 +0000 (-0800) Subject: rgw: a bit better hashing X-Git-Tag: v10.1.0~354^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d2d0f8471e7a12746169c5670975c94ec96054ad;p=ceph.git rgw: a bit better hashing Signed-off-by: Yehuda Sadeh --- diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 7e91027a0c69..f2e933e243e8 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -4339,10 +4339,11 @@ next: return 0; } +#define MAX_SHARDS_PRIME 7877 + int RGWRados::key_to_shard_id(const string& key, int max_shards) { - uint32_t val = ceph_str_hash_linux(key.c_str(), key.size()); -#warning a bad hash, need to use prime + uint32_t val = ceph_str_hash_linux(key.c_str(), key.size()) % MAX_SHARDS_PRIME; return val % max_shards; } @@ -4528,7 +4529,7 @@ string RGWRados::objexp_hint_get_shardname(int shard_num) return objname + buf; } -#define MAX_PBJEXP_SHARDS_PRIME 7877 +#define MAX_OBJEXP_SHARDS_PRIME 7877 int RGWRados::objexp_key_shard(const rgw_obj_key& key) { @@ -4536,7 +4537,7 @@ int RGWRados::objexp_key_shard(const rgw_obj_key& key) int num_shards = cct->_conf->rgw_objexp_hints_num_shards; uint32_t sid = ceph_str_hash_linux(obj_key.c_str(), obj_key.size()); uint32_t sid2 = sid ^ ((sid & 0xFF) << 24); - sid = sid2 % MAX_BUCKET_INDEX_SHARDS_PRIME % num_shards; + sid = sid2 % MAX_OBJEXP_SHARDS_PRIME % num_shards; return sid % num_shards; }