From 6aec720b0957ef1fe20262e135ef53e1e8f78c0e Mon Sep 17 00:00:00 2001 From: Sebastien Mondet Date: Fri, 8 Mar 2019 16:22:04 -0500 Subject: [PATCH] Shell: propagate prevalidation error (#432) --- src/lib_shell/prevalidation.ml | 11 +++++++++++ src/lib_shell/prevalidation.mli | 1 + src/lib_shell/prevalidator.ml | 6 ++++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/lib_shell/prevalidation.ml b/src/lib_shell/prevalidation.ml index 8de7d150528e..6dd5ce86eabe 100644 --- a/src/lib_shell/prevalidation.ml +++ b/src/lib_shell/prevalidation.ml @@ -67,6 +67,7 @@ module type T = sig val status: t -> status tzresult Lwt.t + val pp_result: Format.formatter -> result -> unit end module Make(Proto : Registered_protocol.T) : T with module Proto = Proto = struct @@ -199,6 +200,16 @@ module Make(Proto : Registered_protocol.T) : T with module Proto = Proto = struc applied_operations = pv.applied ; } + let pp_result ppf = + let open Format in + function + | Applied _ -> pp_print_string ppf "applied" + | Branch_delayed err -> fprintf ppf "branch delayed (%a)" pp_print_error err + | Branch_refused err -> fprintf ppf "branch refused (%a)" pp_print_error err + | Refused err -> fprintf ppf "refused (%a)" pp_print_error err + | Duplicate -> pp_print_string ppf "duplicate" + | Outdated -> pp_print_string ppf "outdated" + end let preapply ~predecessor ~timestamp ~protocol_data operations = diff --git a/src/lib_shell/prevalidation.mli b/src/lib_shell/prevalidation.mli index d429aa818a0b..f6810a0e8f26 100644 --- a/src/lib_shell/prevalidation.mli +++ b/src/lib_shell/prevalidation.mli @@ -70,6 +70,7 @@ module type T = sig val status: t -> status tzresult Lwt.t + val pp_result: Format.formatter -> result -> unit end module Make(Proto : Registered_protocol.T) : T with module Proto = Proto diff --git a/src/lib_shell/prevalidator.ml b/src/lib_shell/prevalidator.ml index d3467a0aa159..6647d5c2a6e2 100644 --- a/src/lib_shell/prevalidator.ml +++ b/src/lib_shell/prevalidator.ml @@ -570,8 +570,10 @@ module Make(Proto: Registered_protocol.T)(Arg: ARG): T = struct Distributed_db.inject_operation pv.chain_db oph op >>= fun (_ : bool) -> pv.pending <- Operation_hash.Map.add parsed_op.hash op pv.pending ; return_unit - | _ -> - failwith "Error while applying operation %a" Operation_hash.pp oph + | res -> + failwith "Error while applying operation %a:@ %a" + Operation_hash.pp oph + Prevalidation.pp_result res let on_notify w pv peer mempool = let all_ophs = -- GitLab