return 0;
}
+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
+ return val % max_shards;
+}
+
void RGWRados::shard_name(const string& prefix, unsigned max_shards, const string& key, string& name)
{
uint32_t val = ceph_str_hash_linux(key.c_str(), key.size());
string& read_iter, map<rgw_user_bucket, rgw_usage_log_entry>& usage, bool *is_truncated);
int cls_obj_usage_log_trim(string& oid, string& user, uint64_t start_epoch, uint64_t end_epoch);
+ int key_to_shard_id(const string& key, int max_shards);
void shard_name(const string& prefix, unsigned max_shards, const string& key, string& name);
void shard_name(const string& prefix, unsigned max_shards, const string& section, const string& key, string& name);
void shard_name(const string& prefix, unsigned shard_id, string& name);
}
void append(const string& entry) {
static int counter = 0;
- shards[++counter % shards.size()]->append(entry);
+ int shard_id = store->key_to_shard_id(entry, shards.size());
+ shards[shard_id]->append(entry);
}
void finish() {
for (vector<RGWOmapAppend *>::iterator iter = shards.begin(); iter != shards.end(); ++iter) {