public bool Stop() { if (_membershipManager != null) { _membershipManager.StopHeartbeatTasks(); } if (_connectionRestoration != null) { _connectionRestoration.Stop(); } _connectionRestoration = null; IList <Server> keys = null; if (_shardChannels != null) { keys = _shardChannels.Keys.ToList(); } if (keys != null && keys.Count > 0) { foreach (var server in keys) { try { IDualChannel channel = _shardChannels[server]; lock (_shardChannels) { _shardChannels.Remove(server); if (LoggerManager.Instance.ShardLogger != null && LoggerManager.Instance.ShardLogger.IsDebugEnabled) { LoggerManager.Instance.ShardLogger.Debug("Localshard.Stop(): ", server.Address.ToString() + " removed from existing channels."); } } channel.ShouldTryReconnecting = false; channel.Disconnect(); if (LoggerManager.Instance.ShardLogger != null && LoggerManager.Instance.ShardLogger.IsDebugEnabled) { LoggerManager.Instance.ShardLogger.Debug("Localshard.Stop(): ", "Connection of local node " + context.LocalAddress.ToString() + " disconected from node " + channel.PeerAddress.ToString()); } } catch (ChannelException ex) { if (LoggerManager.Instance.ShardLogger != null && LoggerManager.Instance.ShardLogger.IsErrorEnabled) { LoggerManager.Instance.ShardLogger.Error("Error stopping the node " + context.LocalAddress.ToString(), ex.ToString()); } } } } lock (_mutexOnnodeRole) { if (NodeRole != NodeRole.Intermediate) { NodeRole = Common.Configuration.Services.NodeRole.None; } } return(true); }
public IDualChannel GetValidChannel(IDualChannel channel, IDictionary <Server, IDualChannel> existingChannels) { Server server = new Server(channel.PeerAddress, Status.Running); if (!existingChannels.ContainsKey(server) || server.Address.Equals(_context.LocalAddress)) { return(channel); } else { IDualChannel tempChannel = existingChannels[server]; lock (existingChannels) { existingChannels.Remove(server); if (LoggerManager.Instance.ShardLogger != null && LoggerManager.Instance.ShardLogger.IsDebugEnabled) { LoggerManager.Instance.ShardLogger.Debug("ResolveChannelDispute.GetValidChannel(): ", server.Address.ToString() + " removed from existing channels."); } } if (channel != null && channel.ConnectInfo != null && channel.ConnectInfo.Id < tempChannel.ConnectInfo.Id && channel.ConnectInfo.Status != ConnectInfo.ConnectStatus.CONNECT_FIRST_TIME) { channel.ShouldTryReconnecting = false; channel.Disconnect(); if (LoggerManager.Instance.ShardLogger != null && LoggerManager.Instance.ShardLogger.IsDebugEnabled) { LoggerManager.Instance.ShardLogger.Debug("ResolveChannelDispute.GetValidchannel(): if{}", "Connection of local node " + _context.LocalAddress.ToString() + " disconected from node " + channel.PeerAddress.ToString()); } return(tempChannel); } else { tempChannel.ShouldTryReconnecting = false; try { tempChannel.Disconnect(); if (LoggerManager.Instance.ShardLogger != null && LoggerManager.Instance.ShardLogger.IsDebugEnabled) { LoggerManager.Instance.ShardLogger.Debug("ResolveChannelDispute.GetValidchannel(): else{}", "Connection of local node " + _context.LocalAddress.ToString() + " disconected from node " + tempChannel.PeerAddress.ToString()); } } catch (Exception e) { } //Thread.Sleep(1000); return(channel); } } }