package com.sequenceiq.cloudbreak.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; public abstract class ClusterBasedStatusCheckerTask<T extends StackContext> extends SimpleStatusCheckerTask<T> { private static final Logger LOGGER = LoggerFactory.getLogger(ClusterBasedStatusCheckerTask.class); public boolean exitPolling(T t) { try { Long stackId = t.getStack().getId(); Long clusterId = t.getStack().getCluster().getId(); PollGroup stackPollGroup = InMemoryStateStore.getStack(stackId); if (stackPollGroup == null || CANCELLED.equals(stackPollGroup)) { LOGGER.warn("Stack is getting terminated, polling is cancelled."); return true; } PollGroup clusterPollGroup = InMemoryStateStore.getCluster(clusterId); if (clusterPollGroup == null || CANCELLED.equals(clusterPollGroup)) { LOGGER.warn("Cluster is getting terminated, polling is cancelled."); return true; } return false; } catch (Exception ex) { LOGGER.error("Error occurred when check status checker exit criteria: ", ex); return true; } } }