From e33c4767aa76487ca5c19e2b9700510592c6367a Mon Sep 17 00:00:00 2001 From: Matvey Larionov Date: Wed, 15 Mar 2017 15:50:36 +0300 Subject: [PATCH] Stop using std::hash for sharding (#99) To make sure different configurations make sharding in the same way stop using std::hash. --- src/daemon/emitter.cc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/daemon/emitter.cc b/src/daemon/emitter.cc index 5f17c80d..dd9af937 100644 --- a/src/daemon/emitter.cc +++ b/src/daemon/emitter.cc @@ -295,13 +295,13 @@ void Emitter::DoCheckCache(const base::WorkerPool& pool) { STAT(SIMPLE_CACHE_MISS); - auto hash = GenerateHash(incoming->flags(), source, extra_files); - DCHECK(!conf->emitter().has_total_shards() || - conf->emitter().total_shards() > 0); - ui32 shard = conf->emitter().has_total_shards() - ? std::hash{}(hash.str.Hash(4)) % - conf->emitter().total_shards() - : Queue::DEFAULT_SHARD; + ui32 shard = Queue::DEFAULT_SHARD; + if (conf->emitter().has_total_shards()) { + DCHECK(conf->emitter().total_shards() > 0); + auto hash = GenerateHash(incoming->flags(), source, extra_files); + shard = (*reinterpret_cast(hash.str.Hash(4).c_str())) % + conf->emitter().total_shards(); + } all_tasks_->Push(std::move(*task), shard); } }