private void stopConsensusReceivedChecker() { if(consensusReceivedChecker != null) consensusReceivedChecker.cancel(true); }
private void stopPoller() { if (poller != null) poller.cancel(true); }
private void stopResync() { resyncer.cancel(true); resyncProcessors.remove(itemId); }
public void pulseResync() { report(getLabel(), ()->"ResyncProcessor.pulseResync(itemId="+itemId+ "), time="+Duration.between(resyncExpiresAt.minus(config.getMaxResyncTime()), Instant.now()).toMillis()+"ms", DatagramAdapter.VerboseLevel.BASE); if (resyncExpiresAt.isBefore(Instant.now())) { report(getLabel(), ()->"ResyncProcessor.pulseResync(itemId="+itemId+") expired, cancel", DatagramAdapter.VerboseLevel.BASE); resyncer.cancel(true); } else { try { ResyncNotification notification = new ResyncNotification(myInfo, itemId, true); network.eachNode(node -> { if (!obtainedAnswersFromNodes.contains(node)) network.deliver(node, notification); }); } catch (IOException e) { report(getLabel(), ()->"error: unable to send ResyncNotification, exception: " + e, DatagramAdapter.VerboseLevel.BASE); } } }
@Test public void testCancel() throws Exception { executorService.submit(() -> System.out.println("warm up executor")); Thread.sleep(1000); List<Integer> periods = Arrays.asList(100,100,100,200); time = System.nanoTime(); AtomicInteger iTick = new AtomicInteger(0); AtomicInteger errorsCount = new AtomicInteger(0); RunnableWithDynamicPeriod r = new RunnableWithDynamicPeriod(() -> { long t1 = System.nanoTime(); long dt = (t1 - time) / 1000000; time = t1; long dt0 = periods.get(Math.min(iTick.get(), periods.size()-1)); System.out.println("tick: " + dt + "ms, must be " + dt0 + "ms"); if (!(Math.abs(dt0 - dt) < dt0/10)) errorsCount.incrementAndGet(); iTick.incrementAndGet(); }, periods, executorService); r.run(); System.out.println("wait for ticks"); Thread.sleep(2000); AtomicInteger ticksCount = new AtomicInteger(iTick.get()); System.out.println("now cancel"); r.cancel(true); Thread.sleep(2000); Assert.assertEquals(ticksCount.get(), iTick.get()); }
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); } } }
private void onFinishResync(ResyncingItem ri) { report(getLabel(), ()->"ResyncProcessor.onFinishResync(itemId="+itemId+")", DatagramAdapter.VerboseLevel.BASE); //DELETE ENVIRONMENTS FOR REVOKED ITEMS if(resyncingItem.getResyncingState() == ResyncingItemProcessingState.COMMIT_SUCCESSFUL) { if(resyncingItem.getItemState() == ItemState.REVOKED) { removeEnvironment(itemId); } } //SAVE ENVIRONMENTS FOR APPROVED ITEMS if (saveResyncedEnvironents()) { resyncEnded(); } else { resyncer.cancel(true); } }
@Test public void testPeriods() throws Exception { executorService.submit(() -> System.out.println("warm up executor")); Thread.sleep(1000); List<Integer> periods = Arrays.asList(0,100,100,100,200,400,800,1600,3200,6000); time = System.nanoTime(); AtomicInteger iTick = new AtomicInteger(0); AtomicInteger errorsCount = new AtomicInteger(0); RunnableWithDynamicPeriod r = new RunnableWithDynamicPeriod(() -> { long t1 = System.nanoTime(); long dt = (t1 - time) / 1000000; time = t1; long dt0 = periods.get(Math.min(iTick.get(), periods.size()-1)); System.out.println("tick: " + dt + "ms, must be " + dt0 + "ms"); if (!(Math.abs(dt0 - dt) < 5+dt0/10)) errorsCount.incrementAndGet(); iTick.incrementAndGet(); }, periods, executorService); r.run(); Thread.sleep(30000); System.out.println("executorService.size: " + executorService.getQueue().size()); Assert.assertEquals(1, executorService.getQueue().size()); r.cancel(true); Thread.sleep(1000); System.out.println("executorService.size: " + executorService.getQueue().size()); Assert.assertEquals(0, executorService.getQueue().size()); Assert.assertEquals(0, errorsCount.get()); }
System.out.println("executorService.size: " + executorService.getQueue().size()); Assert.assertEquals(1, executorService.getQueue().size()); r.cancel(true); while (executorService.getQueue().size() > 0) { Thread.sleep(1000);