private void DeactivateNode(IRiakNode node) { lock (node) { if (!_offlineNodes.Contains(node)) { _loadBalancer.RemoveNode(node); node.ReleaseAll().ConfigureAwait(false).GetAwaiter().GetResult(); _offlineNodes.Enqueue(node); } } }
private async void NodeMonitor() { while (!_disposing) { var deadNodes = new List <IRiakNode>(); IRiakNode node = null; while (_offlineNodes.TryDequeue(out node) && !_disposing) { try { var nodeToMonitor = node; await _riakConnection.PbcWriteRead(new RiakNodeEndpoint(nodeToMonitor), MessageCode.PingReq, MessageCode.PingResp).ConfigureAwait(false); _loadBalancer.AddNode(node); } catch (Exception) { try { node.ReleaseAll().ConfigureAwait(false).GetAwaiter().GetResult(); } finally { deadNodes.Add(node); } } } if (!_disposing) { foreach (var deadNode in deadNodes) { _offlineNodes.Enqueue(deadNode); } Thread.Sleep(_nodePollTime); } } }