private synchronized void startSynchronizeFollowerCallbacks(Collection<CallbackRecord> callbackRecords, int nodesCount) { ZonedDateTime expiresAt = ZonedDateTime.now().plusSeconds(20); callbackRecords.forEach(r -> { if (!callbacksToSynchronize.containsKey(r.getId())) { // init record to synchronization r.setExpiresAt(expiresAt); r.setConsensusAndLimit(nodesCount); callbacksToSynchronize.put(r.getId(), r); // request callback state from all nodes network.broadcast(myInfo, new CallbackNotification(myInfo, r.getId(), CallbackNotification.CallbackNotificationType.GET_STATE, null)); } }); executorService.schedule(() -> endSynchronizeFollowerCallbacks(), 20, TimeUnit.SECONDS); }
if (isItemSended) { // callback has already been called and received packed item network.broadcast(myInfo, new CallbackNotification(myInfo, id, CallbackNotification.CallbackNotificationType.NOT_RESPONDING, null)); network.broadcast(myInfo, new CallbackNotification(myInfo, id, CallbackNotification.CallbackNotificationType.COMPLETED, signature)); complete();
network.deliver(notification.getFrom(), new CallbackNotification(myInfo, notification.getId(), CallbackNotification.CallbackNotificationType.RETURN_STATE, null, ledger.getFollowerCallbackStateById(notification.getId())));