示例#1
0
        /// <summary>
        /// Request current status from server node.
        /// </summary>
        /// <param name="friends">other nodes in the cluster, populated by this method</param>
        /// <exception cref="Exception">if status request fails</exception>
        public void Refresh(List <Host> friends)
        {
            if (tendConnection.IsClosed())
            {
                tendConnection = new Connection(address, cluster.connectionTimeout);
            }

            try
            {
                string[] commands = cluster.useServicesAlternate ?
                                    new string[] { "node", "partition-generation", "services-alternate" } :
                new string[] { "node", "partition-generation", "services" };

                Dictionary <string, string> infoMap = Info.Request(tendConnection, commands);
                VerifyNodeName(infoMap);

                if (AddFriends(infoMap, friends))
                {
                    UpdatePartitions(tendConnection, infoMap);
                }
            }
            catch (Exception)
            {
                // Swallow exception if node was closed in another thread.
                if (!tendConnection.IsClosed())
                {
                    tendConnection.Close();
                    throw;
                }
            }
        }
        /// <summary>
        /// Request current status from server node.
        /// </summary>
        public void Refresh(Peers peers)
        {
            if (!active)
            {
                return;
            }

            try
            {
                if (tendConnection.IsClosed())
                {
                    tendConnection = cluster.CreateConnection(host.tlsName, address, cluster.connectionTimeout, null);

                    if (cluster.user != null)
                    {
                        try
                        {
                            AdminCommand command = new AdminCommand(ThreadLocalData.GetBuffer(), 0);
                            command.Authenticate(tendConnection, cluster.user, cluster.password);
                        }
                        catch (Exception)
                        {
                            tendConnection.Close();
                            throw;
                        }
                    }
                }

                if (peers.usePeers)
                {
                    Dictionary <string, string> infoMap = Info.Request(tendConnection, "node", "peers-generation", "partition-generation");
                    VerifyNodeName(infoMap);
                    VerifyPeersGeneration(infoMap, peers);
                    VerifyPartitionGeneration(infoMap);
                }
                else
                {
                    string[] commands = cluster.useServicesAlternate ?
                                        new string[] { "node", "partition-generation", "services-alternate" } :
                    new string[] { "node", "partition-generation", "services" };

                    Dictionary <string, string> infoMap = Info.Request(tendConnection, commands);
                    VerifyNodeName(infoMap);
                    VerifyPartitionGeneration(infoMap);
                    AddFriends(infoMap, peers);
                }
                peers.refreshCount++;
                failures = 0;
            }
            catch (Exception e)
            {
                if (peers.usePeers)
                {
                    peers.genChanged = true;
                }
                RefreshFailed(e);
            }
        }
示例#3
0
        /// <summary>
        /// Request current status from server node.
        /// </summary>
        public void Refresh(Peers peers)
        {
            if (!active)
            {
                return;
            }

            try
            {
                if (tendConnection.IsClosed())
                {
                    tendConnection = CreateConnection(host.tlsName, address, cluster.connectionTimeout, null);

                    if (cluster.user != null)
                    {
                        if (!EnsureLogin())
                        {
                            AdminCommand command = new AdminCommand(ThreadLocalData.GetBuffer(), 0);

                            if (!command.Authenticate(cluster, tendConnection, sessionToken))
                            {
                                // Authentication failed.  Session token probably expired.
                                // Must login again to get new session token.
                                command.Login(cluster, tendConnection, out sessionToken, out sessionExpiration);
                            }
                        }
                    }
                }
                else
                {
                    if (cluster.user != null)
                    {
                        EnsureLogin();
                    }
                }

                string[] commands = cluster.rackAware ? INFO_PERIODIC_REB : INFO_PERIODIC;
                Dictionary <string, string> infoMap = Info.Request(tendConnection, commands);

                VerifyNodeName(infoMap);
                VerifyPeersGeneration(infoMap, peers);
                VerifyPartitionGeneration(infoMap);

                if (cluster.rackAware)
                {
                    VerifyRebalanceGeneration(infoMap);
                }
                peers.refreshCount++;
                failures = 0;
            }
            catch (Exception e)
            {
                peers.genChanged = true;
                RefreshFailed(e);
            }
        }
        /// <summary>
        /// Request current status from server node.
        /// </summary>
        public void Refresh(Peers peers)
        {
            if (!active)
            {
                return;
            }

            try
            {
                if (tendConnection.IsClosed())
                {
                    tendConnection = cluster.CreateConnection(host.tlsName, address, cluster.connectionTimeout);
                }

                if (peers.usePeers)
                {
                    Dictionary <string, string> infoMap = Info.Request(tendConnection, "node", "peers-generation", "partition-generation");
                    VerifyNodeName(infoMap);
                    VerifyPeersGeneration(infoMap, peers);
                    VerifyPartitionGeneration(infoMap);
                }
                else
                {
                    string[] commands = cluster.useServicesAlternate ?
                                        new string[] { "node", "partition-generation", "services-alternate" } :
                    new string[] { "node", "partition-generation", "services" };

                    Dictionary <string, string> infoMap = Info.Request(tendConnection, commands);
                    VerifyNodeName(infoMap);
                    VerifyPartitionGeneration(infoMap);
                    AddFriends(infoMap, peers);
                }
                peers.refreshCount++;
                failures = 0;
            }
            catch (Exception e)
            {
                RefreshFailed(e);
            }
        }