private void NodeMonitor() { while (!_disposing) { var deadNodes = new List <IRiakNode>(); IRiakNode node = null; while (_offlineNodes.TryDequeue(out node) && !_disposing) { var result = node.UseConnection(c => c.PbcWriteRead(MessageCode.PingReq, MessageCode.PingResp)); if (result.IsSuccess) { _loadBalancer.AddNode(node); } else { deadNodes.Add(node); } } if (!_disposing) { foreach (var deadNode in deadNodes) { _offlineNodes.Enqueue(deadNode); } Thread.Sleep(_nodePollTime); } } }
private void NodeMonitor() { while (true) { ct.ThrowIfCancellationRequested(); var deadNodes = new List <IRiakNode>(); IRiakNode node = null; while (offlineNodes.TryDequeue(out node)) { ct.ThrowIfCancellationRequested(); var result = node.UseConnection(c => c.PbcWriteRead(MessageCode.RpbPingReq, MessageCode.RpbPingResp)); ct.ThrowIfCancellationRequested(); if (result.IsSuccess) { loadBalancer.AddNode(node); } else { deadNodes.Add(node); } } foreach (var deadNode in deadNodes) { ct.ThrowIfCancellationRequested(); offlineNodes.Enqueue(deadNode); } ct.WaitHandle.WaitOne(nodePollTime); } }