From 09f2abbc18c041ea3373e04e375bb05ed4b580af Mon Sep 17 00:00:00 2001 From: Pierre Boutillier Date: Mon, 17 Apr 2023 13:38:40 +0200 Subject: [PATCH 1/3] P2P: fixups in metadata --- src/lib_shell/distributed_db.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib_shell/distributed_db.ml b/src/lib_shell/distributed_db.ml index 1b04504c30ff..907934442b9c 100644 --- a/src/lib_shell/distributed_db.ml +++ b/src/lib_shell/distributed_db.ml @@ -447,7 +447,7 @@ module Request = struct let current_branch chain_db peer = let chain_id = Store.Chain.chain_id chain_db.reader_chain_db.chain_store in let meta = P2p.get_peer_metadata chain_db.global_db.p2p peer in - Peer_metadata.incr meta (Sent_request Head) ; + Peer_metadata.incr meta (Sent_request Branch) ; try_send chain_db peer @@ Get_current_branch chain_id end -- GitLab From 7c293c64b6adbf8306ea5547b3bda8a8a3d63335 Mon Sep 17 00:00:00 2001 From: Pierre Boutillier Date: Mon, 17 Apr 2023 17:47:00 +0200 Subject: [PATCH 2/3] Chain_validator: Advertize only head when switching to a sibling --- src/lib_shell/chain_validator.ml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/lib_shell/chain_validator.ml b/src/lib_shell/chain_validator.ml index 6f8ece6a9010..8e58b6ae8c9b 100644 --- a/src/lib_shell/chain_validator.ml +++ b/src/lib_shell/chain_validator.ml @@ -351,19 +351,15 @@ let may_switch_test_chain w active_chains spawn_child block = Lwt.return_unit let broadcast_head w ~previous block = - let open Lwt_syntax in let nv = Worker.state w in if not (is_bootstrapped nv) then Lwt.return_unit else - let* successor = - let* o = - Store.Block.read_predecessor_opt nv.parameters.chain_store block - in - match o with - | None -> Lwt.return_true - | Some predecessor -> Lwt.return (Store.Block.equal predecessor previous) + let predecessor_hash = Store.Block.predecessor block in + let successor_or_sibling = + Block_hash.equal predecessor_hash (Store.Block.hash previous) + || Block_hash.equal predecessor_hash (Store.Block.predecessor previous) in - if successor then ( + if successor_or_sibling then ( Distributed_db.Advertise.current_head nv.chain_db block ; Lwt.return_unit) else Distributed_db.Advertise.current_branch nv.chain_db -- GitLab From 6de878e55a28a57a48bb2aa27e5eac2ee8784dc9 Mon Sep 17 00:00:00 2001 From: Pierre Boutillier Date: Mon, 17 Apr 2023 22:42:25 +0200 Subject: [PATCH 3/3] Peer_validator: Do not launch a bootstrap pipeline to validate 1 block --- src/lib_shell/peer_validator.ml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/lib_shell/peer_validator.ml b/src/lib_shell/peer_validator.ml index 1a20e287a39a..b8c9a28972b1 100644 --- a/src/lib_shell/peer_validator.ml +++ b/src/lib_shell/peer_validator.ml @@ -290,10 +290,11 @@ let may_validate_new_branch w locator = locator in match v with - | Known_valid, prefix_locator -> - if prefix_locator.Block_locator.history <> [] then - bootstrap_new_branch w prefix_locator - else return_unit + | Known_valid, {history = []; _} -> return_unit + | Known_valid, {history = [x]; head_header; head_hash} + when Block_hash.equal x head_header.shell.predecessor -> + validate_new_head w head_hash head_header + | Known_valid, prefix_locator -> bootstrap_new_branch w prefix_locator | Unknown, _ -> (* May happen when: - A locator from another chain is received; -- GitLab