Ejemplo n.º 1
0
 private void DeactivateNode(IRiakNode node)
 {
     lock (node)
     {
         if (!_offlineNodes.Contains(node))
         {
             _loadBalancer.RemoveNode(node);
             node.ReleaseAll().ConfigureAwait(false).GetAwaiter().GetResult();
             _offlineNodes.Enqueue(node);
         }
     }
 }
Ejemplo n.º 2
0
        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);
                }
            }
        }