package cz.cuni.mff.d3s.been.manager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cz.cuni.mff.d3s.been.cluster.context.ClusterContext;
import cz.cuni.mff.d3s.been.core.persistence.Entities;
import cz.cuni.mff.d3s.been.core.task.TaskContextState;
import cz.cuni.mff.d3s.been.persistence.DAOException;
import cz.cuni.mff.d3s.been.persistence.task.PersistentContextState;
/**
* Context state persistence helper
*
* @author darklight
*/
class PersistentContextStateRegistrar {
private static final Logger log = LoggerFactory.getLogger(PersistentContextStateRegistrar.class);
private final ClusterContext ctx;
/**
* Creates PersistentContextStateRegistrar
*
* @param ctx
* connection to the cluster
*/
PersistentContextStateRegistrar(ClusterContext ctx) {
this.ctx = ctx;
}
/**
* Processes context state change.
*
* @param contextId
* contextId
* @param benchmarkId
* benchmarkId
* @param state
* current state of the context
*/
public void processContextStateChange(String contextId, String benchmarkId, TaskContextState state) {
final PersistentContextState persistentState = new PersistentContextState();
persistentState.setContextId(contextId);
persistentState.setBenchmarkId(benchmarkId);
persistentState.setContextState(state);
try {
ctx.getPersistence().asyncPersist(Entities.OUTCOME_CONTEXT.getId(), persistentState);
} catch (DAOException e) {
log.error("Failed to persist context state '{}' for context '{}'", state.name(), contextId, e);
}
}
}