package com.packtpub.storm.trident.state;
import com.packtpub.druid.firehose.StormFirehose;
import com.packtpub.druid.firehose.StormFirehoseFactory;
import com.packtpub.storm.model.FixMessageDto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import storm.trident.state.State;
import java.util.Vector;
public class DruidState implements State {
private static final Logger LOG = LoggerFactory.getLogger(DruidState.class);
private Vector<FixMessageDto> messages = new Vector<FixMessageDto>();
private int partitionIndex;
public DruidState(int partitionIndex){
this.partitionIndex = partitionIndex;
}
@Override
public void beginCommit(Long batchId) {
}
@Override
public void commit(Long batchId) {
String partitionId = batchId.toString() + "-" + partitionIndex;
LOG.info("Committing partition [" + partitionIndex + "] of batch [" + batchId + "]");
try {
if (StormFirehose.STATUS.isCompleted(partitionId)) {
LOG.warn("Encountered completed partition [" + partitionIndex + "] of batch [" + batchId + "]");
return;
} else if (StormFirehose.STATUS.isInLimbo(partitionId)) {
LOG.warn("Encountered limbo partition [" + partitionIndex + "] of batch [" + batchId + "] : NOTIFY THE AUTHORITIES!");
return;
} else if (StormFirehose.STATUS.isInProgress(partitionId)) {
LOG.warn("Encountered in-progress partition [\" + partitionIndex + \"] of batch [" + batchId + "] : NOTIFY THE AUTHORITIES!");
return;
}
StormFirehose.STATUS.putInProgress(partitionId);
StormFirehoseFactory.getFirehose().sendMessages(partitionId, messages);
} catch (Exception e) {
LOG.error("Could not start firehose for [" + partitionIndex + "] of batch [" + batchId + "]", e);
}
}
public void aggregateMessage(FixMessageDto message) {
// LOG.info("Aggregating [" + message + "]");
messages.add(message);
}
}