From b3effe101645819f18c5cdbb868712fcb7f27d82 Mon Sep 17 00:00:00 2001 From: Eugen Zalinescu Date: Tue, 14 Mar 2023 21:02:55 +0100 Subject: [PATCH 1/3] Baker/Mockup: fix on_error --- .../lib_delegate/test/mockup_simulator/faked_daemon.ml | 3 ++- .../lib_delegate/test/mockup_simulator/faked_daemon.ml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/proto_016_PtMumbai/lib_delegate/test/mockup_simulator/faked_daemon.ml b/src/proto_016_PtMumbai/lib_delegate/test/mockup_simulator/faked_daemon.ml index 1319d3df51d9..6de60c59883f 100644 --- a/src/proto_016_PtMumbai/lib_delegate/test/mockup_simulator/faked_daemon.ml +++ b/src/proto_016_PtMumbai/lib_delegate/test/mockup_simulator/faked_daemon.ml @@ -16,7 +16,8 @@ module Baker = struct let canceler = Lwt_canceler.create () in let on_error (err : error trace) = Lwt_canceler.cancel canceler >>= fun _ -> - failwith "%a" Error_monad.pp_print_trace err + Format.printf "%a" Error_monad.pp_print_trace err ; + Lwt_exit.exit_and_raise 1 in Baking_scheduling.run cctxt diff --git a/src/proto_alpha/lib_delegate/test/mockup_simulator/faked_daemon.ml b/src/proto_alpha/lib_delegate/test/mockup_simulator/faked_daemon.ml index 1319d3df51d9..6de60c59883f 100644 --- a/src/proto_alpha/lib_delegate/test/mockup_simulator/faked_daemon.ml +++ b/src/proto_alpha/lib_delegate/test/mockup_simulator/faked_daemon.ml @@ -16,7 +16,8 @@ module Baker = struct let canceler = Lwt_canceler.create () in let on_error (err : error trace) = Lwt_canceler.cancel canceler >>= fun _ -> - failwith "%a" Error_monad.pp_print_trace err + Format.printf "%a" Error_monad.pp_print_trace err ; + Lwt_exit.exit_and_raise 1 in Baking_scheduling.run cctxt -- GitLab From 571bf52416e1c4591154a7555d05adc4a2fc7849 Mon Sep 17 00:00:00 2001 From: Eugen Zalinescu Date: Thu, 9 Mar 2023 12:46:00 +0100 Subject: [PATCH 2/3] TMP Baker: assert quorums are valid --- .../lib_delegate/state_transitions.ml | 48 +++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/proto_alpha/lib_delegate/state_transitions.ml b/src/proto_alpha/lib_delegate/state_transitions.ml index 9df396e48fb5..d33335e4a20a 100644 --- a/src/proto_alpha/lib_delegate/state_transitions.ml +++ b/src/proto_alpha/lib_delegate/state_transitions.ml @@ -800,6 +800,40 @@ let handle_expected_applied_proposal (state : Baking_state.t) = candidate preendorsement_qc +module P_set = Set.Make (struct + type t = Kind.preendorsement Alpha_context.operation + + let compare = Stdlib.compare +end) + +module E_set = Set.Make (struct + type t = Kind.endorsement Alpha_context.operation + + let compare = Stdlib.compare +end) + +let assert_pqc loc pqc = + List.fold_left + (fun set op -> + if P_set.mem op set then ( + Format.printf "wrong PQC at line %s@." loc ; + assert false) + else P_set.add op set) + P_set.empty + pqc + |> ignore + +let assert_eqc loc eqc = + List.fold_left + (fun set op -> + if E_set.mem op set then ( + Format.printf "wrong EQC at line %s@." loc ; + assert false) + else E_set.add op set) + E_set.empty + eqc + |> ignore + (* Hypothesis: - The state is not to be modified outside this module (NB: there are exceptions in Baking_actions: the corner cases @@ -880,6 +914,7 @@ let step (state : Baking_state.t) (event : Baking_state.event) : Events.(emit new_valid_proposal_while_waiting_for_qc ()) >>= fun () -> handle_proposal ~is_proposal_applied:false state proposal | Awaiting_application, Prequorum_reached (candidate, preendorsement_qc) -> + assert_pqc __LOC__ preendorsement_qc ; may_register_early_prequorum state (candidate, preendorsement_qc) | Awaiting_preendorsements, Prequorum_reached (candidate, preendorsement_qc) -> @@ -888,11 +923,16 @@ let step (state : Baking_state.t) (event : Baking_state.event) : candidate preendorsement_qc | Awaiting_endorsements, Quorum_reached (candidate, endorsement_qc) -> + assert_eqc __LOC__ endorsement_qc ; quorum_reached_when_waiting_endorsements state candidate endorsement_qc (* Unreachable cases *) - | Idle, (Prequorum_reached _ | Quorum_reached _) - | Awaiting_preendorsements, Quorum_reached _ - | Awaiting_endorsements, Prequorum_reached _ - | Awaiting_application, Quorum_reached _ -> + | Idle, Quorum_reached (_, eqc) + | Awaiting_preendorsements, Quorum_reached (_, eqc) + | Awaiting_application, Quorum_reached (_, eqc) -> + assert_eqc __LOC__ eqc ; + do_nothing state + | Idle, Prequorum_reached (_, pqc) + | Awaiting_endorsements, Prequorum_reached (_, pqc) -> (* This cannot/should not happen *) + assert_pqc __LOC__ pqc ; do_nothing state -- GitLab From 16227f02b88ea2fa275921f2de5758566c654337 Mon Sep 17 00:00:00 2001 From: Eugen Zalinescu Date: Fri, 10 Mar 2023 08:37:31 +0100 Subject: [PATCH 3/3] TMP: same thing for Mumbai --- .../lib_delegate/state_transitions.ml | 48 +++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/proto_016_PtMumbai/lib_delegate/state_transitions.ml b/src/proto_016_PtMumbai/lib_delegate/state_transitions.ml index ab8f6d35d7ba..1405bf4479a2 100644 --- a/src/proto_016_PtMumbai/lib_delegate/state_transitions.ml +++ b/src/proto_016_PtMumbai/lib_delegate/state_transitions.ml @@ -783,6 +783,40 @@ let handle_expected_applied_proposal (state : Baking_state.t) = candidate preendorsement_qc +module P_set = Set.Make (struct + type t = Kind.preendorsement Alpha_context.operation + + let compare = Stdlib.compare +end) + +module E_set = Set.Make (struct + type t = Kind.endorsement Alpha_context.operation + + let compare = Stdlib.compare +end) + +let assert_pqc loc pqc = + List.fold_left + (fun set op -> + if P_set.mem op set then ( + Format.printf "wrong PQC at line %s@." loc ; + assert false) + else P_set.add op set) + P_set.empty + pqc + |> ignore + +let assert_eqc loc eqc = + List.fold_left + (fun set op -> + if E_set.mem op set then ( + Format.printf "wrong EQC at line %s@." loc ; + assert false) + else E_set.add op set) + E_set.empty + eqc + |> ignore + (* Hypothesis: - The state is not to be modified outside this module (NB: there are exceptions in Baking_actions: the corner cases @@ -863,6 +897,7 @@ let step (state : Baking_state.t) (event : Baking_state.event) : Events.(emit new_valid_proposal_while_waiting_for_qc ()) >>= fun () -> handle_proposal ~is_proposal_applied:false state proposal | Awaiting_application, Prequorum_reached (candidate, preendorsement_qc) -> + assert_pqc __LOC__ preendorsement_qc ; may_register_early_prequorum state (candidate, preendorsement_qc) | Awaiting_preendorsements, Prequorum_reached (candidate, preendorsement_qc) -> @@ -871,11 +906,16 @@ let step (state : Baking_state.t) (event : Baking_state.event) : candidate preendorsement_qc | Awaiting_endorsements, Quorum_reached (candidate, endorsement_qc) -> + assert_eqc __LOC__ endorsement_qc ; quorum_reached_when_waiting_endorsements state candidate endorsement_qc (* Unreachable cases *) - | Idle, (Prequorum_reached _ | Quorum_reached _) - | Awaiting_preendorsements, Quorum_reached _ - | Awaiting_endorsements, Prequorum_reached _ - | Awaiting_application, Quorum_reached _ -> + | Idle, Prequorum_reached (_, pqc) + | Awaiting_endorsements, Prequorum_reached (_, pqc) -> + assert_pqc __LOC__ pqc ; + do_nothing state + | Idle, Quorum_reached (_, eqc) + | Awaiting_preendorsements, Quorum_reached (_, eqc) + | Awaiting_application, Quorum_reached (_, eqc) -> + assert_eqc __LOC__ eqc ; (* This cannot/should not happen *) do_nothing state -- GitLab