Skip to content

Commit f0c2c32

Browse files
committed
feat(aggregator): add more context when register single signature fail
1 parent ad2ce7b commit f0c2c32

File tree

4 files changed

+30
-17
lines changed

4 files changed

+30
-17
lines changed

mithril-aggregator/src/http_server/routes/signatures_routes.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,14 @@ mod handlers {
5656
.get_signature_registration_total_received_since_startup()
5757
.increment(&[METRICS_HTTP_ORIGIN]);
5858

59+
let payload = message.clone();
5960
let signed_entity_type = message.signed_entity_type.clone();
6061
let signed_message = message.signed_message.clone();
6162

6263
let mut single_signature = match FromRegisterSingleSignatureAdapter::try_adapt(message) {
6364
Ok(signature) => signature,
6465
Err(err) => {
65-
warn!(logger,"register_signatures::payload decoding error"; "error" => ?err);
66+
warn!(logger,"register_signatures::payload decoding error"; "full_payload" => #?payload,"error" => ?err);
6667

6768
return Ok(reply::bad_request(
6869
"Could not decode signature payload".to_string(),
@@ -92,22 +93,22 @@ mod handlers {
9293
{
9394
Err(err) => match err.downcast_ref::<CertifierServiceError>() {
9495
Some(CertifierServiceError::AlreadyCertified(signed_entity_type)) => {
95-
debug!(logger,"register_signatures::open_message_already_certified"; "signed_entity_type" => ?signed_entity_type);
96+
debug!(logger, "register_signatures::open_message_already_certified"; "signed_entity_type" => ?signed_entity_type, "party_id" => &single_signature.party_id);
9697
Ok(reply::gone(
9798
"already_certified".to_string(),
9899
err.to_string(),
99100
))
100101
}
101102
Some(CertifierServiceError::Expired(signed_entity_type)) => {
102-
debug!(logger,"register_signatures::open_message_expired"; "signed_entity_type" => ?signed_entity_type);
103+
debug!(logger, "register_signatures::open_message_expired"; "signed_entity_type" => ?signed_entity_type, "party_id" => &single_signature.party_id);
103104
Ok(reply::gone("expired".to_string(), err.to_string()))
104105
}
105106
Some(CertifierServiceError::NotFound(signed_entity_type)) => {
106-
debug!(logger,"register_signatures::not_found"; "signed_entity_type" => ?signed_entity_type);
107+
debug!(logger, "register_signatures::not_found"; "signed_entity_type" => ?signed_entity_type, "party_id" => &single_signature.party_id);
107108
Ok(reply::empty(StatusCode::NOT_FOUND))
108109
}
109110
Some(_) | None => {
110-
warn!(logger,"register_signatures::error"; "error" => ?err);
111+
warn!(logger,"register_signatures::error"; "full_payload" => #?payload, "error" => ?err);
111112
Ok(reply::server_error(err))
112113
}
113114
},

mithril-aggregator/src/services/certifier/buffered_certifier.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,7 @@ mod tests {
427427
.returning(|_, _| {
428428
Err(CertifierServiceError::InvalidSingleSignature(
429429
OpenMessage::dummy().signed_entity_type,
430+
"party_1".to_string(),
430431
anyhow!("Invalid signature"),
431432
)
432433
.into())

mithril-aggregator/src/services/certifier/certifier_service.rs

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,22 +108,27 @@ impl CertifierService for MithrilCertifierService {
108108
) -> StdResult<SignatureRegistrationStatus> {
109109
debug!(
110110
self.logger,
111-
">> register_single_signature(signed_entity_type: {signed_entity_type:?}, single_signatures: {signature:?}"
111+
">> register_single_signature(signed_entity_type: {signed_entity_type:?}, single_signature: {signature:?}"
112112
);
113-
trace!(self.logger, ">> register_single_signature"; "complete_single_signatures" => #?signature);
113+
trace!(self.logger, ">> register_single_signature"; "complete_single_signature" => #?signature);
114114

115115
let open_message = self
116116
.get_open_message_record(signed_entity_type)
117-
.await.with_context(|| format!("CertifierService can not get open message record for signed_entity_type: '{signed_entity_type}'"))?
117+
.await
118+
.with_context(|| format!("CertifierService can not get open message record for signed_entity_type: '{signed_entity_type}'"))?
118119
.ok_or_else(|| {
119-
warn!(self.logger, "register_single_signature: OpenMessage not found for type {signed_entity_type:?}.");
120+
warn!(
121+
self.logger, "register_single_signature: OpenMessage not found for type {signed_entity_type:?}";
122+
"party_id" => &signature.party_id
123+
);
120124
CertifierServiceError::NotFound(signed_entity_type.clone())
121125
})?;
122126

123127
if open_message.is_certified {
124128
warn!(
125129
self.logger,
126-
"register_single_signature: open message {signed_entity_type:?} is already certified, cannot register single signature."
130+
"register_single_signature: open message {signed_entity_type:?} is already certified, cannot register single signature.";
131+
"party_id" => &signature.party_id
127132
);
128133

129134
return Err(CertifierServiceError::AlreadyCertified(signed_entity_type.clone()).into());
@@ -132,7 +137,8 @@ impl CertifierService for MithrilCertifierService {
132137
if open_message.is_expired {
133138
warn!(
134139
self.logger,
135-
"register_single_signature: open message {signed_entity_type:?} has expired, cannot register single signature."
140+
"register_single_signature: open message {signed_entity_type:?} has expired, cannot register single signature.";
141+
"party_id" => &signature.party_id
136142
);
137143

138144
return Err(CertifierServiceError::Expired(signed_entity_type.clone()).into());
@@ -142,13 +148,18 @@ impl CertifierService for MithrilCertifierService {
142148
.verify_single_signature(&open_message.protocol_message.to_message(), signature)
143149
.await
144150
.map_err(|err| {
145-
CertifierServiceError::InvalidSingleSignature(signed_entity_type.clone(), err)
151+
CertifierServiceError::InvalidSingleSignature(
152+
signed_entity_type.clone(),
153+
signature.party_id.clone(),
154+
err,
155+
)
146156
})?;
147157

148158
let single_signature = self
149159
.single_signature_repository
150160
.create_single_signature(signature, &open_message.clone().into())
151-
.await.with_context(|| format!("Certifier can not create the single signature from single_signature: '{signature:?}', open_message: '{open_message:?}'"))?;
161+
.await
162+
.with_context(|| format!("Certifier can not create the single signature from single_signature: '{signature:?}', open_message: '{open_message:?}'"))?;
152163
info!(
153164
self.logger,
154165
"register_single_signature: created pool '{}' single signature for {signed_entity_type:?}.",
@@ -826,7 +837,7 @@ mod tests {
826837
if let Some(err) = error.downcast_ref::<CertifierServiceError>() {
827838
assert!(matches!(
828839
err,
829-
CertifierServiceError::AlreadyCertified(signed_entity) if signed_entity == &signed_entity_type
840+
CertifierServiceError::AlreadyCertified(signed_entity, ..) if signed_entity == &signed_entity_type
830841
),);
831842
} else {
832843
panic!("Unexpected error {error:?}");

mithril-aggregator/src/services/certifier/interface.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use async_trait::async_trait;
22
use thiserror::Error;
33

44
use mithril_common::entities::{
5-
Certificate, Epoch, ProtocolMessage, SignedEntityType, SignedEntityTypeDiscriminants,
5+
Certificate, Epoch, PartyId, ProtocolMessage, SignedEntityType, SignedEntityTypeDiscriminants,
66
SingleSignature,
77
};
88
use mithril_common::{StdError, StdResult};
@@ -27,8 +27,8 @@ pub enum CertifierServiceError {
2727
Expired(SignedEntityType),
2828

2929
/// An invalid signature was provided.
30-
#[error("Invalid single signature for {0:?}.")]
31-
InvalidSingleSignature(SignedEntityType, #[source] StdError),
30+
#[error("Invalid single signature for {0:?} from party '{1}'.")]
31+
InvalidSingleSignature(SignedEntityType, PartyId, #[source] StdError),
3232

3333
/// No parent certificate could be found, this certifier cannot create genesis certificates.
3434
#[error(

0 commit comments

Comments
 (0)