private void checkForMissingColocatedRegion(CancelCriterion cancelCriterion)
      throws InterruptedException {
    synchronized (lock) {
      boolean firstLogIteration = true;
      while (true) {
        long waitMillis = firstLogIteration ? delayMillis : intervalMillis;
        // delay for first log message is half of the interval between subsequent log messages
        if (firstLogIteration) {
          firstLogIteration = false;
        }

        lock.wait(waitMillis);

        PRHARedundancyProvider redundancyProvider = region.getRedundancyProvider();
        if (redundancyProvider != null && redundancyProvider.isPersistentRecoveryComplete()) {
          // Terminate the logging thread
          // isPersistentRecoveryComplete is true only when there are no missing colocated regions
          break;
        }
        if (missingChildren.isEmpty()) {
          break;
        }
        if (cancelCriterion.isCancelInProgress()) {
          break;
        }

        logMissingRegions(region.getFullPath());
      }
    }
  }
Writes a log entry every SLEEP_PERIOD when there are missing colocated child regions for this
region.
geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/colocation/SingleThreadColocationLogger.java