예제 #1
0
        public async Task StopAsync(ExitType exitType)
        {
            if (_logger.IsInfo) _logger.Info("Shutting down...");
            _runnerCancellation.Cancel();

            if (_logger.IsInfo) _logger.Info("Stopping rlpx peer...");
            var rlpxPeerTask = _rlpxPeer?.Shutdown() ?? Task.CompletedTask;

            if (_logger.IsInfo) _logger.Info("Stopping peer manager...");
            var peerManagerTask = _peerManager?.StopAsync(exitType) ?? Task.CompletedTask;

            if (_logger.IsInfo) _logger.Info("Stopping sync manager...");
            var syncManagerTask = _syncManager?.StopAsync() ?? Task.CompletedTask;

            if (_logger.IsInfo) _logger.Info("Stopping block producer...");
            var blockProducerTask = _blockProducer?.StopAsync() ?? Task.CompletedTask;
            
            if (_logger.IsInfo) _logger.Info("Stopping blockchain processor...");
            var blockchainProcessorTask = (_blockchainProcessor?.StopAsync() ?? Task.CompletedTask);

            if (_logger.IsInfo) _logger.Info("Stopping discovery app...");
            var discoveryStopTask = _discoveryApp?.StopAsync() ?? Task.CompletedTask;

            await Task.WhenAll(discoveryStopTask, rlpxPeerTask, peerManagerTask, syncManagerTask, blockchainProcessorTask, blockProducerTask);

            if (_logger.IsInfo) _logger.Info("Closing DBs...");
            _dbProvider.Dispose();
            if (_logger.IsInfo) _logger.Info("Ethereum shutdown complete... please wait for all components to close");
        }
    public async Task StopAsync()
    {
        await _eth2BlockProducer.StopAsync();

        if (_poSSwitcher.HasEverReachedTerminalBlock() && HasPreMergeProducer)
        {
            await _preMergeProducer !.StopAsync();
        }
    }
예제 #3
0
        private async Task AssertIsProducingBlocks(IBlockProducer blockProducer)
        {
            Assert.AreEqual(false, blockProducer.IsProducingBlocks(null));
            blockProducer.Start();
            Assert.AreEqual(true, blockProducer.IsProducingBlocks(null));
            Thread.Sleep(5000);
            Assert.AreEqual(false, blockProducer.IsProducingBlocks(1));
            Assert.AreEqual(true, blockProducer.IsProducingBlocks(1000));
            Assert.AreEqual(true, blockProducer.IsProducingBlocks(null));
            await blockProducer.StopAsync();

            Assert.AreEqual(false, blockProducer.IsProducingBlocks(null));
        }
        public Task StopAsync()
        {
            _blockProductionTrigger.TriggerBlockProduction -= OnBlockProduction;

            IList <Task> stopTasks = new List <Task>();

            for (int index = 0; index < _blockProducers.Length; index++)
            {
                IBlockProducer blockProducer = _blockProducers[index].BlockProducer;
                stopTasks.Add(blockProducer.StopAsync());
            }

            return(Task.WhenAll(stopTasks));
        }
예제 #5
0
        public async Task StopAsync()
        {
            if (_logger.IsInfo)
            {
                _logger.Info("Shutting down...");
            }
            _runnerCancellation.Cancel();

            if (_logger.IsInfo)
            {
                _logger.Info("Stopping rlpx peer...");
            }
            var rlpxPeerTask = _rlpxPeer?.Shutdown() ?? Task.CompletedTask;

            if (_logger.IsInfo)
            {
                _logger.Info("Stopping sesison monitor...");
            }
            _sessionMonitor?.Stop();

            if (_logger.IsInfo)
            {
                _logger.Info("Stopping peer manager...");
            }
            var peerManagerTask = _peerManager?.StopAsync() ?? Task.CompletedTask;

            if (_logger.IsInfo)
            {
                _logger.Info("Stopping synchronizer...");
            }
            var synchronizerTask = (_synchronizer?.StopAsync() ?? Task.CompletedTask)
                                   .ContinueWith(t => _synchronizer?.Dispose());

            if (_logger.IsInfo)
            {
                _logger.Info("Stopping sync peer pool...");
            }
            var peerPoolTask = _syncPeerPool?.StopAsync() ?? Task.CompletedTask;

            if (_logger.IsInfo)
            {
                _logger.Info("Stopping block producer...");
            }
            var blockProducerTask = _blockProducer?.StopAsync() ?? Task.CompletedTask;

            if (_logger.IsInfo)
            {
                _logger.Info("Stopping blockchain processor...");
            }
            var blockchainProcessorTask = (_blockchainProcessor?.StopAsync() ?? Task.CompletedTask);

            if (_logger.IsInfo)
            {
                _logger.Info("Stopping discovery app...");
            }
            var discoveryStopTask = _discoveryApp?.StopAsync() ?? Task.CompletedTask;

            await Task.WhenAll(discoveryStopTask, rlpxPeerTask, peerManagerTask, synchronizerTask, peerPoolTask, blockchainProcessorTask, blockProducerTask);

            if (_logger.IsInfo)
            {
                _logger.Info("Closing DBs...");
            }
            _dbProvider.Dispose();
            if (_logger.IsInfo)
            {
                _logger.Info("Ethereum shutdown complete... please wait for all components to close");
            }
        }
 private void OnSwitchHappened(object?sender, EventArgs e)
 {
     _preMergeProducer?.StopAsync();
 }