Exemplo n.º 1
0
  @SuppressForbidden(reason = "Math#abs is trappy")
  private int shardId(
      ClusterState clusterState, String index, String type, String id, @Nullable String routing) {
    final IndexMetaData indexMetaData = indexMetaData(clusterState, index);
    final Version createdVersion = indexMetaData.getCreationVersion();
    final HashFunction hashFunction = indexMetaData.getRoutingHashFunction();
    final boolean useType = indexMetaData.getRoutingUseType();

    final int hash;
    if (routing == null) {
      if (!useType) {
        hash = hash(hashFunction, id);
      } else {
        hash = hash(hashFunction, type, id);
      }
    } else {
      hash = hash(hashFunction, routing);
    }
    if (createdVersion.onOrAfter(Version.V_2_0_0)) {
      return MathUtils.mod(hash, indexMetaData.numberOfShards());
    } else {
      return Math.abs(hash % indexMetaData.numberOfShards());
    }
  }