package com.sequenceiq.cloudbreak.core.bootstrap.service; import static com.sequenceiq.cloudbreak.cloud.scheduler.PollGroup.CANCELLED; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sequenceiq.cloudbreak.cloud.scheduler.PollGroup; import com.sequenceiq.cloudbreak.cloud.store.InMemoryStateStore; import com.sequenceiq.cloudbreak.orchestrator.state.ExitCriteria; import com.sequenceiq.cloudbreak.orchestrator.state.ExitCriteriaModel; public class ClusterDeletionBasedExitCriteria implements ExitCriteria { private static final Logger LOGGER = LoggerFactory.getLogger(ClusterDeletionBasedExitCriteria.class); @Override public boolean isExitNeeded(ExitCriteriaModel exitCriteriaModel) { ClusterDeletionBasedExitCriteriaModel model = (ClusterDeletionBasedExitCriteriaModel) exitCriteriaModel; LOGGER.debug("Check isExitNeeded for model: {}", model); PollGroup stackPollGroup = InMemoryStateStore.getStack(model.getStackId()); if (stackPollGroup == null || CANCELLED.equals(stackPollGroup)) { LOGGER.warn("Stack is getting terminated, polling is cancelled."); return true; } if (model.getClusterId() != null) { PollGroup clusterPollGroup = InMemoryStateStore.getCluster(model.getClusterId()); if (clusterPollGroup == null || CANCELLED.equals(clusterPollGroup)) { LOGGER.warn("Cluster is getting terminated, polling is cancelled."); return true; } } return false; } @Override public String exitMessage() { return "Cluster or it's stack is getting terminated, polling is cancelled."; } }