Skip to content

Commit dbd2bfb

Browse files
committed
Merge branch 'lyh/update-snark-worker-rpc-jun-12' into lyh/update-snark-worker-rpc-jun-12-testing
2 parents 1486e73 + 67b3c3e commit dbd2bfb

File tree

7 files changed

+64
-32
lines changed

7 files changed

+64
-32
lines changed

src/lib/mina_lib/mina_lib.ml

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -914,20 +914,41 @@ let add_work t (work : Snark_work_lib.Result.Partitioned.Stable.Latest.t) =
914914
`Removed
915915
| Processed None ->
916916
`Ok
917-
| Processed (Some (stmts, priced_proof)) ->
917+
| Processed (Some { spec_with_proof; fee; prover }) ->
918+
let proofs = spec_with_proof |> One_or_two.map ~f:Tuple2.get2 in
919+
let fee_with_prover = Fee_with_prover.{ fee; prover } in
920+
let spec = One_or_two.map ~f:Tuple2.get1 spec_with_proof in
921+
let stmts =
922+
spec_with_proof
923+
|> One_or_two.map ~f:(fun (spec, _) ->
924+
Snark_work_lib.Selector.Single.Spec.Poly.statement spec )
925+
in
918926
[%log' info t.config.logger] "Partitioner combined work"
919927
~metadata:
920928
[ ( "stmts"
921929
, One_or_two.to_yojson Mina_state.Snarked_ledger_state.to_yojson
922930
stmts )
923-
; ("fee_with_prover", Fee_with_prover.to_yojson priced_proof.fee)
924-
; ( "proofs"
925-
, One_or_two.to_yojson Ledger_proof.to_yojson priced_proof.proof )
931+
; ("fee_with_prover", Fee_with_prover.to_yojson fee_with_prover)
932+
; ("proofs", proofs |> One_or_two.to_yojson Ledger_proof.to_yojson)
926933
] ;
927934
ignore (Or_error.try_with (fun () -> update_metrics ()) : unit Or_error.t) ;
928935
Network_pool.Snark_pool.(
929936
Local_sink.push t.pipes.snark_local_sink
930-
(Add_solved_work (stmts, priced_proof), ignore))
937+
( Add_solved_work
938+
( stmts
939+
, Network_pool.Priced_proof.
940+
{ proof = proofs; fee = fee_with_prover } )
941+
, Result.iter_error ~f:(fun err ->
942+
[%log' info t.config.logger]
943+
"Failed to push completed work to local snark sink, \
944+
returning them to work selector"
945+
~metadata:
946+
[ ( "stmts"
947+
, One_or_two.to_yojson
948+
Mina_state.Snarked_ledger_state.to_yojson stmts )
949+
; ("error", `String (Error.to_string_hum err))
950+
] ;
951+
Work_selector.add_back t.work_selector spec ) ))
931952
|> Deferred.don't_wait_for ;
932953
`Ok
933954

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
open Mina_wire_types
2-
31
type t =
4-
Transaction_snark_work.Statement.V2.t
5-
* Ledger_proof.V2.t One_or_two.V1.t Network_pool_priced_proof.V1.t
2+
{ spec_with_proof : (Single_spec.t * Ledger_proof.t) One_or_two.t
3+
; fee : Currency.Fee.t
4+
; prover : Signature_lib.Public_key.Compressed.t
5+
}

src/lib/work_partitioner/combining_result.ml

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -31,42 +31,32 @@ let finalize_one ~submitted_result ~spec ~fee ~prover =
3131
~f_proof:Ledger_proof.Cached.read_proof_from_disk submitted_result
3232
in
3333
let Snark_work_lib.Result.Single.Poly.{ proof; _ } = submitted_result in
34-
let statements =
35-
`One (Snark_work_lib.Selector.Single.Spec.Poly.statement spec)
36-
in
37-
Done
38-
( statements
39-
, Mina_wire_types.Network_pool_priced_proof.V1.
40-
{ proof = `One proof; fee = { fee; prover } } )
34+
Done { spec_with_proof = `One (spec, proof); fee; prover }
4135

4236
let finalize_two ~submitted_result ~other_spec ~in_pool_result ~submitted_half
4337
~fee ~prover =
4438
let submitted_result =
45-
Snark_work_lib.Result.Single.Poly.map ~f_spec:(const other_spec)
46-
~f_proof:Ledger_proof.Cached.read_proof_from_disk submitted_result
39+
let Snark_work_lib.Result.Single.Poly.{ spec; proof; _ } =
40+
Snark_work_lib.Result.Single.Poly.map ~f_spec:(const other_spec)
41+
~f_proof:Ledger_proof.Cached.read_proof_from_disk submitted_result
42+
in
43+
(spec, proof)
4744
in
4845
let in_pool_result =
49-
Snark_work_lib.Result.Single.Poly.map ~f_spec:Fn.id
50-
~f_proof:Ledger_proof.Cached.read_proof_from_disk in_pool_result
46+
let Snark_work_lib.Result.Single.Poly.{ spec; proof; _ } =
47+
Snark_work_lib.Result.Single.Poly.map ~f_spec:Fn.id
48+
~f_proof:Ledger_proof.Cached.read_proof_from_disk in_pool_result
49+
in
50+
(spec, proof)
5151
in
52-
let results =
52+
let spec_with_proof =
5353
match submitted_half with
5454
| `First ->
5555
`Two (submitted_result, in_pool_result)
5656
| `Second ->
5757
`Two (in_pool_result, submitted_result)
5858
in
59-
let statements =
60-
One_or_two.map
61-
~f:(fun result ->
62-
Snark_work_lib.Selector.Single.Spec.Poly.statement result.spec )
63-
results
64-
in
65-
let proof = One_or_two.map ~f:(fun result -> result.proof) results in
66-
Done
67-
( statements
68-
, Mina_wire_types.Network_pool_priced_proof.V1.
69-
{ proof; fee = { fee; prover } } )
59+
Done { spec_with_proof; fee; prover }
7060

7161
let merge_single_result (current : t) ~logger
7262
~(submitted_result :

src/lib/work_selector/intf.ml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,16 @@ module type Lib_intf = sig
136136
Snark_work_lib.Work.Single.Spec.t
137137
One_or_two.t
138138
list
139+
140+
(** [add_back t work] add back a work manually, usually this is needed when
141+
proof verification failed *)
142+
val add_back :
143+
t
144+
-> ( Transaction_witness.t
145+
, Ledger_proof.Cached.t )
146+
Snark_work_lib.Work.Single.Spec.t
147+
One_or_two.t
148+
-> unit
139149
end
140150

141151
(**jobs that are not in the snark pool yet*)

src/lib/work_selector/work_lib.ml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,18 @@ module Make (Inputs : Intf.Inputs_intf) = struct
103103
Fee.compare fee competing_fee < 0 )
104104

105105
let all_unscheduled_expensive_works ~snark_pool ~fee (t : t) =
106+
(* WARN: Always use filtering as [add_back] may causes work pool to have duplicates *)
106107
O1trace.sync_thread "work_lib_all_unscheduled_expensive_works" (fun () ->
107108
List.filter t.available_jobs ~f:(fun job ->
108109
let job_key = Job_key.of_job job in
109110
(not (Job_key_set.mem t.jobs_scheduled job_key))
110111
&& does_not_have_better_fee ~snark_pool ~fee job_key ) )
112+
113+
let add_back (state : t) x =
114+
state.jobs_scheduled <-
115+
Job_key_set.remove state.jobs_scheduled
116+
(One_or_two.map ~f:Work_spec.statement x) ;
117+
state.available_jobs <- x :: state.available_jobs
111118
end
112119

113120
let all_pending_work ~snark_pool statements =

src/lib/work_selector/work_selector.ml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,5 @@ let pending_work_statements = Lib.pending_work_statements
2626
let all_work = Lib.all_work
2727

2828
let completed_work_statements = Lib.completed_work_statements
29+
30+
let add_back = Lib.State.add_back

src/lib/work_selector/work_selector.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,5 @@ val all_work :
3939

4040
val completed_work_statements :
4141
snark_pool:snark_pool -> State.t -> Transaction_snark_work.Checked.t list
42+
43+
val add_back : State.t -> work One_or_two.t -> unit

0 commit comments

Comments
 (0)