package cz.cuni.mff.d3s.been.hostruntime;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import cz.cuni.mff.d3s.been.cluster.context.ClusterContext;
import cz.cuni.mff.d3s.been.socketworks.twoway.ReadReplyHandler;
import cz.cuni.mff.d3s.been.socketworks.twoway.ReadReplyHandlerFactory;
/**
* CheckPoint handler factory.
*
* @author Radek Mácha
*/
class CheckpointHandlerFactory implements ReadReplyHandlerFactory, HandlerRecycler {
private final ClusterContext ctx;
private final BlockingQueue<ReadReplyHandler> recyclableHandlers;
private CheckpointHandlerFactory(ClusterContext ctx) {
this.ctx = ctx;
recyclableHandlers = new LinkedBlockingQueue<ReadReplyHandler>();
}
/**
*
* Crates CheckPoint factories.
*
* @param ctx
* connection to the cluster
* @return CheckPoint factory
*/
public static CheckpointHandlerFactory create(ClusterContext ctx) {
return new CheckpointHandlerFactory(ctx);
}
@Override
public ReadReplyHandler getHandler() {
ReadReplyHandler handler = recyclableHandlers.poll();
return handler != null ? handler : CheckpointHandler.create(ctx, this);
}
@Override
public void recycle(ReadReplyHandler handler) {
recyclableHandlers.add(handler);
}
}