void start() throws InterruptedException { if (dependencies.size() > 0) { synchronized (this) { while (!canStart) { this.wait(1000 * 60 * 3L); if (dependenciesFailed) { throw new TezUncheckedException( "Skipping service start for " + service.getName() + " as dependencies failed to start"); } } } } if (LOG.isDebugEnabled()) { LOG.debug("Service: " + service.getName() + " trying to start"); } for (Service dependency : dependencies) { if (!dependency.isInState(Service.STATE.STARTED)) { LOG.info( "Service: " + service.getName() + " not started because " + " service: " + dependency.getName() + " is in state: " + dependency.getServiceState()); return; } } service.start(); }
/** * Run a child service -initing and starting it if this service has already passed those parts of * its own lifecycle * * @param service the service to start */ protected boolean deployChildService(Service service) { service.init(getConfig()); addService(service); if (isInState(STATE.STARTED)) { service.start(); return true; } return false; }