From 9b56ac0b1d3906e2f5d4c338e89e394175404aae Mon Sep 17 00:00:00 2001 From: Valentin Chaboche Date: Mon, 28 Apr 2025 15:10:58 +0200 Subject: [PATCH 1/2] Baker: emit an event to announce node's chain id It's a convenient way to make sure the communication between the baker and node is healthy, additionally that's an useful information. --- src/proto_021_PsQuebec/lib_delegate/baking_events.ml | 8 ++++++++ src/proto_021_PsQuebec/lib_delegate/baking_scheduling.ml | 1 + src/proto_022_PsRiotum/lib_delegate/baking_events.ml | 8 ++++++++ src/proto_022_PsRiotum/lib_delegate/baking_scheduling.ml | 1 + src/proto_alpha/lib_delegate/baking_events.ml | 8 ++++++++ src/proto_alpha/lib_delegate/baking_scheduling.ml | 1 + 6 files changed, 27 insertions(+) diff --git a/src/proto_021_PsQuebec/lib_delegate/baking_events.ml b/src/proto_021_PsQuebec/lib_delegate/baking_events.ml index ee40ee946dfd..e8be873ba04e 100644 --- a/src/proto_021_PsQuebec/lib_delegate/baking_events.ml +++ b/src/proto_021_PsQuebec/lib_delegate/baking_events.ml @@ -603,6 +603,14 @@ module Node_rpc = struct ~msg:"error while monitoring valid proposals {trace}" ~pp1:Error_monad.pp_print_trace ("trace", Error_monad.trace_encoding) + + let chain_id = + declare_1 + ~section + ~name:"node_chain_id" + ~level:Info + ~msg:"Running baker with chain id: {chain_id}" + ("chain_id", Chain_id.encoding) end module Delegates = struct diff --git a/src/proto_021_PsQuebec/lib_delegate/baking_scheduling.ml b/src/proto_021_PsQuebec/lib_delegate/baking_scheduling.ml index d9c1d2ba7fda..8dc8ec0a0a61 100644 --- a/src/proto_021_PsQuebec/lib_delegate/baking_scheduling.ml +++ b/src/proto_021_PsQuebec/lib_delegate/baking_scheduling.ml @@ -982,6 +982,7 @@ let run cctxt ?canceler ?(stop_on_event = fun _ -> false) let open Lwt_result_syntax in let*! () = Events.(emit Baking_events.Delegates.delegates_used delegates) in let* chain_id = Shell_services.Chain.chain_id cctxt ~chain () in + let*! () = Events.emit Baking_events.Node_rpc.chain_id chain_id in let* constants = match constants with | Some c -> return c diff --git a/src/proto_022_PsRiotum/lib_delegate/baking_events.ml b/src/proto_022_PsRiotum/lib_delegate/baking_events.ml index c558348d1798..ffb9d2bb00b2 100644 --- a/src/proto_022_PsRiotum/lib_delegate/baking_events.ml +++ b/src/proto_022_PsRiotum/lib_delegate/baking_events.ml @@ -590,6 +590,14 @@ module Node_rpc = struct ~msg:"error while monitoring valid proposals {trace}" ~pp1:Error_monad.pp_print_trace ("trace", Error_monad.trace_encoding) + + let chain_id = + declare_1 + ~section + ~name:"node_chain_id" + ~level:Info + ~msg:"Running baker with chain id: {chain_id}" + ("chain_id", Chain_id.encoding) end module Delegates = struct diff --git a/src/proto_022_PsRiotum/lib_delegate/baking_scheduling.ml b/src/proto_022_PsRiotum/lib_delegate/baking_scheduling.ml index fef652c47995..8250a1df51e9 100644 --- a/src/proto_022_PsRiotum/lib_delegate/baking_scheduling.ml +++ b/src/proto_022_PsRiotum/lib_delegate/baking_scheduling.ml @@ -972,6 +972,7 @@ let run cctxt ?dal_node_rpc_ctxt ?canceler ?(stop_on_event = fun _ -> false) let open Lwt_result_syntax in let*! () = Events.(emit Baking_events.Delegates.delegates_used delegates) in let* chain_id = Shell_services.Chain.chain_id cctxt ~chain () in + let*! () = Events.emit Baking_events.Node_rpc.chain_id chain_id in let* constants = match constants with | Some c -> return c diff --git a/src/proto_alpha/lib_delegate/baking_events.ml b/src/proto_alpha/lib_delegate/baking_events.ml index 10199ac52a60..50caced08be3 100644 --- a/src/proto_alpha/lib_delegate/baking_events.ml +++ b/src/proto_alpha/lib_delegate/baking_events.ml @@ -597,6 +597,14 @@ module Node_rpc = struct ~msg:"error while monitoring valid proposals {trace}" ~pp1:Error_monad.pp_print_trace ("trace", Error_monad.trace_encoding) + + let chain_id = + declare_1 + ~section + ~name:"node_chain_id" + ~level:Info + ~msg:"Running baker with chain id: {chain_id}" + ("chain_id", Chain_id.encoding) end module Delegates = struct diff --git a/src/proto_alpha/lib_delegate/baking_scheduling.ml b/src/proto_alpha/lib_delegate/baking_scheduling.ml index 6428ce68c120..cc0c576a92f8 100644 --- a/src/proto_alpha/lib_delegate/baking_scheduling.ml +++ b/src/proto_alpha/lib_delegate/baking_scheduling.ml @@ -978,6 +978,7 @@ let run cctxt ?dal_node_rpc_ctxt ?canceler ?(stop_on_event = fun _ -> false) let open Lwt_result_syntax in let*! () = Events.(emit Baking_events.Delegates.delegates_used delegates) in let* chain_id = Shell_services.Chain.chain_id cctxt ~chain () in + let*! () = Events.emit Baking_events.Node_rpc.chain_id chain_id in let* constants = match constants with | Some c -> return c -- GitLab From 0842a115f69b572b2a7bab811466da59f4832bd4 Mon Sep 17 00:00:00 2001 From: Valentin Chaboche Date: Mon, 28 Apr 2025 15:10:27 +0200 Subject: [PATCH 2/2] Baker/Tezt: improve keep_alive test --- tezt/tests/agnostic_baker_test.ml | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/tezt/tests/agnostic_baker_test.ml b/tezt/tests/agnostic_baker_test.ml index c38e574cf20b..6d85078e84cf 100644 --- a/tezt/tests/agnostic_baker_test.ml +++ b/tezt/tests/agnostic_baker_test.ml @@ -212,8 +212,14 @@ let test_keep_alive = ~uses:(fun _ -> [Constant.octez_agnostic_baker]) @@ fun protocol -> let* node, client = Client.init_with_protocol ~protocol `Client () in + (* Provide a delegate with no voting power to avoid baking blocks with the baker + and the client simultaneously. *) let baker = - Agnostic_baker.create ~node_version_check_bypass:true node client + Agnostic_baker.create + ~delegates:[Constant.activator.public_key_hash] + ~node_version_check_bypass:true + node + client in let* () = Node.terminate node in (* Start the baker with no node running and no [--keep-alive], it crashes. *) @@ -226,23 +232,38 @@ let test_keep_alive = let* () = Agnostic_baker.run ~extra_arguments:["--keep-alive"] baker and* () = wait_for_cannot_connect in (* Start the node. *) - let* () = Node.run node [] and* () = Node.wait_for_ready node in + let f_wait_for_chain_id () = + (* This is an event emitted by the baker lib. *) + Agnostic_baker.wait_for baker "node_chain_id.v0" (fun _json -> Some ()) + in + let wait_for_chain_id = f_wait_for_chain_id () in + let* () = Node.run node [] + and* () = Node.wait_for_ready node + and* () = wait_for_chain_id in (* Bake a block, the baker is connected so it'll see it. *) - let wait_baker_proposal = + let f_wait_baker_proposal () = (* This is an event emitted by the baker lib. *) Agnostic_baker.wait_for baker "new_valid_proposal.v0" (fun _json -> Some ()) in - let wait_period_status = + let f_wait_period_status () = (* This is an event emitted by the agnostic baker. *) Agnostic_baker.wait_for baker "period_status.v0" (fun _json -> Some ()) in + let wait_baker_proposal = f_wait_baker_proposal () in + let wait_period_status = f_wait_period_status () in let* () = Client.bake_for_and_wait client and* () = wait_baker_proposal and* () = wait_period_status in (* Kill the node now that they are connected, the baker will stay alive. *) let* () = Node.terminate node and* () = wait_for_cannot_connect in (* Redo the procedure, restart the node and wait for the block events. *) - let* () = Node.run node [] and* () = Node.wait_for_ready node in + let wait_for_chain_id = f_wait_for_chain_id () in + let* () = Node.run node [] + and* () = Node.wait_for_ready node + and* () = wait_for_chain_id in + + let wait_baker_proposal = f_wait_baker_proposal () in + let wait_period_status = f_wait_period_status () in let* () = Client.bake_for_and_wait client and* () = wait_baker_proposal and* () = wait_period_status in -- GitLab