code: public void awaitAvailable() throws InterruptedException {
          synchronized (SERVICE_AVILABILITY_LOCK) {
              while (!available) {
                  LOG.info("Waiting for service {} to become available...", getName());
                  LOG.debug(getDependencyGraph());
                  SERVICE_AVILABILITY_LOCK.wait();
              }
          }
      }
docs: Availability changes between calls to this method are the responsibility of the user code, which must be able to handle a short interruption (e.g. comm services buffer their messages etc.).