private synchronized boolean initializeIfNeeded() {
      boolean partialUpdateAllowed = false;
      try {
        if (initFuture.isDone()) {
          partialUpdateAllowed = !initFuture.isCompletedExceptionally();
        } else {
          List<ZNRecord> records =
              propertyStore.getChildren(CONFIG_PATH, null, AccessOption.PERSISTENT, GET_CHILDREN_RETRY_COUNT,
                  GET_CHILDREN_RETRY_INTERVAL);
          listener.onDataNodeConfigChange(lazyIterable(records));
          initFuture.complete(null);
        }
      } catch (Throwable t) {
        initFuture.completeExceptionally(t);
      }
      return partialUpdateAllowed;
    }
If initialization has not yet been completed successfully, attempt an initialization. This should be called from
the event executor thread.
@return {@code true} if a partial update can be performed following this call. {@code false} if it is either
        not needed since a full init was just done or if an initialization error occurred previously.
ambry-clustermap/src/main/java/com/github/ambry/clustermap/PropertyStoreToDataNodeConfigAdapter.java