From 0ec9115ce384dcd96f022dd77340308fc13cc7c8 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Mon, 22 Apr 2024 21:21:42 -0500 Subject: [PATCH 1/5] Do not allow set_finalizers during transition --- libraries/chain/controller.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libraries/chain/controller.cpp b/libraries/chain/controller.cpp index 3a853a9126..a030336495 100644 --- a/libraries/chain/controller.cpp +++ b/libraries/chain/controller.cpp @@ -535,8 +535,10 @@ struct building_block { void set_proposed_finalizer_policy(finalizer_policy&& fin_pol) { std::visit(overloaded{ [&](building_block_legacy& bb) { - fin_pol.generation = 1; // only allowed to be set once in legacy mode - bb.new_finalizer_policy = std::move(fin_pol); + if (!bb.pending_block_header_state.qc_claim) { // not in transition + fin_pol.generation = 1; // only allowed to be set once in legacy mode + bb.new_finalizer_policy = std::move(fin_pol); + } }, [&](building_block_if& bb) { bb.new_finalizer_policy = std::move(fin_pol); From 21d9c586fd649bdfa670a59bacfea995fca49191 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Tue, 23 Apr 2024 07:27:52 -0500 Subject: [PATCH 2/5] Use is_if_transition_block() --- libraries/chain/controller.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/chain/controller.cpp b/libraries/chain/controller.cpp index a030336495..2aee011d49 100644 --- a/libraries/chain/controller.cpp +++ b/libraries/chain/controller.cpp @@ -535,7 +535,7 @@ struct building_block { void set_proposed_finalizer_policy(finalizer_policy&& fin_pol) { std::visit(overloaded{ [&](building_block_legacy& bb) { - if (!bb.pending_block_header_state.qc_claim) { // not in transition + if (!bb.pending_block_header_state.is_if_transition_block()) { fin_pol.generation = 1; // only allowed to be set once in legacy mode bb.new_finalizer_policy = std::move(fin_pol); } From 6a641c3115239c7c48f87e4f32607198daed2919 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Tue, 23 Apr 2024 07:28:12 -0500 Subject: [PATCH 3/5] Add test for calling setfinalizer during transition --- tests/transition_to_if.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/transition_to_if.py b/tests/transition_to_if.py index 216459fa27..24b4028a85 100755 --- a/tests/transition_to_if.py +++ b/tests/transition_to_if.py @@ -30,7 +30,7 @@ testSuccessful=False cluster=Cluster(unshared=args.unshared, keepRunning=args.leave_running, keepLogs=args.keep_logs) -walletMgr=WalletMgr(True) +walletMgr=WalletMgr(True, keepRunning=args.leave_running, keepLogs=args.keep_logs) try: TestHelper.printSystemInfo("BEGIN") @@ -60,9 +60,15 @@ status = cluster.waitForTrxGeneratorsSpinup(nodeId=cluster.getNode(0).nodeId, numGenerators=numTrxGenerators) assert status is not None and status is not False, "ERROR: Failed to spinup Transaction Generators" - success, transId = cluster.activateInstantFinality(biosFinalizer=False) + success, transId = cluster.activateInstantFinality(biosFinalizer=False, waitForFinalization=False) assert success, "Activate instant finality failed" + cluster.biosNode.waitForHeadToAdvance() + success, ignoredId = cluster.activateInstantFinality(biosFinalizer=False, waitForFinalization=False) + + if not cluster.biosNode.waitForTransFinalization(transId, timeout=21 * 12 * 3): + Utils.Print("ERROR: Failed to validate setfinalizer transaction %s got rolled into a LIB block" % (transId)) + assert cluster.biosNode.waitForLibToAdvance(), "Lib should advance after instant finality activated" assert cluster.biosNode.waitForProducer("defproducera"), "Did not see defproducera" assert cluster.biosNode.waitForHeadToAdvance(blocksToAdvance=13), "Head did not advance 13 blocks to next producer" From 166b9812badb2cac4228bf91b3d8596583d39b88 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Tue, 23 Apr 2024 07:28:36 -0500 Subject: [PATCH 4/5] Update log message --- tests/TestHarness/Cluster.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/TestHarness/Cluster.py b/tests/TestHarness/Cluster.py index 43cda0ef37..37d42a8dd4 100644 --- a/tests/TestHarness/Cluster.py +++ b/tests/TestHarness/Cluster.py @@ -1046,7 +1046,7 @@ def activateInstantFinality(self, biosFinalizer=True, waitForFinalization=True): transId = Node.getTransId(trans[1]) if waitForFinalization: if not self.biosNode.waitForTransFinalization(transId, timeout=21*12*3): - Utils.Print("ERROR: Failed to validate transaction %s got rolled into a LIB block on server port %d." % (transId, biosNode.port)) + Utils.Print("ERROR: Failed to validate setfinalizer transaction %s got rolled into a LIB block on server port %d." % (transId, biosNode.port)) return None, transId return True, transId From b418127932e16f70b162ace02272da6cde265d8d Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Tue, 23 Apr 2024 07:42:40 -0500 Subject: [PATCH 5/5] Add some more descriptive Print statements --- tests/transition_to_if.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/transition_to_if.py b/tests/transition_to_if.py index 24b4028a85..1a92ef04cd 100755 --- a/tests/transition_to_if.py +++ b/tests/transition_to_if.py @@ -60,12 +60,16 @@ status = cluster.waitForTrxGeneratorsSpinup(nodeId=cluster.getNode(0).nodeId, numGenerators=numTrxGenerators) assert status is not None and status is not False, "ERROR: Failed to spinup Transaction Generators" + Print("Start transition to Savanna") success, transId = cluster.activateInstantFinality(biosFinalizer=False, waitForFinalization=False) assert success, "Activate instant finality failed" cluster.biosNode.waitForHeadToAdvance() - success, ignoredId = cluster.activateInstantFinality(biosFinalizer=False, waitForFinalization=False) + Print("Verify calling setfinalizers again does no harm") + success, ignoredId = cluster.activateInstantFinality(biosFinalizer=True, waitForFinalization=False) + + Print("Wait for LIB of setfinalizers") if not cluster.biosNode.waitForTransFinalization(transId, timeout=21 * 12 * 3): Utils.Print("ERROR: Failed to validate setfinalizer transaction %s got rolled into a LIB block" % (transId))