From 4cdd176e7ecd9e684471663219817dd814b65497 Mon Sep 17 00:00:00 2001 From: Amirul Ashraf Date: Fri, 8 Sep 2023 00:40:47 +0800 Subject: [PATCH] Fix sync pivot not set when dbload (#6080) --- .../MultiSyncModeSelectorFastSyncTests.cs | 11 +++++++++++ .../MultiSyncModeSelectorTests.Scenario.cs | 15 +++++++++++++++ .../ParallelSync/MultiSyncModeSelector.cs | 6 +++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Synchronization.Test/ParallelSync/MultiSyncModeSelectorFastSyncTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/ParallelSync/MultiSyncModeSelectorFastSyncTests.cs index 78ef1bb94a4..33f96b1ec42 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/ParallelSync/MultiSyncModeSelectorFastSyncTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/ParallelSync/MultiSyncModeSelectorFastSyncTests.cs @@ -77,6 +77,17 @@ public void Load_from_db() .TheSyncModeShouldBe(SyncMode.DbLoad); } + [Test] + public void Load_from_without_merge_sync_pivot_resolved() + { + Scenario.GoesLikeThis(_needToWaitForHeaders) + .WhenMergeSyncPivotNotResolvedYet() + .WhateverThePeerPoolLooks() + .WhenThisNodeIsLoadingBlocksFromDb() + .ThenInAnyFastSyncConfiguration() + .TheSyncModeShouldBe(SyncMode.DbLoad | SyncMode.UpdatingPivot); + } + [Test] public void Simple_archive() { diff --git a/src/Nethermind/Nethermind.Synchronization.Test/ParallelSync/MultiSyncModeSelectorTests.Scenario.cs b/src/Nethermind/Nethermind.Synchronization.Test/ParallelSync/MultiSyncModeSelectorTests.Scenario.cs index 38b4cfe5248..e73d09238ab 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/ParallelSync/MultiSyncModeSelectorTests.Scenario.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/ParallelSync/MultiSyncModeSelectorTests.Scenario.cs @@ -834,6 +834,21 @@ public ScenarioBuilder WhenConsensusRequiresToWaitForHeaders(bool needToWaitForH _needToWaitForHeaders = needToWaitForHeaders; return this; } + + public ScenarioBuilder WhenMergeSyncPivotNotResolvedYet() + { + _syncProgressSetups.Add( + () => + { + SyncConfig.MaxAttemptsToUpdatePivot = 3; + BeaconSyncStrategy = Substitute.For(); + BeaconSyncStrategy.GetFinalizedHash().Returns(TestItem.KeccakA); + return "merge sync pivot not resolved yet"; + } + ); + + return this; + } } public static ScenarioBuilder GoesLikeThis(bool needToWaitForHeaders) => diff --git a/src/Nethermind/Nethermind.Synchronization/ParallelSync/MultiSyncModeSelector.cs b/src/Nethermind/Nethermind.Synchronization/ParallelSync/MultiSyncModeSelector.cs index 63518eb9c98..60530ebeb27 100644 --- a/src/Nethermind/Nethermind.Synchronization/ParallelSync/MultiSyncModeSelector.cs +++ b/src/Nethermind/Nethermind.Synchronization/ParallelSync/MultiSyncModeSelector.cs @@ -134,12 +134,17 @@ public void Stop() public void Update() { _pivotNumber = _syncConfig.PivotNumberParsed; + bool shouldBeInUpdatingPivot = ShouldBeInUpdatingPivot(); SyncMode newModes; string reason = string.Empty; if (_syncProgressResolver.IsLoadingBlocksFromDb()) { newModes = SyncMode.DbLoad; + if (shouldBeInUpdatingPivot) + { + newModes |= SyncMode.UpdatingPivot; + } } else if (!_syncConfig.SynchronizationEnabled) { @@ -149,7 +154,6 @@ public void Update() else { bool inBeaconControl = _beaconSyncStrategy.ShouldBeInBeaconModeControl(); - bool shouldBeInUpdatingPivot = ShouldBeInUpdatingPivot(); (UInt256? peerDifficulty, long? peerBlock) = ReloadDataFromPeers(); // if there are no peers that we could use then we cannot sync if (peerDifficulty is null || peerBlock is null || peerBlock == 0)