private List<ReplicaTracker> fillReplicaStatusForFinishedGroup(ActiveGroupTracker finishedActiveGroupTracker) {

      List<ReplicaTracker> replicaTrackers = finishedActiveGroupTracker.getPreAssignedReplicas(
              Arrays.asList(ReplicaStatus.UNKNOWN, ReplicaStatus.OFFLINE, ReplicaStatus.STANDBY))
          .stream()
          .filter(replicaTracker -> {
            if (replicaTracker.isThrottled()) {
              logger.trace("Thread name: {} replica for tracker {} is throttled", threadName, replicaTracker);
              continuousReplicationReplicaThrottleCount.inc();
              return false;
            }
            return true;
          })
          .collect(Collectors.toList());

      replicaTrackers.forEach(replicaTracker -> {
        ReplicaStatus replicaStatus = getReplicaStatus(replicaTracker.getRemoteReplicaInfo());

        logger.trace("Thread name: {} Updated replica {} status from {} to {}", threadName,
            replicaTracker.getRemoteReplicaInfo(), replicaTracker.getReplicaStatus(), replicaStatus);

        replicaTracker.setReplicaStatus(replicaStatus);
      });
      return replicaTrackers;
    }
For any active group tracker that is not tracking any group, does below things

1. Filter pre-assigned replicas with UNKNOWN, OFFLINE and STANDBY status
2. If any of these replica is throttled we increment throttling metric
3. For each of these replicas we check the status of replica and update in corresponding tracker

whenever active group is free, no replica will be in ACTIVE status and whenever stand by group is free,
it will pick up STANDBY_TIMED_OUT_ON_NO_PROGRESS replicas, so we do not need to recheck status of these.

@param finishedActiveGroupTracker finished group tracker
@return list of replica trackers updated
ambry-replication/src/main/java/com/github/ambry/replication/ReplicaThread.java