package storm.trident.spout;
import backtype.storm.task.TopologyContext;
import backtype.storm.tuple.Fields;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import storm.trident.operation.TridentCollector;
import storm.trident.topology.TransactionAttempt;
/**
* This defines a transactional spout which does *not* necessarily
* replay the same batch every time it emits a batch for a transaction id.
*
*/
public interface IOpaquePartitionedTridentSpout<Partitions, Partition extends ISpoutPartition, M> extends Serializable {
public interface Coordinator<Partitions> {
boolean isReady(long txid);
Partitions getPartitionsForBatch();
void close();
}
public interface Emitter<Partitions, Partition extends ISpoutPartition, M> {
/**
* Emit a batch of tuples for a partition/transaction.
*
* Return the metadata describing this batch that will be used as lastPartitionMeta
* for defining the parameters of the next batch.
*/
M emitPartitionBatch(TransactionAttempt tx, TridentCollector collector, Partition partition, M lastPartitionMeta);
/**
* This method is called when this task is responsible for a new set of partitions. Should be used
* to manage things like connections to brokers.
*/
void refreshPartitions(List<Partition> partitionResponsibilities);
List<Partition> getOrderedPartitions(Partitions allPartitionInfo);
void close();
}
Emitter<Partitions, Partition, M> getEmitter(Map conf, TopologyContext context);
Coordinator getCoordinator(Map conf, TopologyContext context);
Map getComponentConfiguration();
Fields getOutputFields();
}