use of com.alibaba.jstorm.transactional.BatchGroupId in project jstorm by alibaba.
the class TransactionBolt method initState.
protected void initState(TransactionState state) {
BatchGroupId batchGroupId = state.getCurrBatchGroupId();
lastSuccessfulBatch.put(batchGroupId.groupId, batchGroupId.batchId);
LOG.info("Init: state={}, lastSuccessfulBatch={}", state, lastSuccessfulBatch);
}
use of com.alibaba.jstorm.transactional.BatchGroupId in project jstorm by alibaba.
the class TransactionBolt method rollback.
protected void rollback(TransactionState state) {
BatchGroupId batchGroupId = state.getCurrBatchGroupId();
LOG.info("Start to rollback to batch-{}, currentBatchStateus={}", batchGroupId, currentBatchStatusInfo());
lastSuccessfulBatch.put(batchGroupId.groupId, batchGroupId.batchId);
cleanupBuffer(state.getCurrBatchGroupId().groupId);
}
use of com.alibaba.jstorm.transactional.BatchGroupId in project jstorm by alibaba.
the class TransactionBolt method finishCurrentBatch.
private void finishCurrentBatch() {
BatchGroupId batchGroupId = currentBatchTracker.bactchGroupId;
if (batchGroupId.batchId == TransactionCommon.INIT_BATCH_ID) {
LOG.info("Received all init events");
cleanupBuffer(batchGroupId.groupId);
boltStatus = State.ACTIVE;
} else {
commit();
lastSuccessfulBatch.put(batchGroupId.groupId, batchGroupId.batchId);
}
if (downstreamTasks.size() == 0) {
ackBatch(batchGroupId);
} else {
outputCollector.flushBarrier();
}
removeProcessingBatch(batchGroupId);
currentBatchTracker = null;
LOG.debug("finishCurrentBatch, {}", currentBatchStatusInfo());
List<Tuple> goingtoProcessBatch = batchCache.getNextPendingTuples(lastSuccessfulBatch);
if (goingtoProcessBatch != null) {
BatchGroupId nextGroupBatchId = new BatchGroupId(batchGroupId.groupId, batchGroupId.batchId + 1);
//LOG.info("Get pending batch-{} which is going to be processed. size={}", nextGroupBatchId, goingtoProcessBatch.size());
processBatch(nextGroupBatchId, goingtoProcessBatch);
}
}
use of com.alibaba.jstorm.transactional.BatchGroupId in project jstorm by alibaba.
the class TransactionSpout method processCtrlEvent.
protected void processCtrlEvent(TopoMasterCtrlEvent event) {
//LOG.info("Received contronl event, {}", event.toString());
TransactionState state = null;
switch(event.getEventType()) {
case transactionInitState:
if (spoutStatus.equals(State.INIT)) {
if (event.hasEventValue()) {
state = (TransactionState) event.getEventValue().get(0);
}
initSpoutState(state);
spoutStatus = State.ACTIVE;
}
break;
case transactionRollback:
spoutStatus = State.ROLLBACK;
if (event.hasEventValue()) {
state = (TransactionState) event.getEventValue().get(0);
}
rollbackSpoutState(state);
LOG.info("Rollback to state, {}", state);
JStormUtils.sleepMs(5000);
outputCollector.flushInitBarrier();
break;
case transactionCommit:
BatchGroupId successBatchGroupId = (BatchGroupId) event.getEventValue().get(0);
removeSuccessBatch(successBatchGroupId.batchId);
//LOG.info("Commit Acked, current pending batchs: {}", committingBatches);
break;
case transactionStop:
spoutStatus = State.INACTIVE;
LOG.info("Stop, current pending batches: {}", committingBatches);
break;
case transactionStart:
spoutStatus = State.ACTIVE;
LOG.info("Start, current pending batches: {}", committingBatches);
break;
default:
LOG.warn("Received unsupported event, {}", event.toString());
break;
}
}
use of com.alibaba.jstorm.transactional.BatchGroupId 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