use of com.alibaba.jstorm.transactional.spout.TransactionSpoutOutputCollector.BatchInfo in project jstorm by alibaba.
the class TransactionSpout method commit.
protected void commit() {
if (isActive() == false) {
// If spout has not finished initialization or is inactive, just return.
return;
}
Object userState = spoutExecutor.finishBatch();
BatchInfo batchInfo = outputCollector.flushBarrier();
BatchGroupId id = new BatchGroupId(groupId, batchInfo.batchId);
Object commitState = null;
try {
commitState = spoutExecutor.commit(id, userState);
} catch (Exception e) {
LOG.warn("Failed to commit spout state for batch-{}, {}", id, e);
return;
}
if (commitState == TransactionCommon.COMMIT_FAIL) {
LOG.warn("Failed to commit spout state for batch-{}", id);
return;
}
currState.setBatchId(batchInfo.batchId);
currState.setUserCheckpoint(Utils.trySerialize(commitState));
committingBatches.add(batchInfo.batchId);
updateMaxPendingFlag();
TopoMasterCtrlEvent event = new TopoMasterCtrlEvent(EventType.transactionCommit);
TransactionState state = new TransactionState(currState);
event.addEventValue(state.getCurrBatchGroupId());
event.addEventValue(state);
outputCollector.emitDirectByDelegate(topologyMasterId, Common.TOPOLOGY_MASTER_CONTROL_STREAM_ID, new Values(event), null);
}
Aggregations