From 3fb9ba57e55860148ff91b1b1156aca53d701e75 Mon Sep 17 00:00:00 2001 From: dr7ana Date: Wed, 20 Dec 2023 12:35:15 -0800 Subject: [PATCH] gossip new RC's on bfetch --- llarp/link/link_manager.cpp | 2 +- llarp/nodedb.cpp | 20 +++++++++++++++++--- llarp/nodedb.hpp | 3 +++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/llarp/link/link_manager.cpp b/llarp/link/link_manager.cpp index 82ff615b0..03b65c59d 100644 --- a/llarp/link/link_manager.cpp +++ b/llarp/link/link_manager.cpp @@ -825,7 +825,7 @@ namespace llarp "Bootstrap seed confirmed RID:{} is registered; approving fetch request and " "saving RC!", rid); - node_db->put_rc(remote); + node_db->verify_gossip_bfetch_rc(remote); } } diff --git a/llarp/nodedb.cpp b/llarp/nodedb.cpp index 7b1a12bce..12ea089eb 100644 --- a/llarp/nodedb.cpp +++ b/llarp/nodedb.cpp @@ -659,8 +659,7 @@ namespace llarp _router.link_manager().fetch_bootstrap_rcs( rc, BootstrapFetchMessage::serialize(_router.router_contact, num_needed), - [this, is_snode = _router.is_service_node(), num_needed = num_needed]( - oxen::quic::message m) mutable { + [this, is_snode = _router.is_service_node()](oxen::quic::message m) mutable { log::critical(logcat, "Received response to BootstrapRC fetch request..."); if (not m) @@ -711,7 +710,7 @@ namespace llarp "BootstrapRC fetch response from {} returned {}/{} needed RCs", fetch_source, num, - num_needed); + MIN_ACTIVE_RCS); if (not is_snode) { @@ -972,6 +971,21 @@ namespace llarp return false; } + void + NodeDB::verify_gossip_bfetch_rc(const RemoteRC& rc) + { + if (auto maybe = get_rc(rc.router_id())) + { + if (maybe->other_is_newer(rc)) + put_rc(rc); + } + else + { + if (put_rc(rc)) + _router.link_manager().gossip_rc(_router.local_rid(), rc); + } + } + bool NodeDB::put_rc_if_newer(RemoteRC rc) { diff --git a/llarp/nodedb.hpp b/llarp/nodedb.hpp index 7a3c8333d..8eaa077a8 100644 --- a/llarp/nodedb.hpp +++ b/llarp/nodedb.hpp @@ -581,6 +581,9 @@ namespace llarp bool put_rc_if_newer(RemoteRC rc); + void + verify_gossip_bfetch_rc(const RemoteRC& rc); + bool verify_store_gossip_rc(const RemoteRC& rc); };