/** * Decide if the heartbeats is recovered for a master, will wait for all the assignments nodes to recovery, every node will take care * its node heartbeats reporting. * * @return true if all nodes have reported heartbeats or exceeds max-time-out */ private boolean isHeartbeatsRecovered() { if (heartbeatsReadyFlag.get()) { return true; } Set<String> allNodes = new HashSet<>(); for (Map.Entry<String, Assignment> assignmentEntry : stormClusterState.assignmentsInfo().entrySet()) { allNodes.addAll(assignmentEntry.getValue().get_node_host().keySet()); } boolean isReady = heartbeatsRecoveryStrategy.isReady(allNodes); if (isReady) { heartbeatsReadyFlag.getAndSet(true); } return isReady; }
private void updateCachedHeartbeatsFromSupervisor(SupervisorWorkerHeartbeats workerHeartbeats) { workerHeartbeats.get_worker_heartbeats().forEach(this::updateCachedHeartbeatsFromWorker); if (!heartbeatsReadyFlag.get() && !Strings.isNullOrEmpty(workerHeartbeats.get_supervisor_id())) { heartbeatsRecoveryStrategy.reportNodeId(workerHeartbeats.get_supervisor_id()); } }
/** * Get instance of {@link IWorkerHeartbeatsRecoveryStrategy} with conf. * @param conf strategy config * @return an instance of {@link IWorkerHeartbeatsRecoveryStrategy} */ public static IWorkerHeartbeatsRecoveryStrategy getStrategy(Map<String, Object> conf) { IWorkerHeartbeatsRecoveryStrategy strategy; if (conf.get(DaemonConfig.NIMBUS_WORKER_HEARTBEATS_RECOVERY_STRATEGY_CLASS) != null) { Object targetObj = ReflectionUtils.newInstance((String) conf.get(DaemonConfig.NIMBUS_WORKER_HEARTBEATS_RECOVERY_STRATEGY_CLASS)); Preconditions.checkState(targetObj instanceof IWorkerHeartbeatsRecoveryStrategy, "{} must implements IWorkerHeartbeatsRecoveryStrategy", DaemonConfig.NIMBUS_WORKER_HEARTBEATS_RECOVERY_STRATEGY_CLASS); strategy = ((IWorkerHeartbeatsRecoveryStrategy) targetObj); } else { strategy = new TimeOutWorkerHeartbeatsRecoveryStrategy(); } strategy.prepare(conf); return strategy; }