package backtype.storm.utils; import backtype.storm.metric.api.IStatefulObject; import com.lmax.disruptor.EventHandler; import com.lmax.disruptor.InsufficientCapacityException; import com.lmax.disruptor.WaitStrategy; import com.lmax.disruptor.dsl.ProducerType; /** * * A single consumer queue that uses the LMAX Disruptor. They key to the * performance is the ability to catch up to the producer by processing tuples * in batches. */ public abstract class DisruptorQueue implements IStatefulObject { public static void setUseSleep(boolean useSleep) { DisruptorQueueImpl.setUseSleep(useSleep); } private static boolean CAPACITY_LIMITED = false; public static void setLimited(boolean limited) { CAPACITY_LIMITED = limited; } public static DisruptorQueue mkInstance(String queueName, ProducerType producerType, int bufferSize, WaitStrategy wait) { if (CAPACITY_LIMITED == true) { return new DisruptorQueueImpl(queueName, producerType, bufferSize, wait); } else { return new DisruptorWrapBlockingQueue(queueName, producerType, bufferSize, wait); } } public abstract String getName(); public abstract void haltWithInterrupt(); public abstract Object poll(); public abstract Object take(); public abstract void consumeBatch(EventHandler<Object> handler); public abstract void consumeBatchWhenAvailable(EventHandler<Object> handler); public abstract void publish(Object obj); public abstract void publish(Object obj, boolean block) throws InsufficientCapacityException; public abstract void consumerStarted(); public abstract void clear(); public abstract long population(); public abstract long capacity(); public abstract long writePos(); public abstract long readPos(); public abstract float pctFull(); }