// constructors protected Cluster(ClusterSettings settings, IClusterableServerFactory serverFactory, IEventSubscriber eventSubscriber) { _settings = Ensure.IsNotNull(settings, nameof(settings)); _serverFactory = Ensure.IsNotNull(serverFactory, nameof(serverFactory)); Ensure.IsNotNull(eventSubscriber, nameof(eventSubscriber)); _state = new InterlockedInt32(State.Initial); _rapidHeartbeatTimerCallbackState = new InterlockedInt32(RapidHeartbeatTimerCallbackState.NotRunning); _clusterId = new ClusterId(); _description = CreateInitialDescription(); _descriptionChangedTaskCompletionSource = new TaskCompletionSource <bool>(); _latencyLimitingServerSelector = new LatencyLimitingServerSelector(settings.LocalThreshold); _rapidHeartbeatTimer = new Timer(RapidHeartbeatTimerCallback, null, Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan); eventSubscriber.TryGetEventHandler(out _descriptionChangedEventHandler); eventSubscriber.TryGetEventHandler(out _selectingServerEventHandler); eventSubscriber.TryGetEventHandler(out _selectedServerEventHandler); eventSubscriber.TryGetEventHandler(out _selectingServerFailedEventHandler); _serverSessionPool = new CoreServerSessionPool(this); ClusterDescription CreateInitialDescription() { #pragma warning disable CS0618 // Type or member is obsolete var connectionModeSwitch = _settings.ConnectionModeSwitch; var clusterConnectionMode = connectionModeSwitch == ConnectionModeSwitch.UseConnectionMode ? _settings.ConnectionMode : default; var directConnection = connectionModeSwitch == ConnectionModeSwitch.UseDirectConnection ? _settings.DirectConnection : default; return(ClusterDescription.CreateInitial(_clusterId, clusterConnectionMode, _settings.ConnectionModeSwitch, directConnection)); #pragma warning restore CS0618 // Type or member is obsolete } }
// constructors public BinaryConnection(ServerId serverId, EndPoint endPoint, ConnectionSettings settings, IStreamFactory streamFactory, IConnectionInitializer connectionInitializer, IEventSubscriber eventSubscriber) { Ensure.IsNotNull(serverId, "serverId"); _endPoint = Ensure.IsNotNull(endPoint, "endPoint"); _settings = Ensure.IsNotNull(settings, "settings"); _streamFactory = Ensure.IsNotNull(streamFactory, "streamFactory"); _connectionInitializer = Ensure.IsNotNull(connectionInitializer, "connectionInitializer"); Ensure.IsNotNull(eventSubscriber, "eventSubscriber"); _backgroundTaskCancellationTokenSource = new CancellationTokenSource(); _backgroundTaskCancellationToken = _backgroundTaskCancellationTokenSource.Token; _connectionId = new ConnectionId(serverId); _receiveCoordinator = new ReceiveCoordinator(); _sendLock = new SemaphoreSlim(1); _state = new InterlockedInt32(State.Initial); eventSubscriber.TryGetEventHandler(out _failedEventHandler); eventSubscriber.TryGetEventHandler(out _closingEventHandler); eventSubscriber.TryGetEventHandler(out _closedEventHandler); eventSubscriber.TryGetEventHandler(out _openingEventHandler); eventSubscriber.TryGetEventHandler(out _openedEventHandler); eventSubscriber.TryGetEventHandler(out _failedOpeningEventHandler); eventSubscriber.TryGetEventHandler(out _receivingMessageEventHandler); eventSubscriber.TryGetEventHandler(out _receivedMessageEventHandler); eventSubscriber.TryGetEventHandler(out _failedReceivingMessageEventHandler); eventSubscriber.TryGetEventHandler(out _sendingMessagesEventHandler); eventSubscriber.TryGetEventHandler(out _sentMessagesEventHandler); eventSubscriber.TryGetEventHandler(out _failedSendingMessagesEvent); }
public ServerMonitor( ServerId serverId, EndPoint endPoint, IConnectionFactory connectionFactory, ServerMonitorSettings serverMonitorSettings, IEventSubscriber eventSubscriber, IRoundTripTimeMonitor roundTripTimeMonitor, ServerApi serverApi) { _monitorCancellationTokenSource = new CancellationTokenSource(); _serverId = Ensure.IsNotNull(serverId, nameof(serverId)); _endPoint = Ensure.IsNotNull(endPoint, nameof(endPoint)); _connectionFactory = Ensure.IsNotNull(connectionFactory, nameof(connectionFactory)); Ensure.IsNotNull(eventSubscriber, nameof(eventSubscriber)); _serverMonitorSettings = Ensure.IsNotNull(serverMonitorSettings, nameof(serverMonitorSettings)); _baseDescription = _currentDescription = new ServerDescription(_serverId, endPoint, reasonChanged: "InitialDescription", heartbeatInterval: serverMonitorSettings.HeartbeatInterval); _roundTripTimeMonitor = Ensure.IsNotNull(roundTripTimeMonitor, nameof(roundTripTimeMonitor)); _state = new InterlockedInt32(State.Initial); eventSubscriber.TryGetEventHandler(out _heartbeatStartedEventHandler); eventSubscriber.TryGetEventHandler(out _heartbeatSucceededEventHandler); eventSubscriber.TryGetEventHandler(out _heartbeatFailedEventHandler); eventSubscriber.TryGetEventHandler(out _sdamInformationEventHandler); _serverApi = serverApi; _heartbeatCancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(_monitorCancellationTokenSource.Token); }
// constructors public ExclusiveConnectionPool( ServerId serverId, EndPoint endPoint, ConnectionPoolSettings settings, IConnectionFactory connectionFactory, IEventSubscriber eventSubscriber) { _serverId = Ensure.IsNotNull(serverId, nameof(serverId)); _endPoint = Ensure.IsNotNull(endPoint, nameof(endPoint)); _settings = Ensure.IsNotNull(settings, nameof(settings)); _connectionFactory = Ensure.IsNotNull(connectionFactory, nameof(connectionFactory)); Ensure.IsNotNull(eventSubscriber, nameof(eventSubscriber)); _connectionHolder = new ListConnectionHolder(eventSubscriber); _poolQueue = new WaitQueue(settings.MaxConnections); _waitQueue = new SemaphoreSlim(settings.WaitQueueSize); _maintenanceCancellationTokenSource = new CancellationTokenSource(); _state = new InterlockedInt32(State.Initial); eventSubscriber.TryGetEventHandler(out _checkingOutConnectionEventHandler); eventSubscriber.TryGetEventHandler(out _checkedOutConnectionEventHandler); eventSubscriber.TryGetEventHandler(out _checkingOutConnectionFailedEventHandler); eventSubscriber.TryGetEventHandler(out _checkingInConnectionEventHandler); eventSubscriber.TryGetEventHandler(out _checkedInConnectionEventHandler); eventSubscriber.TryGetEventHandler(out _addingConnectionEventHandler); eventSubscriber.TryGetEventHandler(out _addedConnectionEventHandler); eventSubscriber.TryGetEventHandler(out _openingEventHandler); eventSubscriber.TryGetEventHandler(out _openedEventHandler); eventSubscriber.TryGetEventHandler(out _closingEventHandler); eventSubscriber.TryGetEventHandler(out _closedEventHandler); eventSubscriber.TryGetEventHandler(out _addingConnectionEventHandler); eventSubscriber.TryGetEventHandler(out _addedConnectionEventHandler); }
// constructors public MultiServerCluster(ClusterSettings settings, IClusterableServerFactory serverFactory, IEventSubscriber eventSubscriber) : base(settings, serverFactory, eventSubscriber) { Ensure.IsGreaterThanZero(settings.EndPoints.Count, "settings.EndPoints.Count"); if (settings.ConnectionMode == ClusterConnectionMode.Standalone) { throw new ArgumentException("ClusterConnectionMode.StandAlone is not supported for a MultiServerCluster."); } if (settings.ConnectionMode == ClusterConnectionMode.Direct) { throw new ArgumentException("ClusterConnectionMode.Direct is not supported for a MultiServerCluster."); } _monitorServersCancellationTokenSource = new CancellationTokenSource(); _serverDescriptionChangedQueue = new AsyncQueue <ServerDescriptionChangedEventArgs>(); _servers = new List <IClusterableServer>(); _state = new InterlockedInt32(State.Initial); _replicaSetName = settings.ReplicaSetName; eventSubscriber.TryGetEventHandler(out _closingEventHandler); eventSubscriber.TryGetEventHandler(out _closedEventHandler); eventSubscriber.TryGetEventHandler(out _openingEventHandler); eventSubscriber.TryGetEventHandler(out _openedEventHandler); eventSubscriber.TryGetEventHandler(out _addingServerEventHandler); eventSubscriber.TryGetEventHandler(out _addedServerEventHandler); eventSubscriber.TryGetEventHandler(out _removingServerEventHandler); eventSubscriber.TryGetEventHandler(out _removedServerEventHandler); eventSubscriber.TryGetEventHandler(out _sdamInformationEventHandler); }
// constructors public BinaryConnection(ServerId serverId, EndPoint endPoint, ConnectionSettings settings, IStreamFactory streamFactory, IConnectionInitializer connectionInitializer, IEventSubscriber eventSubscriber) { Ensure.IsNotNull(serverId, nameof(serverId)); _endPoint = Ensure.IsNotNull(endPoint, nameof(endPoint)); _settings = Ensure.IsNotNull(settings, nameof(settings)); _streamFactory = Ensure.IsNotNull(streamFactory, nameof(streamFactory)); _connectionInitializer = Ensure.IsNotNull(connectionInitializer, nameof(connectionInitializer)); Ensure.IsNotNull(eventSubscriber, nameof(eventSubscriber)); _connectionId = new ConnectionId(serverId); _receiveLock = new SemaphoreSlim(1); _sendLock = new SemaphoreSlim(1); _state = new InterlockedInt32(State.Initial); _commandEventHelper = new CommandEventHelper(eventSubscriber); eventSubscriber.TryGetEventHandler(out _failedEventHandler); eventSubscriber.TryGetEventHandler(out _closingEventHandler); eventSubscriber.TryGetEventHandler(out _closedEventHandler); eventSubscriber.TryGetEventHandler(out _openingEventHandler); eventSubscriber.TryGetEventHandler(out _openedEventHandler); eventSubscriber.TryGetEventHandler(out _failedOpeningEventHandler); eventSubscriber.TryGetEventHandler(out _receivingMessageEventHandler); eventSubscriber.TryGetEventHandler(out _receivedMessageEventHandler); eventSubscriber.TryGetEventHandler(out _failedReceivingMessageEventHandler); eventSubscriber.TryGetEventHandler(out _sendingMessagesEventHandler); eventSubscriber.TryGetEventHandler(out _sentMessagesEventHandler); eventSubscriber.TryGetEventHandler(out _failedSendingMessagesEvent); _compressorSource = new CompressorSource(settings.Compressors); }
// constructor internal SingleServerCluster(ClusterSettings settings, IClusterableServerFactory serverFactory, IClusterListener listener) : base(settings, serverFactory, listener) { Ensure.IsEqualTo(settings.EndPoints.Count, 1, "settings.EndPoints.Count"); _state = new InterlockedInt32(State.Initial); }
// constructors public MultiServerCluster(ClusterSettings settings, IClusterableServerFactory serverFactory, IClusterListener listener) : base(settings, serverFactory, listener) { Ensure.IsGreaterThanZero(settings.EndPoints.Count, "settings.EndPoints.Count"); _monitorServersCancellationTokenSource = new CancellationTokenSource(); _serverDescriptionChangedQueue = new AsyncQueue <ServerDescriptionChangedEventArgs>(); _servers = new List <IClusterableServer>(); _state = new InterlockedInt32(State.Initial); _replicaSetName = settings.ReplicaSetName; }
// constructors protected Cluster(ClusterSettings settings, IClusterableServerFactory serverFactory, IClusterListener listener) { _settings = Ensure.IsNotNull(settings, "settings"); _serverFactory = Ensure.IsNotNull(serverFactory, "serverFactory"); _listener = listener; _state = new InterlockedInt32(State.Initial); _clusterId = new ClusterId(); _description = ClusterDescription.CreateInitial(_clusterId, _settings.ConnectionMode.ToClusterType()); _descriptionChangedTaskCompletionSource = new TaskCompletionSource <bool>(); }
// constructors public ClusterableServer(ServerSettings settings, ClusterId clusterId, EndPoint endPoint, IConnectionPoolFactory connectionPoolFactory, IConnectionFactory hearbeatConnectionFactory, IServerListener listener) { _settings = Ensure.IsNotNull(settings, "settings");; Ensure.IsNotNull(clusterId, "clusterId"); _endPoint = Ensure.IsNotNull(endPoint, "endPoint"); _connectionPoolFactory = Ensure.IsNotNull(connectionPoolFactory, "connectionPoolFactory"); _heartbeatConnectionFactory = Ensure.IsNotNull(hearbeatConnectionFactory, "hearbeatConnectionFactory"); _listener = listener; _serverId = new ServerId(clusterId, endPoint); _baseDescription = _currentDescription = new ServerDescription(_serverId, endPoint); _connectionPool = connectionPoolFactory.CreateConnectionPool(_serverId, endPoint); _state = new InterlockedInt32(State.Initial); }
public ServerMonitor(ServerId serverId, EndPoint endPoint, IConnectionFactory connectionFactory, TimeSpan heartbeatInterval, TimeSpan timeout, IEventSubscriber eventSubscriber) { _serverId = Ensure.IsNotNull(serverId, nameof(serverId)); _endPoint = Ensure.IsNotNull(endPoint, nameof(endPoint)); _connectionFactory = Ensure.IsNotNull(connectionFactory, nameof(connectionFactory)); Ensure.IsNotNull(eventSubscriber, nameof(eventSubscriber)); _baseDescription = _currentDescription = new ServerDescription(_serverId, endPoint, heartbeatInterval: heartbeatInterval); _heartbeatInterval = heartbeatInterval; _timeout = timeout; _state = new InterlockedInt32(State.Initial); eventSubscriber.TryGetEventHandler(out _heartbeatStartedEventHandler); eventSubscriber.TryGetEventHandler(out _heartbeatSucceededEventHandler); eventSubscriber.TryGetEventHandler(out _heartbeatFailedEventHandler); }
public LoadBalancedCluster( ClusterSettings settings, IClusterableServerFactory serverFactory, IEventSubscriber eventSubscriber, IDnsMonitorFactory dnsMonitorFactory) { #pragma warning disable CS0618 // Type or member is obsolete Ensure.That(settings.ConnectionModeSwitch != ConnectionModeSwitch.UseConnectionMode, $"{nameof(ConnectionModeSwitch.UseConnectionMode)} must not be used for a {nameof(LoadBalancedCluster)}."); if (settings.ConnectionModeSwitch == ConnectionModeSwitch.UseDirectConnection) { Ensure.That(!settings.DirectConnection.GetValueOrDefault(), $"DirectConnection mode is not supported for {nameof(LoadBalancedCluster)}."); } #pragma warning restore CS0618 // Type or member is obsolete Ensure.That(settings.LoadBalanced, $"Only Load balanced mode is supported for a {nameof(LoadBalancedCluster)}."); Ensure.IsEqualTo(settings.EndPoints.Count, 1, nameof(settings.EndPoints.Count)); Ensure.IsNull(settings.ReplicaSetName, nameof(settings.ReplicaSetName)); Ensure.That(settings.SrvMaxHosts == 0, "srvMaxHosts cannot be used with load balanced mode."); _clusterClock = new ClusterClock(); _clusterId = new ClusterId(); _dnsMonitorCancellationTokenSource = new CancellationTokenSource(); _dnsMonitorFactory = Ensure.IsNotNull(dnsMonitorFactory, nameof(dnsMonitorFactory)); _settings = Ensure.IsNotNull(settings, nameof(settings)); _serverFactory = Ensure.IsNotNull(serverFactory, nameof(serverFactory)); _serverReadyTaskCompletionSource = new TaskCompletionSource <bool>(); _serverSessionPool = new CoreServerSessionPool(this); _state = new InterlockedInt32(State.Initial); _description = ClusterDescription.CreateInitial( _clusterId, #pragma warning disable CS0618 // Type or member is obsolete ClusterConnectionMode.Automatic, ConnectionModeSwitch.UseConnectionMode, #pragma warning restore CS0618 // Type or member is obsolete null); _eventSubscriber = eventSubscriber; eventSubscriber.TryGetEventHandler(out _closingEventHandler); eventSubscriber.TryGetEventHandler(out _closedEventHandler); eventSubscriber.TryGetEventHandler(out _openingEventHandler); eventSubscriber.TryGetEventHandler(out _openedEventHandler); eventSubscriber.TryGetEventHandler(out _descriptionChangedEventHandler); }
// constructors public BinaryConnection(ServerId serverId, EndPoint endPoint, ConnectionSettings settings, IStreamFactory streamFactory, IConnectionInitializer connectionInitializer, IConnectionListener listener) { Ensure.IsNotNull(serverId, "serverId"); _endPoint = Ensure.IsNotNull(endPoint, "endPoint"); _settings = Ensure.IsNotNull(settings, "settings"); _streamFactory = Ensure.IsNotNull(streamFactory, "streamFactory"); _connectionInitializer = Ensure.IsNotNull(connectionInitializer, "connectionInitializer"); _listener = listener; _backgroundTaskCancellationTokenSource = new CancellationTokenSource(); _connectionId = new ConnectionId(serverId); _inboundDropbox = new AsyncDropbox <int, IByteBuffer>(); _outboundQueue = new AsyncQueue <OutboundQueueEntry>(); _state = new InterlockedInt32(State.Initial); }
// constructor internal SingleServerCluster(ClusterSettings settings, IClusterableServerFactory serverFactory, IEventSubscriber eventSubscriber) : base(settings, serverFactory, eventSubscriber) { Ensure.IsEqualTo(settings.EndPoints.Count, 1, "settings.EndPoints.Count"); _state = new InterlockedInt32(State.Initial); eventSubscriber.TryGetEventHandler(out _closingEventHandler); eventSubscriber.TryGetEventHandler(out _closedEventHandler); eventSubscriber.TryGetEventHandler(out _openingEventHandler); eventSubscriber.TryGetEventHandler(out _openedEventHandler); eventSubscriber.TryGetEventHandler(out _addingServerEventHandler); eventSubscriber.TryGetEventHandler(out _addedServerEventHandler); eventSubscriber.TryGetEventHandler(out _removingServerEventHandler); eventSubscriber.TryGetEventHandler(out _removedServerEventHandler); }
// constructors public MultiServerCluster( ClusterSettings settings, IClusterableServerFactory serverFactory, IEventSubscriber eventSubscriber, IDnsMonitorFactory dnsMonitorFactory = null) : base(settings, serverFactory, eventSubscriber) { Ensure.IsGreaterThanZero(settings.EndPoints.Count, "settings.EndPoints.Count"); #pragma warning disable CS0618 // Type or member is obsolete if (settings.ConnectionModeSwitch == ConnectionModeSwitch.UseDirectConnection) { if (settings.DirectConnection.GetValueOrDefault()) { throw new ArgumentException("DirectConnection is not supported for a MultiServerCluster."); } } else { if (settings.ConnectionMode == ClusterConnectionMode.Standalone) { throw new ArgumentException("ClusterConnectionMode.StandAlone is not supported for a MultiServerCluster."); } if (settings.ConnectionMode == ClusterConnectionMode.Direct) { throw new ArgumentException("ClusterConnectionMode.Direct is not supported for a MultiServerCluster."); } } #pragma warning restore CS0618 // Type or member is obsolete _dnsMonitorFactory = dnsMonitorFactory ?? new DnsMonitorFactory(eventSubscriber); _monitorServersCancellationTokenSource = new CancellationTokenSource(); _servers = new List <IClusterableServer>(); _state = new InterlockedInt32(State.Initial); _replicaSetName = settings.ReplicaSetName; _eventSubscriber = eventSubscriber; eventSubscriber.TryGetEventHandler(out _closingEventHandler); eventSubscriber.TryGetEventHandler(out _closedEventHandler); eventSubscriber.TryGetEventHandler(out _openingEventHandler); eventSubscriber.TryGetEventHandler(out _openedEventHandler); eventSubscriber.TryGetEventHandler(out _addingServerEventHandler); eventSubscriber.TryGetEventHandler(out _addedServerEventHandler); eventSubscriber.TryGetEventHandler(out _removingServerEventHandler); eventSubscriber.TryGetEventHandler(out _removedServerEventHandler); eventSubscriber.TryGetEventHandler(out _sdamInformationEventHandler); }
// constructors public BinaryConnection(ServerId serverId, EndPoint endPoint, ConnectionSettings settings, IStreamFactory streamFactory, IConnectionInitializer connectionInitializer, IConnectionListener listener) { Ensure.IsNotNull(serverId, "serverId"); _endPoint = Ensure.IsNotNull(endPoint, "endPoint"); _settings = Ensure.IsNotNull(settings, "settings"); _streamFactory = Ensure.IsNotNull(streamFactory, "streamFactory"); _connectionInitializer = Ensure.IsNotNull(connectionInitializer, "connectionInitializer"); _listener = listener; _backgroundTaskCancellationTokenSource = new CancellationTokenSource(); _backgroundTaskCancellationToken = _backgroundTaskCancellationTokenSource.Token; _connectionId = new ConnectionId(serverId); _receiveCoordinator = new ReceiveCoordinator(); _sendLock = new SemaphoreSlim(1); _state = new InterlockedInt32(State.Initial); }
// constructor internal SingleServerCluster(ClusterSettings settings, IClusterableServerFactory serverFactory, IEventSubscriber eventSubscriber) : base(settings, serverFactory, eventSubscriber) { Ensure.That(settings.SrvMaxHosts == 0, "srvMaxHosts cannot be used with a single server cluster."); Ensure.IsEqualTo(settings.EndPoints.Count, 1, "settings.EndPoints.Count"); _replicaSetName = settings.ReplicaSetName; // can be null _state = new InterlockedInt32(State.Initial); eventSubscriber.TryGetEventHandler(out _closingEventHandler); eventSubscriber.TryGetEventHandler(out _closedEventHandler); eventSubscriber.TryGetEventHandler(out _openingEventHandler); eventSubscriber.TryGetEventHandler(out _openedEventHandler); eventSubscriber.TryGetEventHandler(out _addingServerEventHandler); eventSubscriber.TryGetEventHandler(out _addedServerEventHandler); eventSubscriber.TryGetEventHandler(out _removingServerEventHandler); eventSubscriber.TryGetEventHandler(out _removedServerEventHandler); }
// constructors protected Cluster(ClusterSettings settings, IClusterableServerFactory serverFactory, IEventSubscriber eventSubscriber) { _settings = Ensure.IsNotNull(settings, "settings"); _serverFactory = Ensure.IsNotNull(serverFactory, "serverFactory"); Ensure.IsNotNull(eventSubscriber, "eventSubscriber"); _state = new InterlockedInt32(State.Initial); _clusterId = new ClusterId(); _description = ClusterDescription.CreateInitial(_clusterId, _settings.ConnectionMode); _descriptionChangedTaskCompletionSource = new TaskCompletionSource <bool>(); _rapidHeartbeatTimer = new Timer(RapidHeartbeatTimerCallback, null, Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan); eventSubscriber.TryGetEventHandler(out _descriptionChangedEventHandler); eventSubscriber.TryGetEventHandler(out _selectingServerEventHandler); eventSubscriber.TryGetEventHandler(out _selectedServerEventHandler); eventSubscriber.TryGetEventHandler(out _selectingServerFailedEventHandler); }
// constructors public ExclusiveConnectionPool( ServerId serverId, EndPoint endPoint, ConnectionPoolSettings settings, IConnectionFactory connectionFactory, IConnectionPoolListener listener) { _serverId = Ensure.IsNotNull(serverId, "serverId"); _endPoint = Ensure.IsNotNull(endPoint, "endPoint"); _settings = Ensure.IsNotNull(settings, "settings"); _connectionFactory = Ensure.IsNotNull(connectionFactory, "connectionFactory"); _listener = listener; _connectionHolder = new ListConnectionHolder(_listener); _poolQueue = new WaitQueue(settings.MaxConnections); _waitQueue = new SemaphoreSlim(settings.WaitQueueSize); _maintenanceCancellationTokenSource = new CancellationTokenSource(); _state = new InterlockedInt32(State.Initial); }
// constructors public MultiServerCluster(ClusterSettings settings, IClusterableServerFactory serverFactory, IClusterListener listener) : base(settings, serverFactory, listener) { Ensure.IsGreaterThanZero(settings.EndPoints.Count, "settings.EndPoints.Count"); if (settings.ConnectionMode == ClusterConnectionMode.Standalone) { throw new ArgumentException("ClusterConnectionMode.StandAlone is not supported for a MultiServerCluster."); } if (settings.ConnectionMode == ClusterConnectionMode.Direct) { throw new ArgumentException("ClusterConnectionMode.Direct is not supported for a MultiServerCluster."); } _monitorServersCancellationTokenSource = new CancellationTokenSource(); _serverDescriptionChangedQueue = new AsyncQueue <ServerDescriptionChangedEventArgs>(); _servers = new List <IClusterableServer>(); _state = new InterlockedInt32(State.Initial); _replicaSetName = settings.ReplicaSetName; }
// constructors protected Cluster(ClusterSettings settings, IClusterableServerFactory serverFactory, IEventSubscriber eventSubscriber) { _settings = Ensure.IsNotNull(settings, nameof(settings)); _serverFactory = Ensure.IsNotNull(serverFactory, nameof(serverFactory)); Ensure.IsNotNull(eventSubscriber, nameof(eventSubscriber)); _state = new InterlockedInt32(State.Initial); _clusterId = new ClusterId(); _description = ClusterDescription.CreateInitial(_clusterId, _settings.ConnectionMode); _descriptionChangedTaskCompletionSource = new TaskCompletionSource <bool>(); _latencyLimitingServerSelector = new LatencyLimitingServerSelector(settings.LocalThreshold); _rapidHeartbeatTimer = new Timer(RapidHeartbeatTimerCallback, null, Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan); eventSubscriber.TryGetEventHandler(out _descriptionChangedEventHandler); eventSubscriber.TryGetEventHandler(out _selectingServerEventHandler); eventSubscriber.TryGetEventHandler(out _selectedServerEventHandler); eventSubscriber.TryGetEventHandler(out _selectingServerFailedEventHandler); _serverSessionPool = new CoreServerSessionPool(this); }
// constructors public Server(ClusterId clusterId, ClusterConnectionMode clusterConnectionMode, ServerSettings settings, EndPoint endPoint, IConnectionPoolFactory connectionPoolFactory, IServerMonitorFactory serverMonitorFactory, IEventSubscriber eventSubscriber) { Ensure.IsNotNull(clusterId, nameof(clusterId)); _clusterConnectionMode = clusterConnectionMode; _settings = Ensure.IsNotNull(settings, nameof(settings)); _endPoint = Ensure.IsNotNull(endPoint, nameof(endPoint)); Ensure.IsNotNull(connectionPoolFactory, nameof(connectionPoolFactory)); Ensure.IsNotNull(serverMonitorFactory, nameof(serverMonitorFactory)); Ensure.IsNotNull(eventSubscriber, nameof(eventSubscriber)); _serverId = new ServerId(clusterId, endPoint); _connectionPool = connectionPoolFactory.CreateConnectionPool(_serverId, endPoint); _state = new InterlockedInt32(State.Initial); _monitor = serverMonitorFactory.Create(_serverId, _endPoint); eventSubscriber.TryGetEventHandler(out _openingEventHandler); eventSubscriber.TryGetEventHandler(out _openedEventHandler); eventSubscriber.TryGetEventHandler(out _closingEventHandler); eventSubscriber.TryGetEventHandler(out _closedEventHandler); eventSubscriber.TryGetEventHandler(out _descriptionChangedEventHandler); }
// constructors public Server( ClusterId clusterId, IClusterClock clusterClock, #pragma warning disable CS0618 // Type or member is obsolete ClusterConnectionMode clusterConnectionMode, ConnectionModeSwitch connectionModeSwitch, #pragma warning restore CS0618 // Type or member is obsolete bool?directConnection, ServerSettings settings, EndPoint endPoint, IConnectionPoolFactory connectionPoolFactory, IEventSubscriber eventSubscriber, ServerApi serverApi) { ClusterConnectionModeHelper.EnsureConnectionModeValuesAreValid(clusterConnectionMode, connectionModeSwitch, directConnection); _clusterClock = Ensure.IsNotNull(clusterClock, nameof(clusterClock)); _clusterConnectionMode = clusterConnectionMode; _connectionModeSwitch = connectionModeSwitch; _directConnection = directConnection; _settings = Ensure.IsNotNull(settings, nameof(settings)); _endPoint = Ensure.IsNotNull(endPoint, nameof(endPoint)); Ensure.IsNotNull(eventSubscriber, nameof(eventSubscriber)); _serverId = new ServerId(clusterId, endPoint); _connectionPool = Ensure.IsNotNull(connectionPoolFactory, nameof(connectionPoolFactory)).CreateConnectionPool(_serverId, endPoint); _state = new InterlockedInt32(State.Initial); _serverApi = serverApi; _outstandingOperationsCount = 0; eventSubscriber.TryGetEventHandler(out _openingEventHandler); eventSubscriber.TryGetEventHandler(out _openedEventHandler); eventSubscriber.TryGetEventHandler(out _closingEventHandler); eventSubscriber.TryGetEventHandler(out _closedEventHandler); eventSubscriber.TryGetEventHandler(out _descriptionChangedEventHandler); }
// constructors public ClusterableServer(ClusterId clusterId, ClusterConnectionMode clusterConnectionMode, ServerSettings settings, EndPoint endPoint, IConnectionPoolFactory connectionPoolFactory, IConnectionFactory heartbeatConnectionFactory, IEventSubscriber eventSubscriber) { Ensure.IsNotNull(clusterId, nameof(clusterId)); _clusterConnectionMode = clusterConnectionMode; _settings = Ensure.IsNotNull(settings, nameof(settings));; _endPoint = Ensure.IsNotNull(endPoint, nameof(endPoint)); Ensure.IsNotNull(connectionPoolFactory, nameof(connectionPoolFactory)); _heartbeatConnectionFactory = Ensure.IsNotNull(heartbeatConnectionFactory, nameof(heartbeatConnectionFactory)); Ensure.IsNotNull(eventSubscriber, nameof(eventSubscriber)); _serverId = new ServerId(clusterId, endPoint); _baseDescription = _currentDescription = new ServerDescription(_serverId, endPoint); _connectionPool = connectionPoolFactory.CreateConnectionPool(_serverId, endPoint); _state = new InterlockedInt32(State.Initial); eventSubscriber.TryGetEventHandler(out _openingEventHandler); eventSubscriber.TryGetEventHandler(out _openedEventHandler); eventSubscriber.TryGetEventHandler(out _closingEventHandler); eventSubscriber.TryGetEventHandler(out _closedEventHandler); eventSubscriber.TryGetEventHandler(out _heartbeatStartedEventHandler); eventSubscriber.TryGetEventHandler(out _heartbeatSucceededEventHandler); eventSubscriber.TryGetEventHandler(out _heartbeatFailedEventHandler); eventSubscriber.TryGetEventHandler(out _descriptionChangedEventHandler); }