From e88785481c6bacbf055c9764d3a123c05ffa744d Mon Sep 17 00:00:00 2001 From: Ruslan Tushov Date: Wed, 24 Apr 2024 09:12:41 +0500 Subject: [PATCH] audi republish (#2052) Signed-off-by: turuslan --- core/authority_discovery/interval.hpp | 1 + .../publisher/address_publisher.cpp | 22 +++++++++++++------ .../publisher/address_publisher.hpp | 3 ++- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/core/authority_discovery/interval.hpp b/core/authority_discovery/interval.hpp index 46da50997e..047017141e 100644 --- a/core/authority_discovery/interval.hpp +++ b/core/authority_discovery/interval.hpp @@ -6,6 +6,7 @@ #pragma once +#include #include namespace kagome::authority_discovery { diff --git a/core/authority_discovery/publisher/address_publisher.cpp b/core/authority_discovery/publisher/address_publisher.cpp index 76a2adb17d..f86e96e4b2 100644 --- a/core/authority_discovery/publisher/address_publisher.cpp +++ b/core/authority_discovery/publisher/address_publisher.cpp @@ -23,6 +23,9 @@ std::vector pbEncodeVec(const T &v) { } namespace kagome::authority_discovery { + constexpr std::chrono::seconds kIntervalInitial{2}; + constexpr std::chrono::hours kIntervalMax{1}; + AddressPublisher::AddressPublisher( std::shared_ptr authority_discovery_api, network::Roles roles, @@ -44,7 +47,7 @@ namespace kagome::authority_discovery { sr_crypto_provider_(std::move(sr_crypto_provider)), host_(host), kademlia_(std::move(kademlia)), - scheduler_(std::move(scheduler)), + interval_{kIntervalInitial, kIntervalMax, std::move(scheduler)}, log_{log::createLogger("AddressPublisher", "authority_discovery")} { BOOST_ASSERT(authority_discovery_api_ != nullptr); BOOST_ASSERT(app_state_manager != nullptr); @@ -53,7 +56,6 @@ namespace kagome::authority_discovery { BOOST_ASSERT(ed_crypto_provider_ != nullptr); BOOST_ASSERT(sr_crypto_provider_ != nullptr); BOOST_ASSERT(kademlia_ != nullptr); - BOOST_ASSERT(scheduler_ != nullptr); app_state_manager->atLaunch([this] { return start(); }); if (libp2p_key.privateKey.type == libp2p::crypto::Key::Type::Ed25519) { std::array @@ -82,11 +84,17 @@ namespace kagome::authority_discovery { if (not roles_.flags.authority) { return true; } - // TODO(ortyomka): #1358, republish in scheduler with some interval - auto maybe_error = publishOwnAddress(); - if (maybe_error.has_error()) { - SL_ERROR(log_, "publishOwnAddress failed: {}", maybe_error.error()); - } + interval_.start([weak_self{weak_from_this()}] { + auto self = weak_self.lock(); + if (not self) { + return; + } + auto maybe_error = self->publishOwnAddress(); + if (not maybe_error) { + SL_WARN( + self->log_, "publishOwnAddress failed: {}", maybe_error.error()); + } + }); return true; } diff --git a/core/authority_discovery/publisher/address_publisher.hpp b/core/authority_discovery/publisher/address_publisher.hpp index db4e869245..549f60c447 100644 --- a/core/authority_discovery/publisher/address_publisher.hpp +++ b/core/authority_discovery/publisher/address_publisher.hpp @@ -7,6 +7,7 @@ #pragma once #include "application/app_state_manager.hpp" +#include "authority_discovery/interval.hpp" #include "blockchain/block_tree.hpp" #include "crypto/ed25519_provider.hpp" #include "crypto/key_store/session_keys.hpp" @@ -58,7 +59,7 @@ namespace kagome::authority_discovery { libp2p::Host &host_; std::shared_ptr kademlia_; - std::shared_ptr scheduler_; + ExpIncInterval interval_; log::Logger log_;