private void addReplicasToPool(List<? extends ReplicaId> replicas) {
    Collections.shuffle(replicas);

    for (ReplicaId replicaId : replicas) {
      addToPool(replicaId);
    }

    initializeTracking();
    listRemoteReplicas();
    if(!enoughReplicas()) {
      throw new IllegalArgumentException(generateErrorMessage(partitionId));
    }
  }
Create a "pool" of replicas that we can send requests to. Replicas are divided up into local and remote replicas.
The remote replicas are sorted to obtain the best possible performance (given the additional latency and bandwidth
associated with cross-colo requests).
@param replicas the list of replicas to add to the pool.
ambry-router/src/main/java/com/github/ambry/router/ParanoidDurabilityOperationTracker.java