void filterRemoteReplicasToReplicate(List<RemoteReplicaInfo> replicasToReplicatePerNode,
      List<RemoteReplicaInfo> activeReplicasPerNode, List<RemoteReplicaInfo> standbyReplicasTimedOutOnNoProgress) {
    // Get a list of active and standBy replicas that have timed out that needs be included for this replication cycle
    for (RemoteReplicaInfo remoteReplicaInfo : replicasToReplicatePerNode) {
      ReplicaStatus replicaStatus = getReplicaStatus(remoteReplicaInfo);
      switch (replicaStatus){
        case OFFLINE:
        case STANDBY:
          break;
        case ACTIVE:
          activeReplicasPerNode.add(remoteReplicaInfo);
          break;
        case STANDBY_TIMED_OUT_ON_NO_PROGRESS:
          standbyReplicasTimedOutOnNoProgress.add(remoteReplicaInfo);
          break;
      }
    }
  }
Filter the remote replicas in the list of {@link RemoteReplicaInfo}s. It will filter out the replicas that are down
or in backoff state or is disabled. It will also filter out replicas that tries to replicate from remote datacenter
but still have missing blobs from last ReplicaMetadataRequest when the leader based replication is enabled.
@param replicasToReplicatePerNode All the replicas.
@param activeReplicasPerNode A list to store all the active replicas after filtering.
@param standbyReplicasTimedOutOnNoProgress A list to store all the standby replicas that still have missing blobs from
                                     previous ReplicaMetadataRequest and are timed out
ambry-replication/src/main/java/com/github/ambry/replication/ReplicaThread.java