Skip to content

Commit 2bf5ca3

Browse files
committed
refactor(snark_work_verify): Combine all action types of the snark_work_verify module into the parent action type
1 parent 414f416 commit 2bf5ca3

File tree

8 files changed

+152
-234
lines changed

8 files changed

+152
-234
lines changed

node/src/event_source/event_source_effects.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ use crate::rpc::{
4646
RpcSyncStatsGetAction,
4747
};
4848
use crate::snark::block_verify::SnarkBlockVerifyAction;
49-
use crate::snark::work_verify::{SnarkWorkVerifyErrorAction, SnarkWorkVerifySuccessAction};
49+
use crate::snark::work_verify::SnarkWorkVerifyAction;
5050
use crate::snark::SnarkEvent;
5151
use crate::{Service, Store};
5252

@@ -245,10 +245,10 @@ pub fn event_source_effects<S: Service>(store: &mut Store<S>, action: EventSourc
245245
},
246246
SnarkEvent::WorkVerify(req_id, result) => match result {
247247
Err(error) => {
248-
store.dispatch(SnarkWorkVerifyErrorAction { req_id, error });
248+
store.dispatch(SnarkWorkVerifyAction::Error { req_id, error });
249249
}
250250
Ok(()) => {
251-
store.dispatch(SnarkWorkVerifySuccessAction { req_id });
251+
store.dispatch(SnarkWorkVerifyAction::Success { req_id });
252252
}
253253
},
254254
},

