public MergeBlockDownloader( IPoSSwitcher posSwitcher, IBeaconPivot beaconPivot, ISyncFeed <BlocksRequest?>?feed, ISyncPeerPool?syncPeerPool, IBlockTree?blockTree, IBlockValidator?blockValidator, ISealValidator?sealValidator, ISyncReport?syncReport, IReceiptStorage?receiptStorage, ISpecProvider specProvider, IBetterPeerStrategy betterPeerStrategy, IChainLevelHelper chainLevelHelper, ISyncProgressResolver syncProgressResolver, ILogManager logManager) : base(feed, syncPeerPool, blockTree, blockValidator, sealValidator, syncReport, receiptStorage, specProvider, new MergeBlocksSyncPeerAllocationStrategyFactory(posSwitcher, beaconPivot, logManager), betterPeerStrategy, logManager) { _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _chainLevelHelper = chainLevelHelper ?? throw new ArgumentNullException(nameof(chainLevelHelper)); _poSSwitcher = posSwitcher ?? throw new ArgumentNullException(nameof(posSwitcher)); _blockValidator = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator)); _syncReport = syncReport ?? throw new ArgumentNullException(nameof(syncReport)); _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage)); _beaconPivot = beaconPivot; _receiptsRecovery = new ReceiptsRecovery(new EthereumEcdsa(specProvider.ChainId, logManager), specProvider); _syncProgressResolver = syncProgressResolver ?? throw new ArgumentNullException(nameof(syncProgressResolver)); _logger = logManager.GetClassLogger(); }
private void OnSubFeedStateChanged(object sender, EventArgs e) { ISyncFeed <StateSyncBatch> child = (ISyncFeed <StateSyncBatch>)sender; if (child.CurrentState == SyncFeedState.Active) { Activate(); return; } bool areAllFinished = true; foreach (ISyncFeed <T> subFeed in _subFeeds) { if (subFeed.CurrentState != SyncFeedState.Finished) { areAllFinished = false; break; } } if (areAllFinished) { Finish(); } }
private void StartBeamSyncComponents() { // so bad BeamSyncDbProvider beamSyncDbProvider = _dbProvider as BeamSyncDbProvider; ISyncFeed <StateSyncBatch> beamSyncFeed = beamSyncDbProvider.BeamSyncFeed; StateSyncDispatcher dispatcher = new StateSyncDispatcher(beamSyncFeed, _syncPeerPool, new StateSyncAllocationStrategyFactory(), _logManager); dispatcher.Start(_syncCancellation.Token).ContinueWith(t => { if (t.IsFaulted) { if (_logger.IsError) { _logger.Error("Beam sync failed", t.Exception); } } else { if (_logger.IsInfo) { _logger.Info("Beam sync completed."); } } }); }
private void OnSubFeedStateChanged(object?sender, EventArgs e) { ISyncFeed <StateSyncBatch>?child = (ISyncFeed <StateSyncBatch>?)sender; if (child == null) { if (_logger.IsDebug) { _logger.Debug("Sub-feed state changed from a null feed"); } return; } if (child.CurrentState == SyncFeedState.Active) { Activate(); return; } bool areAllFinished = true; foreach (ISyncFeed <T> subFeed in _subFeeds) { if (subFeed.CurrentState != SyncFeedState.Finished) { areAllFinished = false; break; } } if (areAllFinished) { Finish(); } }
public HeadersSyncDispatcher( ISyncFeed <HeadersSyncBatch> syncFeed, ISyncPeerPool syncPeerPool, IPeerAllocationStrategyFactory <FastBlocksBatch> peerAllocationStrategy, ILogManager logManager) : base(syncFeed, syncPeerPool, peerAllocationStrategy, logManager) { }
public ReceiptsSyncDispatcher( ISyncFeed <ReceiptsSyncBatch> syncFeed, ISyncPeerPool syncPeerPool, IPeerAllocationStrategyFactory <ReceiptsSyncBatch> peerAllocationStrategy, ILogManager logManager) : base(syncFeed, syncPeerPool, peerAllocationStrategy, logManager) { }
public BeamSyncDbProvider(ISyncModeSelector syncModeSelector, IDbProvider otherProvider, ISyncConfig syncConfig, ILogManager logManager) { _otherProvider = otherProvider ?? throw new ArgumentNullException(nameof(otherProvider)); _codeDb = new BeamSyncDb(otherProvider.CodeDb.Innermost, otherProvider.BeamStateDb, syncModeSelector, logManager, syncConfig.BeamSyncContextTimeout, syncConfig.BeamSyncPreProcessorTimeout); _stateDb = new BeamSyncDb(otherProvider.StateDb.Innermost, otherProvider.BeamStateDb, syncModeSelector, logManager, syncConfig.BeamSyncContextTimeout, syncConfig.BeamSyncPreProcessorTimeout); BeamSyncFeed = new CompositeStateSyncFeed <StateSyncBatch?>(logManager, _codeDb, _stateDb); StateDb = new StateDb(_stateDb); CodeDb = new StateDb(_codeDb); }
protected SyncDispatcher(ISyncFeed <T> syncFeed, ISyncPeerPool syncPeerPool, IPeerAllocationStrategyFactory <T> peerAllocationStrategy, ILogManager logManager) { Logger = logManager?.GetClassLogger <SyncDispatcher <T> >() ?? throw new ArgumentNullException(nameof(logManager)); Feed = syncFeed ?? throw new ArgumentNullException(nameof(syncFeed)); SyncPeerPool = syncPeerPool ?? throw new ArgumentNullException(nameof(syncPeerPool)); PeerAllocationStrategy = peerAllocationStrategy ?? throw new ArgumentNullException(nameof(peerAllocationStrategy)); syncFeed.StateChanged += SyncFeedOnStateChanged; }
public BeamSyncDbProvider(ISyncModeSelector syncModeSelector, IDbProvider otherProvider, ILogManager logManager) { _otherProvider = otherProvider ?? throw new ArgumentNullException(nameof(otherProvider)); BeamSyncDb codeDb = new BeamSyncDb(otherProvider.CodeDb.Innermost, otherProvider.BeamStateDb, syncModeSelector, logManager); BeamSyncDb stateDb = new BeamSyncDb(otherProvider.StateDb.Innermost, otherProvider.BeamStateDb, syncModeSelector, logManager); BeamSyncFeed = new CompositeStateSyncFeed <StateSyncBatch>(logManager, codeDb, stateDb); StateDb = new StateDb(stateDb); CodeDb = new StateDb(codeDb); }
public override SyncResponseHandlingResult HandleResponse(T batch) { for (int subFeedIndex = 0; subFeedIndex < _subFeeds.Length; subFeedIndex++) { ISyncFeed <T> subFeed = _subFeeds[subFeedIndex]; if (subFeed.FeedId == batch?.ConsumerId) { subFeed.HandleResponse(batch); } } return(SyncResponseHandlingResult.OK); }
public override Task <T> PrepareRequest() { for (int subFeedIndex = 0; subFeedIndex < _subFeeds.Length; subFeedIndex++) { ISyncFeed <T> subFeed = _subFeeds[subFeedIndex]; if (subFeed.CurrentState == SyncFeedState.Active) { T batch = subFeed.PrepareRequest().Result; if (batch != null) { return(Task.FromResult(batch)); } } } return(null); }
public override async Task <T> PrepareRequest() { for (int subFeedIndex = 0; subFeedIndex < _subFeeds.Length; subFeedIndex++) { ISyncFeed <T> subFeed = _subFeeds[subFeedIndex]; if (subFeed.CurrentState == SyncFeedState.Active) { T batch = await subFeed.PrepareRequest(); if (batch != null) { return(batch); } } } return(null !); }
private void StartBeamSyncComponents() { // so bad BeamSyncDbProvider? beamSyncDbProvider = _dbProvider as BeamSyncDbProvider; ISyncFeed <StateSyncBatch?>?beamSyncFeed = beamSyncDbProvider?.BeamSyncFeed; if (beamSyncDbProvider == null || beamSyncFeed == null) { throw new InvalidOperationException("Corrupted types when initializing beam sync components " + $"received {_dbProvider.GetType().FullName}"); } if (_syncConfig.BeamSyncVerifiedMode) { beamSyncDbProvider.EnableVerifiedMode(); } StateSyncDispatcher dispatcher = new StateSyncDispatcher( beamSyncFeed !, _syncPeerPool, new StateSyncAllocationStrategyFactory(), _logManager); dispatcher.Start(_syncCancellation.Token).ContinueWith(t => { if (t.IsFaulted) { if (_logger.IsError) { _logger.Error("Beam sync failed", t.Exception); } } else { if (_logger.IsInfo) { _logger.Info("Beam sync completed."); } } }); }
public BlockDownloader( ISyncFeed <BlocksRequest> feed, ISyncPeerPool syncPeerPool, IBlockTree blockTree, IBlockValidator blockValidator, ISealValidator sealValidator, ISyncReport syncReport, IReceiptStorage receiptStorage, ISpecProvider specProvider, ILogManager logManager) : base(feed, syncPeerPool, new BlocksSyncPeerAllocationStrategyFactory(), logManager) { _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); _blockValidator = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator)); _sealValidator = sealValidator ?? throw new ArgumentNullException(nameof(sealValidator)); _syncReport = syncReport ?? throw new ArgumentNullException(nameof(syncReport)); _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _logger = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _syncBatchSize = new SyncBatchSize(logManager); _blockTree.NewHeadBlock += BlockTreeOnNewHeadBlock; }
public BlockDownloader( ISyncFeed <BlocksRequest?>?feed, ISyncPeerPool?syncPeerPool, IBlockTree?blockTree, IBlockValidator?blockValidator, ISealValidator?sealValidator, ISyncReport?syncReport, IReceiptStorage?receiptStorage, ISpecProvider?specProvider, ILogManager?logManager) : base(feed, syncPeerPool, new BlocksSyncPeerAllocationStrategyFactory(), logManager) { _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); _blockValidator = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator)); _sealValidator = sealValidator ?? throw new ArgumentNullException(nameof(sealValidator)); _syncReport = syncReport ?? throw new ArgumentNullException(nameof(syncReport)); _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _receiptsRecovery = new ReceiptsRecovery(new EthereumEcdsa(_specProvider.ChainId, logManager), _specProvider); _syncBatchSize = new SyncBatchSize(logManager); _blockTree.NewHeadBlock += BlockTreeOnNewHeadBlock; }
public BlockDownloader Create(ISyncFeed <BlocksRequest?> syncFeed) { return(new MergeBlockDownloader(_poSSwitcher, _beaconPivot, syncFeed, _syncPeerPool, _blockTree, _blockValidator, _sealValidator, _syncReport, _receiptStorage, _specProvider, _betterPeerStrategy, _chainLevelHelper, _syncProgressResolver, _logManager)); }
public SnapSyncDispatcher(ISyncFeed <SnapSyncBatch>?syncFeed, ISyncPeerPool?syncPeerPool, IPeerAllocationStrategyFactory <SnapSyncBatch>?peerAllocationStrategy, ILogManager?logManager) : base(syncFeed, syncPeerPool, peerAllocationStrategy, logManager) { }
public BlockDownloader Create(ISyncFeed <BlocksRequest?> syncFeed) { return(new(syncFeed, _syncPeerPool, _blockTree, _blockValidator, _sealValidator, _syncReport, _receiptStorage, _specProvider, new BlocksSyncPeerAllocationStrategyFactory(), _betterPeerStrategy, _logManager)); }
public TestDispatcher(ISyncFeed <TestBatch> syncFeed, ISyncPeerPool syncPeerPool, IPeerAllocationStrategyFactory <TestBatch> peerAllocationStrategy) : base(syncFeed, syncPeerPool, peerAllocationStrategy, LimboLogs.Instance) { }
public WitnessBlockSyncDispatcher(ISyncFeed <WitnessBlockSyncBatch> syncFeed, ISyncPeerPool syncPeerPool, IPeerAllocationStrategyFactory <WitnessBlockSyncBatch> peerAllocationStrategy, ILogManager logManager) : base(syncFeed, syncPeerPool, peerAllocationStrategy, logManager) { }