All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ru.taskurotta.service.gc.AbstractGCTask Maven / Gradle / Ivy

package ru.taskurotta.service.gc;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.taskurotta.service.dependency.links.Graph;
import ru.taskurotta.service.dependency.links.GraphDao;
import ru.taskurotta.service.storage.ProcessService;
import ru.taskurotta.service.storage.TaskDao;

import java.util.Set;
import java.util.UUID;

/**
 * User: stukushin
 * Date: 05.12.13
 * Time: 12:41
 */
public abstract class AbstractGCTask implements Runnable {

    protected static final Logger logger = LoggerFactory.getLogger(AbstractGCTask.class);

    protected ProcessService processService;
    protected GraphDao graphDao;
    protected TaskDao taskDao;

    protected AbstractGCTask(ProcessService processService, GraphDao graphDao, TaskDao taskDao) {
        this.processService = processService;
        this.graphDao = graphDao;
        this.taskDao = taskDao;
    }

    protected void gc(UUID processId) {
        if (processId == null) {
            logger.warn("ProcessId for garbage collector is null");
            return;
        }
        logger.trace("Start garbage collector for process [{}]", processId);

        Graph graph = graphDao.getGraph(processId);
        if (graph == null) {
            logger.warn("Not found graph for process [{}], stop garbage collector for this process", processId);
            if (processService.getStartTask(processId) == null) {
                logger.warn("And processService has no start task for it [{}]", processId);
            }
            return;
        }

        if (!graph.isFinished()) {
            logger.error("Graph for process [{}] isn't finished, stop garbage collector for this process", processId);
            return;
        }

        Set finishedItems = graph.getFinishedItems();
        taskDao.deleteDecisions(finishedItems, processId);
        taskDao.deleteTasks(finishedItems, processId);

        graphDao.deleteGraph(processId);

        processService.deleteProcess(processId);

        logger.debug("Finish garbage collector for process [{}]", processId);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy