Skip to content

Commit e10f11c

Browse files
authored
Merge pull request #6080 from jferrant/chore/cleanup-signers-send-response
Chore/signer: Use send_block_response where possible
2 parents 1ab867d + 1f833be commit e10f11c

File tree

1 file changed

+51
-90
lines changed

1 file changed

+51
-90
lines changed

stacks-signer/src/v0/signer.rs

Lines changed: 51 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -408,13 +408,8 @@ impl Signer {
408408
block_response,
409409
sortition_state,
410410
),
411-
SignerMessage::StateMachineUpdate(update) => {
412-
self.handle_state_machine_update(
413-
signer_public_key,
414-
update,
415-
received_time,
416-
);
417-
}
411+
SignerMessage::StateMachineUpdate(update) => self
412+
.handle_state_machine_update(signer_public_key, update, received_time),
418413
_ => {}
419414
}
420415
}
@@ -670,22 +665,43 @@ impl Signer {
670665

671666
/// The actual `send_block_response` implementation. Declared so that we do
672667
/// not need to duplicate in testing.
673-
fn impl_send_block_response(&mut self, block_response: BlockResponse) {
674-
let res = self
668+
fn impl_send_block_response(
669+
&mut self,
670+
block: Option<&NakamotoBlock>,
671+
block_response: BlockResponse,
672+
) {
673+
info!(
674+
"{self}: Broadcasting a block response to stacks node: {block_response:?}";
675+
);
676+
let accepted = matches!(block_response, BlockResponse::Accepted(..));
677+
match self
675678
.stackerdb
676-
.send_message_with_retry::<SignerMessage>(block_response.clone().into());
677-
match res {
678-
Err(e) => warn!("{self}: Failed to send block rejection to stacker-db: {e:?}"),
679-
Ok(ack) if !ack.accepted => warn!(
680-
"{self}: Block rejection not accepted by stacker-db: {:?}",
681-
ack.reason
682-
),
683-
Ok(_) => debug!("{self}: Block rejection accepted by stacker-db"),
679+
.send_message_with_retry::<SignerMessage>(block_response.into())
680+
{
681+
Ok(ack) => {
682+
if !ack.accepted {
683+
warn!(
684+
"{self}: Block response not accepted by stacker-db: {:?}",
685+
ack.reason
686+
);
687+
}
688+
crate::monitoring::actions::increment_block_responses_sent(accepted);
689+
if let Some(block) = block {
690+
crate::monitoring::actions::record_block_response_latency(block);
691+
}
692+
}
693+
Err(e) => {
694+
warn!("{self}: Failed to send block response to stacker-db: {e:?}",);
695+
}
684696
}
685697
}
686698

687699
#[cfg(any(test, feature = "testing"))]
688-
fn send_block_response(&mut self, block_response: BlockResponse) {
700+
fn send_block_response(
701+
&mut self,
702+
block: Option<&NakamotoBlock>,
703+
block_response: BlockResponse,
704+
) {
689705
const NUM_REPEATS: usize = 1;
690706
let mut count = 0;
691707
let public_keys = TEST_REPEAT_PROPOSAL_RESPONSE.get();
@@ -695,16 +711,20 @@ impl Signer {
695711
count = NUM_REPEATS;
696712
}
697713
while count <= NUM_REPEATS {
698-
self.impl_send_block_response(block_response.clone());
714+
self.impl_send_block_response(block, block_response.clone());
699715

700716
count += 1;
701717
sleep_ms(1000);
702718
}
703719
}
704720

705721
#[cfg(not(any(test, feature = "testing")))]
706-
fn send_block_response(&mut self, block_response: BlockResponse) {
707-
self.impl_send_block_response(block_response)
722+
fn send_block_response(
723+
&mut self,
724+
block: Option<&NakamotoBlock>,
725+
block_response: BlockResponse,
726+
) {
727+
self.impl_send_block_response(block, block_response)
708728
}
709729

710730
/// Handle signer state update message
@@ -834,8 +854,7 @@ impl Signer {
834854

835855
if let Some(block_response) = block_response {
836856
// We know proposal is invalid. Send rejection message, do not do further validation and do not store it.
837-
debug!("{self}: Broadcasting a block response to stacks node: {block_response:?}");
838-
self.send_block_response(block_response);
857+
self.send_block_response(Some(&block_info.block), block_response);
839858
} else {
840859
// Just in case check if the last block validation submission timed out.
841860
self.check_submitted_block_proposal();
@@ -889,19 +908,7 @@ impl Signer {
889908
return;
890909
};
891910

892-
// Submit a proposal response to the .signers contract for miners
893-
debug!("{self}: Broadcasting a block response to stacks node: {block_response:?}");
894-
895-
let accepted = matches!(block_response, BlockResponse::Accepted(..));
896-
if let Err(e) = self
897-
.stackerdb
898-
.send_message_with_retry::<SignerMessage>(block_response.into())
899-
{
900-
warn!("{self}: Failed to send block response to stacker-db: {e:?}");
901-
} else {
902-
crate::monitoring::actions::increment_block_responses_sent(accepted);
903-
crate::monitoring::actions::record_block_response_latency(&block_info.block);
904-
}
911+
self.impl_send_block_response(Some(&block_info.block), block_response);
905912
}
906913

907914
/// Handle block response messages from a signer
@@ -1037,21 +1044,7 @@ impl Signer {
10371044
warn!("{self}: Failed to mark block as locally rejected: {e:?}");
10381045
}
10391046
};
1040-
debug!("{self}: Broadcasting a block response to stacks node: {block_response:?}");
1041-
let res = self
1042-
.stackerdb
1043-
.send_message_with_retry::<SignerMessage>(block_response.into());
1044-
1045-
crate::monitoring::actions::record_block_response_latency(&block_info.block);
1046-
1047-
match res {
1048-
Err(e) => warn!("{self}: Failed to send block rejection to stacker-db: {e:?}"),
1049-
Ok(ack) if !ack.accepted => warn!(
1050-
"{self}: Block rejection not accepted by stacker-db: {:?}",
1051-
ack.reason
1052-
),
1053-
Ok(_) => debug!("{self}: Block rejection accepted by stacker-db"),
1054-
}
1047+
self.impl_send_block_response(Some(&block_info.block), block_response);
10551048
self.signer_db
10561049
.insert_block(&block_info)
10571050
.unwrap_or_else(|e| self.handle_insert_block_error(e));
@@ -1158,30 +1151,12 @@ impl Signer {
11581151
.unwrap_or_else(|e| warn!("{self}: Failed to remove pending block validation: {e:?}"));
11591152

11601153
if let Some(response) = block_response {
1161-
// Submit a proposal response to the .signers contract for miners
1162-
info!(
1163-
"{self}: Broadcasting a block response to stacks node: {response:?}";
1164-
);
1165-
let accepted = matches!(response, BlockResponse::Accepted(..));
1166-
match self
1167-
.stackerdb
1168-
.send_message_with_retry::<SignerMessage>(response.into())
1169-
{
1170-
Ok(_) => {
1171-
crate::monitoring::actions::increment_block_responses_sent(accepted);
1172-
if let Ok(Some(block_info)) = self
1173-
.signer_db
1174-
.block_lookup(&block_validate_response.signer_signature_hash())
1175-
{
1176-
crate::monitoring::actions::record_block_response_latency(
1177-
&block_info.block,
1178-
);
1179-
}
1180-
}
1181-
Err(e) => {
1182-
warn!("{self}: Failed to send block rejection to stacker-db: {e:?}",);
1183-
}
1184-
}
1154+
let block = self
1155+
.signer_db
1156+
.block_lookup(&signer_sig_hash)
1157+
.unwrap_or_default()
1158+
.map(|info| info.block);
1159+
self.impl_send_block_response(block.as_ref(), response);
11851160
};
11861161

11871162
// Check if there is a pending block validation that we need to submit to the node
@@ -1274,21 +1249,7 @@ impl Signer {
12741249
warn!("{self}: Failed to mark block as locally rejected: {e:?}");
12751250
}
12761251
};
1277-
debug!("{self}: Broadcasting a block response to stacks node: {rejection:?}");
1278-
let res = self
1279-
.stackerdb
1280-
.send_message_with_retry::<SignerMessage>(rejection.into());
1281-
1282-
crate::monitoring::actions::record_block_response_latency(&block_info.block);
1283-
1284-
match res {
1285-
Err(e) => warn!("{self}: Failed to send block rejection to stacker-db: {e:?}"),
1286-
Ok(ack) if !ack.accepted => warn!(
1287-
"{self}: Block rejection not accepted by stacker-db: {:?}",
1288-
ack.reason
1289-
),
1290-
Ok(_) => debug!("{self}: Block rejection accepted by stacker-db"),
1291-
}
1252+
self.impl_send_block_response(Some(&block_info.block), rejection);
12921253

12931254
self.signer_db
12941255
.insert_block(&block_info)

0 commit comments

Comments
 (0)