Skip to content

Commit 64824b4

Browse files
authored
Merge pull request #17730 from MinaProtocol/georgeee/use-stricter-error-type-in-work-paritioner
Use stricter error type in Work partitioner
2 parents 35d121c + 729471a commit 64824b4

File tree

4 files changed

+31
-16
lines changed

4 files changed

+31
-16
lines changed

src/lib/snark_worker/prod.ml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,18 +136,21 @@ module Impl = struct
136136

137137
let perform_single_untimed ~(m : (module Worker_state.S)) ~logger
138138
~proof_cache_db ~single_spec ~signature_kind ~sok_digest () =
139-
let open Deferred.Or_error.Let_syntax in
139+
let open Deferred.Result.Let_syntax in
140140
let (module M) = m in
141141
match single_spec with
142142
| Work.Work.Single.Spec.Transition
143143
(input, (w : Transaction_witness.Stable.Latest.t)) -> (
144+
(* TODO: remove this case after delivering the full snark worker
145+
optimization PR series *)
144146
match w.transaction with
145147
| Command (Zkapp_command zkapp_command) -> (
146148
let%bind witnesses_specs_stmts =
147149
extract_zkapp_segment_works ~m ~input ~witness:w
148150
~zkapp_command:
149151
(Zkapp_command.write_all_proofs_to_disk ~signature_kind
150152
~proof_cache_db zkapp_command )
153+
|> Result.map_error ~f:Failed_to_generate_inputs.error_of_t
151154
|> Deferred.return
152155
in
153156
match Mina_stdlib.Nonempty_list.uncons witnesses_specs_stmts with

src/lib/work_partitioner/snark_worker_shared.ml

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,24 @@ module Zkapp_command_inputs = struct
4040
, stmt ) )
4141
end
4242

