Github user revans2 commented on a diff in the pull request: https://github.com/apache/storm/pull/2433#discussion_r173215759 --- Diff: storm-client/src/jvm/org/apache/storm/daemon/worker/Worker.java --- @@ -392,6 +401,30 @@ public void establishLogSettingCallback() { workerState.stormClusterState.topologyLogConfig(topologyId, this::checkLogConfigChanged); } + /** + * Send a heartbeat to local supervisor first to check if supervisor is ok for heartbeating. + */ + private void heartbeatToMasterIfLocalbeatFail(LSWorkerHeartbeat lsWorkerHeartbeat) { + if (ConfigUtils.isLocalMode(this.conf)) { + return; + } + //in distributed mode, send heartbeat directly to master if local supervisor goes down + SupervisorWorkerHeartbeat workerHeartbeat = new SupervisorWorkerHeartbeat(lsWorkerHeartbeat.get_topology_id(), + lsWorkerHeartbeat.get_executors(), lsWorkerHeartbeat.get_time_secs()); + try (SupervisorClient client = SupervisorClient.getConfiguredClient(conf, Utils.hostname(), supervisorPort)){ + client.getClient().sendSupervisorWorkerHeartbeat(workerHeartbeat); + } catch (Throwable tr1) { + //if any error/exception thrown, report directly to nimbus. + LOG.warn("Exception when send heartbeat to local supervisor", tr1.getMessage()); + try (NimbusClient nimbusClient = NimbusClient.getConfiguredClient(conf)){ + nimbusClient.getClient().sendSupervisorWorkerHeartbeat(workerHeartbeat); + } catch (Throwable tr2) { --- End diff -- Here too on Exception vs Throwable.
---