From bbb787745db6c3c496cc06b14c42c5453751f134 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Thu, 12 Sep 2024 12:54:22 -0500 Subject: [PATCH 1/2] GH-592 Now that we limit how far ahead we sync, no need to pause during snapshot. It naturally pauses. --- plugins/net_plugin/net_plugin.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/plugins/net_plugin/net_plugin.cpp b/plugins/net_plugin/net_plugin.cpp index 62e111ecfc..416d160eba 100644 --- a/plugins/net_plugin/net_plugin.cpp +++ b/plugins/net_plugin/net_plugin.cpp @@ -553,14 +553,6 @@ namespace eosio { void start_expire_timer(); void start_monitors(); - // we currently pause on snapshot generation - void wait_if_paused() const { - controller& cc = chain_plug->chain(); - while (cc.is_writing_snapshot()) { - std::this_thread::sleep_for(std::chrono::milliseconds(10)); - } - } - void expire(); /** \name Peer Timestamps * Time message handling @@ -2938,8 +2930,6 @@ namespace eosio { return; } - my_impl->wait_if_paused(); - boost::asio::async_read( *socket, pending_message_buffer.get_buffer_sequence_for_boost_async_read(), completion_handler, boost::asio::bind_executor( strand, From 3c21c0e3553fb42cfe72d46c7fb5bcdbba627354 Mon Sep 17 00:00:00 2001 From: Matt Witherspoon <32485495+spoonincode@users.noreply.github.com> Date: Fri, 13 Sep 2024 12:41:43 -0400 Subject: [PATCH 2/2] non-atomic append fallback for old kernels --- libraries/libfc/include/fc/io/random_access_file.hpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libraries/libfc/include/fc/io/random_access_file.hpp b/libraries/libfc/include/fc/io/random_access_file.hpp index d4d483eeeb..21585ad2b4 100644 --- a/libraries/libfc/include/fc/io/random_access_file.hpp +++ b/libraries/libfc/include/fc/io/random_access_file.hpp @@ -124,14 +124,17 @@ struct random_access_file_context { ssize_t wrote = -1; do { - if(offs == append_t) + if(offs == append_t) { #ifdef __linux__ wrote = pwritev2(fd, iov, i, 0, RWF_APPEND); //linux *not* opened with O_APPEND, appending requires special flag + if(wrote == -1 && errno == EOPNOTSUPP) //fallback for kernels before 4.16 + wrote = pwritev(fd, iov, i, size()); #else wrote = writev(fd, iov, i); //opened with O_APPEND, just write #endif - else + } else { wrote = pwritev(fd, iov, i, offs); + } } while(wrote == -1 && errno == EINTR); FC_ASSERT(wrote != -1, "write failure on file ${fn}: ${e}", ("fn", display_path)("e", strerror(errno)));