From 9f0b0fc698bf7e464f6c1f0b92dcff22a96fa69f Mon Sep 17 00:00:00 2001 From: greg7mdp Date: Wed, 7 Aug 2024 16:52:45 -0400 Subject: [PATCH 1/3] Log as info (not error) when fsi file is not present. --- libraries/chain/finality/finalizer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/chain/finality/finalizer.cpp b/libraries/chain/finality/finalizer.cpp index 4b1dee504d..e1cfc9fa3f 100644 --- a/libraries/chain/finality/finalizer.cpp +++ b/libraries/chain/finality/finalizer.cpp @@ -216,7 +216,7 @@ my_finalizers_t::fsi_map my_finalizers_t::load_finalizer_safety_info() { ("p", persist_file_path)); if (!std::filesystem::exists(persist_file_path)) { - fc_elog(vote_logger, "unable to open finalizer safety persistence file ${p}, file doesn't exist", + fc_ilog(vote_logger, "unable to open finalizer safety persistence file ${p}, file doesn't exist (which is expected on the first use of a BLS finalizer key)", ("p", persist_file_path)); return res; } From 70110204aede80f0f197bc43777c9170430d7d36 Mon Sep 17 00:00:00 2001 From: greg7mdp Date: Thu, 8 Aug 2024 10:26:02 -0400 Subject: [PATCH 2/3] Update the `finalizer_safety_file_versioning` test to not need `is_equivalent`. --- libraries/chain/finality/finalizer.cpp | 12 ----- .../eosio/chain/finality/finalizer.hpp | 1 - unittests/finalizer_tests.cpp | 46 ++++++++++++++----- 3 files changed, 35 insertions(+), 24 deletions(-) diff --git a/libraries/chain/finality/finalizer.cpp b/libraries/chain/finality/finalizer.cpp index e1cfc9fa3f..4be4c9c528 100644 --- a/libraries/chain/finality/finalizer.cpp +++ b/libraries/chain/finality/finalizer.cpp @@ -323,16 +323,4 @@ void my_finalizers_t::set_default_safety_information(const fsi_t& fsi) { default_fsi = fsi; } -bool my_finalizers_t::are_equivalent(uint32_t version, const fsi_map& old, const fsi_map& current) { - assert(version < current_safety_file_version); // this function compares an older version with the current one - switch(version) { - case 0: - return old == current; - break; - default: - assert(0); - return false; - } -} - } // namespace eosio::chain diff --git a/libraries/chain/include/eosio/chain/finality/finalizer.hpp b/libraries/chain/include/eosio/chain/finality/finalizer.hpp index e2b0a506b3..eb08af3ba6 100644 --- a/libraries/chain/include/eosio/chain/finality/finalizer.hpp +++ b/libraries/chain/include/eosio/chain/finality/finalizer.hpp @@ -159,7 +159,6 @@ namespace eosio::chain { // for testing purposes only, not thread safe const fsi_t& get_fsi(const bls_public_key& k) { return finalizers[k].fsi; } void set_fsi(const bls_public_key& k, const fsi_t& fsi) { finalizers[k].fsi = fsi; } - static bool are_equivalent(uint32_t version, const fsi_map& old, const fsi_map& current); }; } diff --git a/unittests/finalizer_tests.cpp b/unittests/finalizer_tests.cpp index 948a6c89e9..f8ccc2de12 100644 --- a/unittests/finalizer_tests.cpp +++ b/unittests/finalizer_tests.cpp @@ -227,7 +227,9 @@ BOOST_AUTO_TEST_CASE( finalizer_safety_file_io ) try { BOOST_AUTO_TEST_CASE( finalizer_safety_file_versioning ) try { - std::filesystem::path test_data_path { UNITTEST_TEST_DATA_DIR }; + namespace fs = std::filesystem; + + fs::path test_data_path { UNITTEST_TEST_DATA_DIR }; auto fsi_reference_dir = test_data_path / "fsi"; auto create_fsi_reference = [&](my_finalizers_t& fset) { @@ -239,7 +241,7 @@ BOOST_AUTO_TEST_CASE( finalizer_safety_file_versioning ) try { set_fsi(fset, keys, fsi); }; - auto create_fsi_reference_file = [&](const std::filesystem::path& safety_file_path) { + auto create_fsi_reference_file = [&](const fs::path& safety_file_path) { my_finalizers_t fset{safety_file_path}; create_fsi_reference(fset); fset.save_finalizer_safety_info(); @@ -262,20 +264,42 @@ BOOST_AUTO_TEST_CASE( finalizer_safety_file_versioning ) try { if (save_fsi_reference_file) create_fsi_reference_file(mk_versioned_fsi_file_path(current_version)); - auto load_fsi_map = [&](const std::filesystem::path& safety_file_path) { - BOOST_REQUIRE(std::filesystem::exists(safety_file_path)); - my_finalizers_t fset{safety_file_path}; - auto map = fset.load_finalizer_safety_info(); - return map; + auto load_fsi_map = [&](const fs::path& safety_file_path, bool save_after_load) { + BOOST_REQUIRE(fs::exists(safety_file_path)); + my_finalizers_t fset{safety_file_path}; + auto map = fset.load_finalizer_safety_info(); + if (save_after_load) { + bls_pub_priv_key_map_t local_finalizers = create_local_finalizers<0, 1, 2>(create_keys(3)); + fset.set_keys(local_finalizers); // need to call set_keys otherwise inactive keys not saved. + fset.save_finalizer_safety_info(); + + } + return map; }; - // make sure we can read previous versions of the safety file correctly + // Make sure we can read previous versions of the safety file correctly. // -------------------------------------------------------------------- - auto fsi_map_current = load_fsi_map(mk_versioned_fsi_file_path(current_version)); + fc::temp_directory tempdir; for (size_t i=0; i Date: Thu, 8 Aug 2024 12:59:00 -0400 Subject: [PATCH 3/3] Fix issue when building with gcc (no `operator<<()` for `std::chrono::time_point` --- unittests/finalizer_tests.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/unittests/finalizer_tests.cpp b/unittests/finalizer_tests.cpp index f8ccc2de12..36e71999e0 100644 --- a/unittests/finalizer_tests.cpp +++ b/unittests/finalizer_tests.cpp @@ -293,8 +293,8 @@ BOOST_AUTO_TEST_CASE( finalizer_safety_file_versioning ) try { auto last_size = fs::file_size(copy_path); auto fsi_map_vi = load_fsi_map(copy_path, true); - BOOST_REQUIRE_GT(fs::last_write_time(copy_path), last_write); // just a sanity check. - BOOST_REQUIRE_NE(fs::file_size(copy_path), last_size); // we expect the size to be different if the format changes + BOOST_REQUIRE(fs::last_write_time(copy_path) > last_write); // just a sanity check. + BOOST_REQUIRE_NE(fs::file_size(copy_path), last_size); // we expect the size to be different if the format changes // then load it again as the new version auto fsi_map_vn = load_fsi_map(copy_path, false);