private void fillStandByGroups() {
      dataNodeTrackers.forEach(dataNodeTracker -> {
        logger.trace("Thread name: {} Trying to create standby group for data node {} ", threadName,
            dataNodeTracker.getDataNodeId());

        StandByGroupTracker standByGroupTracker = dataNodeTracker.getStandByGroupTracker();
        if (standByGroupTracker.isInFlight()) {
          return;
        }
        logger.trace("Thread name: {} Trying to create standby group for stand by group tracker {} ", threadName,
            standByGroupTracker);

        List<ReplicaTracker> standByTimedOutNoProgressReplicaTrackers = new ArrayList<>();
        List<ActiveGroupTracker> activeGroupTrackers = dataNodeTracker.getActiveGroupTrackers();

        activeGroupTrackers.forEach(activeGroupTracker -> {
          List<ReplicaTracker> replicaTrackers = activeGroupTracker.getPreAssignedReplicas(
                  Collections.singletonList(ReplicaStatus.STANDBY_TIMED_OUT_ON_NO_PROGRESS));

          standByTimedOutNoProgressReplicaTrackers.addAll(replicaTrackers);
        });

        if (standByTimedOutNoProgressReplicaTrackers.isEmpty()) {
          return;
        }

        logger.trace("Thread name: {} Trying to create standby group with replica trackers {} ", threadName,
            standByTimedOutNoProgressReplicaTrackers);

        RemoteReplicaGroup remoteReplicaGroup = new RemoteReplicaGroup(standByTimedOutNoProgressReplicaTrackers.stream()
            .map(ReplicaTracker::getRemoteReplicaInfo)
            .collect(Collectors.toList()), dataNodeTracker.getDataNodeId(), true, standByGroupTracker.getGroupId());
        standByGroupTracker.startIteration(remoteReplicaGroup, standByTimedOutNoProgressReplicaTrackers);

        logger.trace("Thread name: {} Created stand by remote replica group for stand by group tracker {} ", threadName,
            standByGroupTracker);
      });
    }
For all stand by tracker, which are not tracking any remote replica group, it does below things

1. Gets all preassigned replicas with STANDBY_TIMED_OUT_ON_NO_PROGRESS status from preassigned replicas of active group of
   corresponding datanode tracker.
2. Create single standby group from these replicas and store it in standby group tracker
ambry-replication/src/main/java/com/github/ambry/replication/ReplicaThread.java