Ejemplo n.º 1
0
        /// <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.");
        }
Ejemplo n.º 2
0
        /// <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.");
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        /// <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;
        }
Ejemplo n.º 5
0
        /// <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.");
        }
Ejemplo n.º 6
0
        /// <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.");
        }