public void obtainAnswer(ResyncNotification answer) { if (obtainedAnswersFromNodes.putIfAbsent(answer.getFrom(), 0) == null) { report(getLabel(), () -> "ResyncProcessor.obtainAnswer(itemId=" + itemId + "), state: " + answer.getItemState(), DatagramAdapter.VerboseLevel.BASE); resyncingItem.resyncVote(answer.getFrom(), answer.getItemState()); if (answer.getHasEnvironment()) envSources.put(answer.getFrom(), 0); if (resyncingItem.isResyncPollingFinished() && resyncingItem.isCommitFinished()) { report(getLabel(), () -> "ResyncProcessor.obtainAnswer... resync done", DatagramAdapter.VerboseLevel.BASE); resyncer.cancel(true); } } }
/** * Emergency break all processes and remove self. */ private void emergencyBreak() { report(getLabel(), () -> concatReportMessage("item processor for item: ", itemId, " from parcel: ", parcelId, " :: emergencyBreak, state ", processingState, " itemState: ", getState()), DatagramAdapter.VerboseLevel.BASE); boolean doRollback = !processingState.isDone(); processingState = ItemProcessingState.EMERGENCY_BREAK; stopDownloader(); stopPoller(); stopConsensusReceivedChecker(); for(ResyncingItem ri : resyncingItems.values()) { if(!ri.isCommitFinished()) { ri.closeByTimeout(); } } if(doRollback) rollbackChanges(stateWas); else close(); processingState = ItemProcessingState.FINISHED; }