shard.py 1.01 KB
Newer Older
1 2 3 4 5 6 7
# Copyright 2018 the V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from . import base


8 9 10 11 12 13 14 15 16 17 18 19
# Alphabet size determines the hashing radix. Choosing a prime number prevents
# clustering of the hashes.
HASHING_ALPHABET_SIZE = 2 ** 7 -1

def radix_hash(capacity, key):
  h = 0
  for character in key:
    h = (h * HASHING_ALPHABET_SIZE + ord(character)) % capacity

  return h


20 21
class ShardProc(base.TestProcFilter):
  """Processor distributing tests between shards.
22
  It hashes the unique test identifiers uses the hash to shard tests.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
  """
  def __init__(self, myid, shards_count):
    """
    Args:
      myid: id of the shard within [0; shards_count - 1]
      shards_count: number of shards
    """
    super(ShardProc, self).__init__()

    assert myid >= 0 and myid < shards_count

    self._myid = myid
    self._shards_count = shards_count

  def _filter(self, test):
38
    return self._myid != radix_hash(self._shards_count, test.procid)