43+
module Failed_to_generate_inputs = struct
44+
type t = [ `Failed_to_generate_inputs of Zkapp_command.t * Error.t ]
45+
46+
(* TODO: remove this after fully delivering the snark worker
47+
optimization PR series *)
48+
let error_of_t (`Failed_to_generate_inputs (tx, e) : t) =
49+
Error.tag_s e
50+
~tag:
51+
( Zkapp_command.Stable.Latest.sexp_of_t
52+
@@ Zkapp_command.read_all_proofs_from_disk tx )
53+
|> Error.tag ~tag:"failed to generate inputs for zkapp command"
54+
end
55+
4356
let extract_zkapp_segment_works ~m:(module M : S)
4457
~(input : Mina_state.Snarked_ledger_state.t)
4558
~(witness : Transaction_witness.Stable.Latest.t)
46-
~(zkapp_command : Zkapp_command.t) : Zkapp_command_inputs.t Or_error.t =
59+
~(zkapp_command : Zkapp_command.t) :
60+
(Zkapp_command_inputs.t, Failed_to_generate_inputs.t) Result.t =
4761
let inputs =
4862
Or_error.try_with (fun () ->
4963
Transaction_snark.zkapp_command_witnesses_exn
@@ -67,12 +81,7 @@ let extract_zkapp_segment_works ~m:(module M : S)
6781
in
6882
match inputs with
6983
| Error e ->
70-
Error
71-
(Error.createf
72-
!"Failed to generate inputs for zkapp_command : %s: %s"
73-
( Zkapp_command.read_all_proofs_from_disk zkapp_command
74-
|> Zkapp_command.Stable.Latest.to_yojson |> Yojson.Safe.to_string )
75-
(Error.to_string_hum e) )
84+
Result.fail (`Failed_to_generate_inputs (zkapp_command, e))
7685
| Ok (first_segment :: rest_segments) ->
7786
Ok (Nonempty_list.init first_segment rest_segments)
7887
| Ok [] ->

src/lib/work_partitioner/work_partitioner.ml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ let reschedule_if_old ~reassignment_timeout
7070
let reschedule_old_zkapp_job
7171
~partitioner:
7272
({ reassignment_timeout; zkapp_jobs_sent_by_partitioner; _ } : t) :
73-
Work.Spec.Partitioned.Stable.Latest.t Or_error.t option =
73+
(Work.Spec.Partitioned.Stable.Latest.t, _) Result.t option =
7474
let%map.Option job =
7575
Sent_zkapp_job_pool.remove_until_reschedule
7676
~f:(reschedule_if_old ~reassignment_timeout)
@@ -81,7 +81,7 @@ let reschedule_old_zkapp_job
8181
let reschedule_old_single_job
8282
~partitioner:
8383
({ reassignment_timeout; single_jobs_sent_by_partitioner; _ } : t) :
84-
Work.Spec.Partitioned.Stable.Latest.t Or_error.t option =
84+
(Work.Spec.Partitioned.Stable.Latest.t, _) Result.t option =
8585
let%map.Option job =
8686
Sent_single_job_pool.remove_until_reschedule
8787
~f:(reschedule_if_old ~reassignment_timeout)
@@ -118,7 +118,7 @@ let schedule_from_pending_zkapp_command ~(id : Work.Id.Single.t)
118118
~pending
119119

120120
let schedule_from_any_pending_zkapp_command ~(partitioner : t) :
121-
Work.Spec.Partitioned.Stable.Latest.t Or_error.t option =
121+
(Work.Spec.Partitioned.Stable.Latest.t, _) Result.t option =
122122
let spec_generated = ref None in
123123
(* TODO: Consider remove all works no longer relevant for current frontier,
124124
this may need changes from underlying work selector. *)
@@ -155,7 +155,7 @@ let convert_zkapp_command_from_selector ~partitioner ~job ~pairing
155155

156156
let convert_single_work_from_selector ~(partitioner : t)
157157
~(single_spec : Work.Spec.Single.t) ~sok_message ~pairing :
158-
Work.Spec.Partitioned.Stable.Latest.t Or_error.t =
158+
(Work.Spec.Partitioned.Stable.Latest.t, _) Result.t =
159159
let job =
160160
Work.With_job_meta.
161161
{ spec = single_spec
@@ -208,7 +208,7 @@ let schedule_from_tmp_slot ~(partitioner : t) =
208208
~sok_message
209209

210210
let schedule_job_from_partitioner ~(partitioner : t) :
211-
Work.Spec.Partitioned.Stable.Latest.t Or_error.t option =
211+
(Work.Spec.Partitioned.Stable.Latest.t, _) Result.t option =
212212
List.find_map ~f:Lazy.force
213213
[ lazy (reschedule_old_zkapp_job ~partitioner)
214214
; lazy (reschedule_old_single_job ~partitioner)
@@ -220,7 +220,7 @@ let schedule_job_from_partitioner ~(partitioner : t) :
220220
let consume_job_from_selector ~(partitioner : t)
221221
~(sok_message : Mina_base.Sok_message.t)
222222
~(instances : Work.Spec.Single.t One_or_two.t) :
223-
Work.Spec.Partitioned.Stable.Latest.t Or_error.t =
223+
(Work.Spec.Partitioned.Stable.Latest.t, _) Result.t =
224224
let pairing_id = Id_generator.next_id partitioner.single_id_gen () in
225225
Hashtbl.add_exn partitioner.pairing_pool ~key:pairing_id
226226
~data:(Spec_only { spec = instances; sok_message }) ;
@@ -248,7 +248,7 @@ let request_from_selector_and_consume_by_partitioner ~(partitioner : t)
248248

249249
let request_partitioned_work ~(sok_message : Mina_base.Sok_message.t)
250250
~(work_from_selector : work_from_selector) ~(partitioner : t) :
251-
Work.Spec.Partitioned.Stable.Latest.t Or_error.t option =
251+
(Work.Spec.Partitioned.Stable.Latest.t, _) Result.t option =
252252
List.find_map ~f:Lazy.force
253253
[ lazy (schedule_job_from_partitioner ~partitioner)
254254
; lazy

src/lib/work_partitioner/work_partitioner.mli

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@ val request_partitioned_work :
5656
sok_message:Mina_base.Sok_message.t
5757
-> work_from_selector:work_from_selector
5858
-> partitioner:t
59-
-> Snark_work_lib.Spec.Partitioned.Stable.V1.t Or_error.t option
59+
-> ( Snark_work_lib.Spec.Partitioned.Stable.V1.t
60+
, Snark_worker_shared.Failed_to_generate_inputs.t )
61+
Result.t
62+
option
6063

6164
type submit_result =
6265
| SpecUnmatched (** Submitted work doesn't match the scheme in pool *)

0 commit comments

Comments
 (0)