private async Task LoadNodesFromSource() { if (_disposed > 0) { return; } try { var sourceNodes = await Discovery.GetNodes(DeploymentIdentifier).ConfigureAwait(false); if (sourceNodes == _lastDiscoveredNodes) { return; } lock (_lock) { if (sourceNodes == null) { _isUndeployed = true; StopMonitoringNodes(_nodesMonitoringState); _nodesMonitoringState = new NodeMonitoringState[0]; } else { var newNodes = sourceNodes.Select(CreateState).ToArray(); var oldNodes = _nodesMonitoringState; var nodesToRemove = oldNodes.Except(newNodes).ToArray(); _nodesMonitoringState = oldNodes.Except(nodesToRemove).Union(newNodes).ToArray(); StopMonitoringNodes(nodesToRemove); _isUndeployed = false; } SetReachableNodes(); _lastDiscoveredNodes = sourceNodes; } } catch (Exception ex) { LastException = ex; } }
private async Task LoadNodesFromSource() { if (_disposed > 0) { return; } try { var sourceNodes = await Discovery.GetNodes(DeploymentIdentifier).ConfigureAwait(false); if (sourceNodes == _lastDiscoveredNodes) { return; } lock (_lock) { if (sourceNodes == null) { _isUndeployed = true; StopMonitoringNodes(_nodesMonitoringState); _nodesMonitoringState = new NodeMonitoringState[0]; } else { var newNodes = sourceNodes.Select(CreateState).ToArray(); var oldNodes = _nodesMonitoringState; var nodesToRemove = oldNodes.Except(newNodes).ToArray(); _nodesMonitoringState = oldNodes.Except(nodesToRemove).Union(newNodes).ToArray(); StopMonitoringNodes(nodesToRemove); _isUndeployed = false; foreach (NodeMonitoringState monitoringState in nodesToRemove) { Node node = monitoringState.Node; Log.Info(logDelegate => { Uri serviceUriHttp = new Uri($"http://{node.Hostname}:{node.Port}"); Uri serviceUriHttps = new Uri($"https://{node.Hostname}:{node.Port}"); ServicePoint servicePointHttp = ServicePointManager.FindServicePoint(serviceUriHttp); ServicePoint servicePointHttps = ServicePointManager.FindServicePoint(serviceUriHttps); logDelegate.Invoke("Node was removed. See tags for details.", unencryptedTags: new { nodeName = $"{node.Hostname}:{node.Port}", openedConnectionsTotal = servicePointHttp.CurrentConnections + servicePointHttps.CurrentConnections }); }); } } SetReachableNodes(); _lastDiscoveredNodes = sourceNodes; } } catch (Exception ex) { LastException = ex; } }