node/src/logger/logger_effects.rs

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -525,39 +525,43 @@ pub fn logger_effects<S: Service>(store: &Store<S>, action: ActionWithMetaRef<'_
525525
}
526526
Action::Snark(a) => match a {
527527
SnarkAction::WorkVerify(a) => match a {
528-
SnarkWorkVerifyAction::Init(a) => {
528+
SnarkWorkVerifyAction::Init {
529+
req_id,
530+
batch,
531+
sender,
532+
} => {
529533
openmina_core::log::info!(
530534
meta.time();
531535
kind = kind.to_string(),
532-
summary = format!("id: {}, batch size: {}", a.req_id, a.batch.len()),
533-
peer_id = a.sender,
534-
rpc_id = a.req_id.to_string(),
535-
trace_batch = serde_json::to_string(&a.batch.iter().map(|v| v.job_id()).collect::<Vec<_>>()).ok()
536+
summary = format!("id: {}, batch size: {}", req_id, batch.len()),
537+
peer_id = sender,
538+
rpc_id = req_id.to_string(),
539+
trace_batch = serde_json::to_string(&batch.iter().map(|v| v.job_id()).collect::<Vec<_>>()).ok()
536540
);
537541
}
538-
SnarkWorkVerifyAction::Error(a) => {
539-
let Some(req) = store.state().snark.work_verify.jobs.get(a.req_id) else {
542+
SnarkWorkVerifyAction::Error { req_id, .. } => {
543+
let Some(req) = store.state().snark.work_verify.jobs.get(*req_id) else {
540544
return;
541545
};
542546
openmina_core::log::warn!(
543547
meta.time();
544548
kind = kind.to_string(),
545-
summary = format!("id: {}, batch size: {}", a.req_id, req.batch().len()),
549+
summary = format!("id: {}, batch size: {}", req_id, req.batch().len()),
546550
peer_id = req.sender(),
547-
rpc_id = a.req_id.to_string(),
551+
rpc_id = req_id.to_string(),
548552
trace_batch = serde_json::to_string(&req.batch().iter().map(|v| v.job_id()).collect::<Vec<_>>()).ok()
549553
);
550554
}
551-
SnarkWorkVerifyAction::Success(a) => {
552-
let Some(req) = store.state().snark.work_verify.jobs.get(a.req_id) else {
555+
SnarkWorkVerifyAction::Success { req_id } => {
556+
let Some(req) = store.state().snark.work_verify.jobs.get(*req_id) else {
553557
return;
554558
};
555559
openmina_core::log::info!(
556560
meta.time();
557561
kind = kind.to_string(),
558-
summary = format!("id: {}, batch size: {}", a.req_id, req.batch().len()),
562+
summary = format!("id: {}, batch size: {}", req_id, req.batch().len()),
559563
peer_id = req.sender(),
560-
rpc_id = a.req_id.to_string(),
564+
rpc_id = req_id.to_string(),
561565
trace_batch = serde_json::to_string(&req.batch().iter().map(|v| v.job_id()).collect::<Vec<_>>()).ok()
562566
);
563567
}

node/src/snark/snark_effects.rs

Lines changed: 40 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -12,47 +12,52 @@ pub fn snark_effects<S: Service>(store: &mut Store<S>, action: SnarkActionWithMe
1212

1313
match action {
1414
SnarkAction::BlockVerify(a) => {
15-
if let SnarkBlockVerifyAction::Success { req_id } = a {
16-
let req = store.state().snark.block_verify.jobs.get(req_id);
17-
let Some(req) = req else { return };
18-
store.dispatch(ConsensusAction::BlockSnarkVerifySuccess {
19-
hash: req.block().hash_ref().clone(),
20-
});
15+
match a {
16+
SnarkBlockVerifyAction::Success { req_id } => {
17+
let req = store.state().snark.block_verify.jobs.get(req_id);
18+
let Some(req) = req else { return };
19+
store.dispatch(ConsensusAction::BlockSnarkVerifySuccess {
20+
hash: req.block().hash_ref().clone(),
21+
});
22+
}
23+
SnarkBlockVerifyAction::Init { .. } => {}
24+
SnarkBlockVerifyAction::Pending { .. } => {}
25+
SnarkBlockVerifyAction::Error { .. } => {}
26+
SnarkBlockVerifyAction::Finish { .. } => {}
2127
}
2228
a.effects(&meta, store);
2329
}
24-
SnarkAction::WorkVerify(a) => match a {
25-
SnarkWorkVerifyAction::Init(a) => {
26-
a.effects(&meta, store);
27-
}
28-
SnarkWorkVerifyAction::Pending(_) => {}
29-
SnarkWorkVerifyAction::Error(a) => {
30-
let req = store.state().snark.work_verify.jobs.get(a.req_id);
31-
let Some(req) = req else { return };
32-
let sender = req.sender().parse().unwrap();
30+
SnarkAction::WorkVerify(a) => {
31+
match a {
32+
SnarkWorkVerifyAction::Error { req_id, .. } => {
33+
let req = store.state().snark.work_verify.jobs.get(req_id);
34+
let Some(req) = req else { return };
35+
let sender = req.sender().parse().unwrap();
3336

34-
store.dispatch(SnarkPoolCandidateAction::WorkVerifyError {
35-
peer_id: sender,
36-
verify_id: a.req_id,
37-
});
38-
a.effects(&meta, store);
39-
}
40-
SnarkWorkVerifyAction::Success(a) => {
41-
let req = store.state().snark.work_verify.jobs.get(a.req_id);
42-
let Some(req) = req else { return };
43-
let sender = req.sender().parse().unwrap();
44-
let batch = req.batch().to_vec();
37+
store.dispatch(SnarkPoolCandidateAction::WorkVerifyError {
38+
peer_id: sender,
39+
verify_id: req_id,
40+
});
41+
}
42+
SnarkWorkVerifyAction::Success { req_id } => {
43+
let req = store.state().snark.work_verify.jobs.get(req_id);
44+
let Some(req) = req else { return };
45+
let sender = req.sender().parse().unwrap();
46+
let batch = req.batch().to_vec();
4547

46-
store.dispatch(SnarkPoolCandidateAction::WorkVerifySuccess {
47-
peer_id: sender,
48-
verify_id: a.req_id,
49-
});
50-
for snark in batch {
51-
store.dispatch(SnarkPoolWorkAddAction { snark, sender });
48+
store.dispatch(SnarkPoolCandidateAction::WorkVerifySuccess {
49+
peer_id: sender,
50+
verify_id: req_id,
51+
});
52+
for snark in batch {
53+
store.dispatch(SnarkPoolWorkAddAction { snark, sender });
54+
}
5255
}
53-
a.effects(&meta, store);
56+
SnarkWorkVerifyAction::Init { .. } => {}
57+
SnarkWorkVerifyAction::Pending { .. } => {}
58+
SnarkWorkVerifyAction::Finish { .. } => {}
5459
}
55-
SnarkWorkVerifyAction::Finish(_) => {}
56-
},
60+
a.effects(&meta, store);
61+
}
5762
}
5863
}
Lines changed: 4 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,13 @@
11
use super::*;
22

3-
impl redux::EnablingCondition<crate::State> for SnarkWorkVerifyInitAction {
3+
impl redux::EnablingCondition<crate::State> for SnarkWorkVerifyAction {
44
fn is_enabled(&self, state: &crate::State) -> bool {
55
self.is_enabled(&state.snark)
66
}
77
}
88

9-
impl redux::EnablingCondition<crate::State> for SnarkWorkVerifyPendingAction {
10-
fn is_enabled(&self, state: &crate::State) -> bool {
11-
self.is_enabled(&state.snark)
12-
}
13-
}
14-
15-
impl redux::EnablingCondition<crate::State> for SnarkWorkVerifyErrorAction {
16-
fn is_enabled(&self, state: &crate::State) -> bool {
17-
self.is_enabled(&state.snark)
18-
}
19-
}
20-
21-
impl redux::EnablingCondition<crate::State> for SnarkWorkVerifySuccessAction {
22-
fn is_enabled(&self, state: &crate::State) -> bool {
23-
self.is_enabled(&state.snark)
24-
}
25-
}
26-
27-
impl redux::EnablingCondition<crate::State> for SnarkWorkVerifyFinishAction {
28-
fn is_enabled(&self, state: &crate::State) -> bool {
29-
self.is_enabled(&state.snark)
30-
}
31-
}
32-
33-
impl From<SnarkWorkVerifyInitAction> for crate::Action {
34-
fn from(a: SnarkWorkVerifyInitAction) -> Self {
35-
Self::Snark(a.into())
36-
}
37-
}
38-
39-
impl From<SnarkWorkVerifyErrorAction> for crate::Action {
40-
fn from(a: SnarkWorkVerifyErrorAction) -> Self {
41-
Self::Snark(a.into())
42-
}
43-
}
44-
45-
impl From<SnarkWorkVerifySuccessAction> for crate::Action {
46-
fn from(a: SnarkWorkVerifySuccessAction) -> Self {
47-
Self::Snark(a.into())
9+
impl From<SnarkWorkVerifyAction> for crate::Action {
10+
fn from(value: SnarkWorkVerifyAction) -> Self {
11+
Self::Snark(value.into())
4812
}
4913
}

node/src/snark_pool/candidate/snark_pool_candidate_effects.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::collections::BTreeMap;
22

3-
use snark::work_verify::SnarkWorkVerifyInitAction;
3+
use snark::work_verify::SnarkWorkVerifyAction;
44

55
use crate::p2p::channels::rpc::{P2pChannelsRpcRequestSendAction, P2pRpcRequest};
66
use crate::p2p::disconnection::{P2pDisconnectionInitAction, P2pDisconnectionReason};
@@ -71,7 +71,7 @@ pub fn snark_pool_candidate_effects<S: redux::Service>(
7171
let req_id = state.snark.work_verify.next_req_id();
7272
let job_ids = batch.iter().map(|v| v.job_id()).collect::<Vec<_>>();
7373
let sender = peer_id.to_string();
74-
store.dispatch(SnarkWorkVerifyInitAction {
74+
store.dispatch(SnarkWorkVerifyAction::Init {
7575
req_id,
7676
batch,
7777
sender,

snark/src/work_verify/snark_work_verify_actions.rs

Lines changed: 53 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -7,101 +7,62 @@ use super::{SnarkWorkVerifyError, SnarkWorkVerifyId};
77
pub type SnarkWorkVerifyActionWithMeta = redux::ActionWithMeta<SnarkWorkVerifyAction>;
88
pub type SnarkWorkVerifyActionWithMetaRef<'a> = redux::ActionWithMeta<&'a SnarkWorkVerifyAction>;
99

10-
#[derive(derive_more::From, Serialize, Deserialize, Debug, Clone)]
11-
pub enum SnarkWorkVerifyAction {
12-
Init(SnarkWorkVerifyInitAction),
13-
Pending(SnarkWorkVerifyPendingAction),
14-
Error(SnarkWorkVerifyErrorAction),
15-
Success(SnarkWorkVerifySuccessAction),
16-
Finish(SnarkWorkVerifyFinishAction),
17-
}
18-
19-
#[derive(Serialize, Deserialize, Debug, Clone)]
20-
pub struct SnarkWorkVerifyInitAction {
21-
pub req_id: SnarkWorkVerifyId,
22-
pub batch: Vec<Snark>,
23-
pub sender: String,
24-
}
25-
26-
impl redux::EnablingCondition<crate::SnarkState> for SnarkWorkVerifyInitAction {
27-
fn is_enabled(&self, state: &crate::SnarkState) -> bool {
28-
!self.batch.is_empty() && state.work_verify.jobs.next_req_id() == self.req_id
29-
}
30-
}
31-
3210
#[derive(Serialize, Deserialize, Debug, Clone)]
33-
pub struct SnarkWorkVerifyPendingAction {
34-
pub req_id: SnarkWorkVerifyId,
35-
}
36-
37-
impl redux::EnablingCondition<crate::SnarkState> for SnarkWorkVerifyPendingAction {
38-
fn is_enabled(&self, state: &crate::SnarkState) -> bool {
39-
state
40-
.work_verify
41-
.jobs
42-
.get(self.req_id)
43-
.map_or(false, |v| v.is_init())
44-
}
45-
}
46-
47-
#[derive(Serialize, Deserialize, Debug, Clone)]
48-
pub struct SnarkWorkVerifyErrorAction {
49-
pub req_id: SnarkWorkVerifyId,
50-
pub error: SnarkWorkVerifyError,
51-
}
52-
53-
impl redux::EnablingCondition<crate::SnarkState> for SnarkWorkVerifyErrorAction {
54-
fn is_enabled(&self, state: &crate::SnarkState) -> bool {
55-
state
56-
.work_verify
57-
.jobs
58-
.get(self.req_id)
59-
.map_or(false, |v| v.is_pending())
60-
}
61-
}
62-
63-
#[derive(Serialize, Deserialize, Debug, Clone)]
64-
pub struct SnarkWorkVerifySuccessAction {
65-
pub req_id: SnarkWorkVerifyId,
66-
}
67-
68-
impl redux::EnablingCondition<crate::SnarkState> for SnarkWorkVerifySuccessAction {
69-
fn is_enabled(&self, state: &crate::SnarkState) -> bool {
70-
state
71-
.work_verify
72-
.jobs
73-
.get(self.req_id)
74-
.map_or(false, |v| v.is_pending())
75-
}
76-
}
77-
78-
#[derive(Serialize, Deserialize, Debug, Clone)]
79-
pub struct SnarkWorkVerifyFinishAction {
80-
pub req_id: SnarkWorkVerifyId,
11+
pub enum SnarkWorkVerifyAction {
12+
Init {
13+
req_id: SnarkWorkVerifyId,
14+
batch: Vec<Snark>,
15+
sender: String,
16+
},
17+
Pending {
18+
req_id: SnarkWorkVerifyId,
19+
},
20+
Error {
21+
req_id: SnarkWorkVerifyId,
22+
error: SnarkWorkVerifyError,
23+
},
24+
Success {
25+
req_id: SnarkWorkVerifyId,
26+
},
27+
Finish {
28+
req_id: SnarkWorkVerifyId,
29+
},
8130
}
8231

83-
impl redux::EnablingCondition<crate::SnarkState> for SnarkWorkVerifyFinishAction {
32+
impl redux::EnablingCondition<crate::SnarkState> for SnarkWorkVerifyAction {
8433
fn is_enabled(&self, state: &crate::SnarkState) -> bool {
85-
state
86-
.work_verify
87-
.jobs
88-
.get(self.req_id)
89-
.map_or(false, |v| v.is_finished())
90-
}
91-
}
92-
93-
macro_rules! impl_into_snark_action {
94-
($a:ty) => {
95-
impl From<$a> for crate::SnarkAction {
96-
fn from(value: $a) -> Self {
97-
Self::WorkVerify(value.into())
98-
}
34+
match self {
35+
SnarkWorkVerifyAction::Init { req_id, batch, .. } => {
36+
!batch.is_empty() && state.work_verify.jobs.next_req_id() == *req_id
37+
},
38+
SnarkWorkVerifyAction::Pending { req_id } => {
39+
state
40+
.work_verify
41+
.jobs
42+
.get(*req_id)
43+
.map_or(false, |v| v.is_init())
44+
},
45+
SnarkWorkVerifyAction::Error { req_id, .. } => {
46+
state
47+
.work_verify
48+
.jobs
49+
.get(*req_id)
50+
.map_or(false, |v| v.is_pending())
51+
},
52+
SnarkWorkVerifyAction::Success { req_id } => {
53+
state
54+
.work_verify
55+
.jobs
56+
.get(*req_id)
57+
.map_or(false, |v| v.is_pending())
58+
},
59+
SnarkWorkVerifyAction::Finish { req_id } => {
60+
state
61+
.work_verify
62+
.jobs
63+
.get(*req_id)
64+
.map_or(false, |v| v.is_finished())
65+
},
9966
}
100-
};
67+
}
10168
}
102-
103-
impl_into_snark_action!(SnarkWorkVerifyInitAction);
104-
impl_into_snark_action!(SnarkWorkVerifyPendingAction);
105-
impl_into_snark_action!(SnarkWorkVerifyErrorAction);
106-
impl_into_snark_action!(SnarkWorkVerifySuccessAction);
107-
impl_into_snark_action!(SnarkWorkVerifyFinishAction);

0 commit comments

Comments
 (0)