Skip to content

Commit ca67a31

Browse files
authored
Merge pull request #1268 from input-output-hk/djo/1265/use_source_attribute_in_wrapped_errors
Use source attribute in wrapped errors
2 parents 6dfb82b + 8f17aea commit ca67a31

File tree

30 files changed

+141
-134
lines changed

30 files changed

+141
-134
lines changed

Cargo.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mithril-aggregator/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mithril-aggregator"
3-
version = "0.3.104"
3+
version = "0.3.105"
44
description = "A Mithril Aggregator server"
55
authors = { workspace = true }
66
edition = { workspace = true }

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ mod tests {
343343
mock_signer_registerer
344344
.expect_register_signer()
345345
.return_once(|_, _| {
346-
Err(SignerRegistrationError::ChainObserver(
346+
Err(SignerRegistrationError::FailedSignerRecorder(
347347
"an error occurred".to_string(),
348348
))
349349
});

mithril-aggregator/src/multi_signer.rs

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,47 +25,47 @@ use mockall::automock;
2525
pub enum ProtocolError {
2626
/// Signer is already registered.
2727
#[error("signer already registered")]
28-
ExistingSigner(),
28+
ExistingSigner,
2929

3030
/// Signer was not registered.
3131
#[error("signer did not register")]
32-
UnregisteredParty(),
32+
UnregisteredParty,
3333

3434
/// Signer registration failed.
3535
#[error("signer registration failed")]
36-
FailedSignerRegistration(StdError),
36+
FailedSignerRegistration(#[source] StdError),
3737

3838
/// Single signature already recorded.
3939
#[error("single signature already recorded")]
4040
ExistingSingleSignature(entities::PartyId),
4141

4242
/// Mithril STM library returned an error.
43-
#[error("core error: '{0}'")]
44-
Core(StdError),
43+
#[error("core error")]
44+
Core(#[source] StdError),
4545

4646
/// No message available.
4747
#[error("no message available")]
48-
UnavailableMessage(),
48+
UnavailableMessage,
4949

5050
/// No protocol parameters available.
5151
#[error("no protocol parameters available")]
52-
UnavailableProtocolParameters(),
52+
UnavailableProtocolParameters,
5353

5454
/// No clerk available.
5555
#[error("no clerk available")]
56-
UnavailableClerk(),
56+
UnavailableClerk,
5757

5858
/// No beacon available.
5959
#[error("no beacon available")]
60-
UnavailableBeacon(),
60+
UnavailableBeacon,
6161

6262
/// Store error.
63-
#[error("store error: {0}")]
64-
StoreError(StdError),
63+
#[error("store error")]
64+
StoreError(#[source] StdError),
6565

6666
/// Beacon error.
67-
#[error("beacon error: '{0}'")]
68-
Beacon(StdError),
67+
#[error("beacon error")]
68+
Beacon(#[source] StdError),
6969
}
7070

7171
/// MultiSigner is the cryptographic engine in charge of producing multi signatures from individual signatures
@@ -124,7 +124,7 @@ pub trait MultiSigner: Sync + Send {
124124
let protocol_parameters = self
125125
.get_protocol_parameters()
126126
.await?
127-
.ok_or_else(ProtocolError::UnavailableProtocolParameters)?;
127+
.ok_or(ProtocolError::UnavailableProtocolParameters)?;
128128
Ok(self
129129
.compute_aggregate_verification_key(&signers_with_stake, &protocol_parameters)
130130
.await?)
@@ -138,7 +138,7 @@ pub trait MultiSigner: Sync + Send {
138138
let protocol_parameters = self
139139
.get_next_protocol_parameters()
140140
.await?
141-
.ok_or_else(ProtocolError::UnavailableProtocolParameters)?;
141+
.ok_or(ProtocolError::UnavailableProtocolParameters)?;
142142
Ok(self
143143
.compute_aggregate_verification_key(&next_signers_with_stake, &protocol_parameters)
144144
.await?)
@@ -285,7 +285,7 @@ impl MultiSigner for MultiSignerImpl {
285285
let epoch = self
286286
.current_beacon
287287
.as_ref()
288-
.ok_or_else(ProtocolError::UnavailableBeacon)?
288+
.ok_or(ProtocolError::UnavailableBeacon)?
289289
.epoch
290290
.offset_to_signer_retrieval_epoch()
291291
.with_context(|| "Multi Signer can not offset to signer retrieveal epoch while retrivieving protocol parameters")
@@ -302,7 +302,7 @@ impl MultiSigner for MultiSignerImpl {
302302
let epoch = self
303303
.current_beacon
304304
.as_ref()
305-
.ok_or_else(ProtocolError::UnavailableBeacon)?
305+
.ok_or(ProtocolError::UnavailableBeacon)?
306306
.epoch
307307
.offset_to_protocol_parameters_recording_epoch();
308308

@@ -322,7 +322,7 @@ impl MultiSigner for MultiSignerImpl {
322322
let epoch = self
323323
.current_beacon
324324
.as_ref()
325-
.ok_or_else(ProtocolError::UnavailableBeacon)?
325+
.ok_or(ProtocolError::UnavailableBeacon)?
326326
.epoch
327327
.offset_to_next_signer_retrieval_epoch();
328328
self.get_protocol_parameters_at_epoch(epoch).await
@@ -334,7 +334,7 @@ impl MultiSigner for MultiSignerImpl {
334334
let epoch = self
335335
.current_beacon
336336
.as_ref()
337-
.ok_or_else(ProtocolError::UnavailableBeacon)?
337+
.ok_or(ProtocolError::UnavailableBeacon)?
338338
.epoch
339339
.offset_to_signer_retrieval_epoch()
340340
.with_context(|| "Multi Signer can not offset to signer retrieveal epoch while retrieving stake distribution")
@@ -350,7 +350,7 @@ impl MultiSigner for MultiSignerImpl {
350350
let epoch = self
351351
.current_beacon
352352
.as_ref()
353-
.ok_or_else(ProtocolError::UnavailableBeacon)?
353+
.ok_or(ProtocolError::UnavailableBeacon)?
354354
.epoch
355355
.offset_to_next_signer_retrieval_epoch();
356356
self.get_stake_distribution_at_epoch(epoch).await
@@ -365,7 +365,7 @@ impl MultiSigner for MultiSignerImpl {
365365
let epoch = self
366366
.current_beacon
367367
.as_ref()
368-
.ok_or_else(ProtocolError::UnavailableBeacon)?
368+
.ok_or(ProtocolError::UnavailableBeacon)?
369369
.epoch
370370
.offset_to_recording_epoch();
371371
let stakes = StakeDistribution::from_iter(stakes.iter().cloned());
@@ -397,7 +397,7 @@ impl MultiSigner for MultiSignerImpl {
397397
let epoch = self
398398
.current_beacon
399399
.as_ref()
400-
.ok_or_else(ProtocolError::UnavailableBeacon)?
400+
.ok_or(ProtocolError::UnavailableBeacon)?
401401
.epoch;
402402
let epoch = epoch
403403
.offset_to_signer_retrieval_epoch()
@@ -439,7 +439,7 @@ impl MultiSigner for MultiSignerImpl {
439439
let epoch = self
440440
.current_beacon
441441
.as_ref()
442-
.ok_or_else(ProtocolError::UnavailableBeacon)?
442+
.ok_or(ProtocolError::UnavailableBeacon)?
443443
.epoch
444444
.offset_to_next_signer_retrieval_epoch();
445445
let signers = self
@@ -486,7 +486,7 @@ impl MultiSigner for MultiSignerImpl {
486486
let protocol_parameters = self
487487
.get_protocol_parameters()
488488
.await?
489-
.ok_or_else(ProtocolError::UnavailableProtocolParameters)?;
489+
.ok_or(ProtocolError::UnavailableProtocolParameters)?;
490490

491491
let signers_with_stakes = self.get_signers_with_stake().await?;
492492

@@ -508,7 +508,7 @@ impl MultiSigner for MultiSignerImpl {
508508
let protocol_parameters = self
509509
.get_protocol_parameters()
510510
.await?
511-
.ok_or_else(ProtocolError::UnavailableProtocolParameters)?;
511+
.ok_or(ProtocolError::UnavailableProtocolParameters)?;
512512

513513
let signers_with_stakes = self.get_signers_with_stake().await?;
514514

mithril-aggregator/src/runtime/error.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,34 @@ use thiserror::Error;
77
#[derive(Error, Debug)]
88
pub enum RuntimeError {
99
/// Errors that need the runtime to try again without changing its state.
10-
#[error("An error occured: {message}. This runtime cycle will be skipped. Nested error: {nested_error:#?}.")]
10+
#[error("An error occured: {message}. This runtime cycle will be skipped.")]
1111
KeepState {
1212
/// error message
1313
message: String,
1414

1515
/// Eventual caught error
16+
#[source]
1617
nested_error: Option<StdError>,
1718
},
1819
/// A Critical error means the Runtime stops and the software exits with an
1920
/// error code.
20-
#[error("Critical error:'{message}'. Nested error: {nested_error:#?}.")]
21+
#[error("Critical error:'{message}'.")]
2122
Critical {
2223
/// error message
2324
message: String,
2425

2526
/// Eventual caught error
27+
#[source]
2628
nested_error: Option<StdError>,
2729
},
2830
/// An error that needs to re-initialize the state machine.
29-
#[error("An error occured: {message}. The state machine will be re-initialized. Nested error: {nested_error:#?}")]
31+
#[error("An error occured: {message}. The state machine will be re-initialized.")]
3032
ReInit {
3133
/// error message
3234
message: String,
3335

3436
/// Eventual caught error
37+
#[source]
3538
nested_error: Option<StdError>,
3639
},
3740
}

mithril-aggregator/src/signer_registerer.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use mithril_common::{
1313

1414
use crate::VerificationKeyStorer;
1515

16+
use mithril_common::chain_observer::ChainObserverError;
1617
#[cfg(test)]
1718
use mockall::automock;
1819

@@ -33,20 +34,20 @@ pub enum SignerRegistrationError {
3334
},
3435

3536
/// Chain observer error.
36-
#[error("chain observer error: '{0}'")]
37-
ChainObserver(String),
37+
#[error("chain observer error")]
38+
ChainObserver(#[from] ChainObserverError),
3839

3940
/// Signer is already registered.
4041
#[error("signer already registered")]
4142
ExistingSigner(Box<SignerWithStake>),
4243

4344
/// Store error.
44-
#[error("store error: {0}")]
45-
StoreError(StdError),
45+
#[error("store error")]
46+
StoreError(#[source] StdError),
4647

4748
/// Signer registration failed.
4849
#[error("signer registration failed")]
49-
FailedSignerRegistration(StdError),
50+
FailedSignerRegistration(#[source] StdError),
5051

5152
/// Signer recorder failed.
5253
#[error("signer recorder failed: '{0}'")]
@@ -229,8 +230,7 @@ impl SignerRegisterer for MithrilSignerRegisterer {
229230
Some(operational_certificate) => Some(
230231
self.chain_observer
231232
.get_current_kes_period(operational_certificate)
232-
.await
233-
.map_err(|e| SignerRegistrationError::ChainObserver(e.to_string()))?
233+
.await?
234234
.unwrap_or_default()
235235
- operational_certificate.start_kes_period as KESPeriod,
236236
),

mithril-client/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mithril-client"
3-
version = "0.4.7"
3+
version = "0.4.8"
44
description = "A Mithril Client"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-client/src/aggregator_client/http_client.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,20 @@ use crate::utils::{DownloadProgressReporter, SnapshotUnpacker};
2222
#[derive(Error, Debug)]
2323
pub enum AggregatorHTTPClientError {
2424
/// Error raised when querying the aggregator returned a 5XX error.
25-
#[error("remote server technical error: '{0}'")]
26-
RemoteServerTechnical(StdError),
25+
#[error("remote server technical error")]
26+
RemoteServerTechnical(#[source] StdError),
2727

2828
/// Error raised when querying the aggregator returned a 4XX error.
29-
#[error("remote server logical error: '{0}'")]
30-
RemoteServerLogical(StdError),
29+
#[error("remote server logical error")]
30+
RemoteServerLogical(#[source] StdError),
3131

3232
/// Error raised when the server API version mismatch the client API version.
33-
#[error("API version mismatch: {0}")]
34-
ApiVersionMismatch(StdError),
33+
#[error("API version mismatch")]
34+
ApiVersionMismatch(#[source] StdError),
3535

3636
/// HTTP subsystem error
37-
#[error("HTTP subsystem error: {0}")]
38-
SubsystemError(StdError),
37+
#[error("HTTP subsystem error")]
38+
SubsystemError(#[source] StdError),
3939
}
4040

4141
/// API that defines a client for the Aggregator

mithril-client/src/services/mithril_stake_distribution.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,14 @@ pub enum MithrilStakeDistributionServiceError {
3939
CertificateNotFound(String),
4040

4141
/// The configuration has invalid or missing parameters
42-
#[error("Missing or invalid parameters: {0:?}")]
43-
InvalidParameters(StdError),
42+
#[error("Missing or invalid parameters")]
43+
InvalidParameters(#[source] StdError),
4444

4545
/// Could not find the given stake distribution
4646
#[error("Could not find stake distribution associated to hash '{0}'.")]
4747
CouldNotFindStakeDistribution(String),
4848
}
49+
4950
/// Definition of the service responsible of Mithril Stake Distribution.
5051
#[async_trait]
5152
pub trait MithrilStakeDistributionService {

mithril-client/src/utils/unpacker.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,17 @@ pub enum SnapshotUnpackerError {
4141
UnpackDirectoryAlreadyExists(PathBuf),
4242

4343
/// Cannot write in the given directory.
44-
#[error("Unpack directory '{0}' is not writable. (underlying error: « {1} »).")]
45-
UnpackDirectoryIsNotWritable(PathBuf, StdError),
44+
#[error("Unpack directory '{0}' is not writable.")]
45+
UnpackDirectoryIsNotWritable(PathBuf, #[source] StdError),
4646

4747
/// Unpacking error
48-
#[error("Could not unpack from streamed data snapshot to directory '{dirpath}'. Error: « {error:?} ».")]
48+
#[error("Could not unpack from streamed data snapshot to directory '{dirpath}'")]
4949
UnpackFailed {
5050
/// Location where the archive is to be extracted.
5151
dirpath: PathBuf,
5252

5353
/// Subsystem error
54+
#[source]
5455
error: StdError,
5556
},
5657
}

0 commit comments

Comments
 (0)