/// <inheritdoc /> public async Task ShutdownAsync(int timeoutMs = Timeout.Infinite) { if (!_initialized) { return; } var sessions = _connectedSessions.ClearAndGet(); try { var task = Task.Run(() => { foreach (var s in sessions) { s.Dispose(); } }).WaitToCompleteAsync(timeoutMs); await task.ConfigureAwait(false); } catch (AggregateException ex) { if (ex.InnerExceptions.Count == 1) { throw ex.InnerExceptions[0]; } throw; } _metadata.ShutDown(timeoutMs); _controlConnection.Dispose(); Configuration.Timer.Dispose(); Configuration.Policies.SpeculativeExecutionPolicy.Dispose(); _logger.Info("Cluster [" + _metadata.ClusterName + "] has been shut down."); }
/// <summary> /// Shutdown this cluster instance. This closes all connections from all the /// sessions of this <code>* Cluster</code> instance and reclaim all resources /// used by it. <p> This method has no effect if the cluster was already shutdown.</p> /// </summary> public void Shutdown(int timeoutMs = Timeout.Infinite) { foreach (var kv in _connectedSessions) { Session ses; if (_connectedSessions.TryRemove(kv.Key, out ses)) { ses.WaitForAllPendingActions(timeoutMs); ses.InternalDispose(); } } _metadata.ShutDown(timeoutMs); _logger.Info("Cluster [" + _metadata.ClusterName + "] has been shut down."); }
/// <inheritdoc /> async Task <bool> IInternalCluster.OnShutdownAsync(int timeoutMs) { if (!_initialized) { return(false); } var sessions = _connectedSessions.ClearAndGet(); try { var task = Task.Run(() => { foreach (var s in sessions) { s.Dispose(); } }).WaitToCompleteAsync(timeoutMs); await task.ConfigureAwait(false); } catch (AggregateException ex) { if (ex.InnerExceptions.Count == 1) { throw ex.InnerExceptions[0]; } throw; } _metadata.ShutDown(timeoutMs); _protocolEventDebouncer.Dispose(); _controlConnection.Dispose(); Configuration.Timer.Dispose(); // Dispose policies var speculativeExecutionPolicies = new HashSet <ISpeculativeExecutionPolicy>(new ReferenceEqualityComparer <ISpeculativeExecutionPolicy>()); foreach (var options in Configuration.RequestOptions.Values) { speculativeExecutionPolicies.Add(options.SpeculativeExecutionPolicy); } speculativeExecutionPolicies.Add(Configuration.Policies.SpeculativeExecutionPolicy); foreach (var sep in speculativeExecutionPolicies) { sep.Dispose(); } return(true); }
/// <inheritdoc /> public async Task ShutdownAsync(int timeoutMs = Timeout.Infinite) { if (!_initialized) { return; } var sessions = _connectedSessions.ClearAndGet(); try { var tasks = new List <Task>(); foreach (var s in sessions) { tasks.Add(s.ShutdownAsync()); } await Task.WhenAll(tasks).WaitToCompleteAsync(timeoutMs).ConfigureAwait(false); } catch (AggregateException ex) { if (ex.InnerExceptions.Count == 1) { throw ex.InnerExceptions[0]; } throw; } _metadata.ShutDown(timeoutMs); _controlConnection.Dispose(); await _protocolEventDebouncer.ShutdownAsync().ConfigureAwait(false); Configuration.Timer.Dispose(); // Dispose policies var speculativeExecutionPolicies = new HashSet <ISpeculativeExecutionPolicy>(new ReferenceEqualityComparer <ISpeculativeExecutionPolicy>()); foreach (var options in Configuration.RequestOptions.Values) { speculativeExecutionPolicies.Add(options.SpeculativeExecutionPolicy); } foreach (var sep in speculativeExecutionPolicies) { sep.Dispose(); } Cluster.Logger.Info("Cluster [" + Metadata.ClusterName + "] has been shut down."); return; }
/// <inheritdoc /> public void Shutdown(int timeoutMs = Timeout.Infinite) { if (!_initialized) { return; } Session session; while (_connectedSessions.TryTake(out session)) { session.Dispose(); } _metadata.ShutDown(timeoutMs); _controlConnection.Dispose(); _logger.Info("Cluster [" + _metadata.ClusterName + "] has been shut down."); }
/// <inheritdoc /> public void Shutdown(int timeoutMs = Timeout.Infinite) { if (!_initialized) { return; } Session session; while (_connectedSessions.TryTake(out session)) { session.WaitForAllPendingActions(timeoutMs); session.Dispose(); } _metadata.ShutDown(timeoutMs); _controlConnection.Dispose(); Configuration.Timer.Dispose(); Configuration.Policies.SpeculativeExecutionPolicy.Dispose(); _logger.Info("Cluster [" + _metadata.ClusterName + "] has been shut down."); }