public void startResync() { report(getLabel(), ()->"ResyncProcessor.startResync(itemId="+itemId+")", DatagramAdapter.VerboseLevel.BASE); resyncExpiresAt = Instant.now().plus(config.getMaxResyncTime()); executorService.schedule(()->resyncEnded(), config.getMaxResyncTime().getSeconds(), TimeUnit.SECONDS); resyncingItem = new ResyncingItem(itemId, ledger.getRecord(itemId)); resyncingItem.finishEvent.addConsumer((ri)->onFinishResync(ri)); List<Integer> periodsMillis = config.getResyncTime(); obtainedAnswersFromNodes.clear(); voteItself(); resyncer = new RunnableWithDynamicPeriod(() -> pulseResync(), periodsMillis, executorService); resyncer.run(); }
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); } } }
contract.traceErrors(); Duration wasDuration = config.getMaxResyncTime(); config.setMaxResyncTime(Duration.ofMillis(2000));
contract.traceErrors(); Duration wasDuration = config.getMaxResyncTime(); config.setMaxResyncTime(Duration.ofMillis(2000));
addToAllLedgers(c, ItemState.APPROVED); Duration wasDuration = config.getMaxResyncTime(); config.setMaxResyncTime(Duration.ofMillis(2000));
addToAllLedgers(c, ItemState.APPROVED); Duration wasDuration = config.getMaxResyncTime(); config.setMaxResyncTime(Duration.ofMillis(2000));
@Test(timeout = 15000) public void resyncWithTimeout() throws Exception { Contract c = new Contract(TestKeys.privateKey(0)); c.seal(); addToAllLedgers(c, ItemState.APPROVED); Duration wasDuration = config.getMaxResyncTime(); config.setMaxResyncTime(Duration.ofMillis(2000)); for (int i = 0; i < NODES/2; i++) { ((TestEmulatedNetwork)network).switchOffNodeTestMode(nodes.get(NODES-i-1)); } node.getLedger().getRecord(c.getId()).destroy(); assertEquals(ItemState.UNDEFINED, node.checkItem(c.getId()).state); node.resync(c.getId()); assertEquals(ItemState.PENDING, node.checkItem(c.getId()).state); assertEquals(ItemState.UNDEFINED, node.waitItem(c.getId(), 15000).state); config.setMaxResyncTime(wasDuration); ((TestEmulatedNetwork)network).switchOnAllNodesTestMode(); }
assertEquals(config.getMaxElectionsTime(), copyConfig.getMaxElectionsTime()); assertEquals(config.getMaxConsensusReceivedCheckTime(), copyConfig.getMaxConsensusReceivedCheckTime()); assertEquals(config.getMaxResyncTime(), copyConfig.getMaxResyncTime()); assertEquals(config.getMaxCacheAge(), copyConfig.getMaxCacheAge()); assertEquals(config.getMaxNameCacheAge(), copyConfig.getMaxNameCacheAge());