Skip to content

Commit 9df5a56

Browse files
authored
Merge pull request #2468 from input-output-hk/dlachaume/2461/signer-signature-publisher-decorators
Feat: implement signature publisher decorators in signer
2 parents 346b447 + 6bb77b3 commit 9df5a56

File tree

12 files changed

+584
-6
lines changed

12 files changed

+584
-6
lines changed

Cargo.lock

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

docs/website/root/manual/develop/nodes/mithril-signer.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,3 +259,6 @@ Here is a list of the available parameters:
259259
| `transactions_import_block_chunk_size` | - | - | `TRANSACTIONS_IMPORT_BLOCK_CHUNK_SIZE` | Chunk size for importing transactions, combined with transaction pruning it reduces the storage footprint of the signer by reducing the number of transactions stored on disk at any given time. | `1500` | - | - |
260260
| `cardano_transactions_block_streamer_max_roll_forwards_per_poll` | - | - | `CARDANO_TRANSACTIONS_BLOCK_STREAMER_MAX_ROLL_FORWARDS_PER_POLL` | The maximum number of roll forwards during a poll of the block streamer when importing transactions. | `1000` | - | - |
261261
| `preloading_refresh_interval_in_seconds` | `--preloading-refresh-interval-in-seconds` | - | `PRELOADING_REFRESH_INTERVAL_IN_SECONDS` | The preloading refresh interval in seconds. | `7200` | - | - |
262+
| `signature_publisher_retry_attempts` | `--signature-publisher-retry-attempts` | - | `SIGNATURE_PUBLISHER_RETRY_ATTEMPTS` | Number of retry attempts when publishing the signature. | `3` | - | - |
263+
| `signature_publisher_retry_delay_ms` | `--signature-publisher-retry-delay-ms` | - | `SIGNATURE_PUBLISHER_RETRY_DELAY_MS` | Delay (in milliseconds) between two retry attempts when publishing the signature. | `2000` | - | - |
264+
| `signature_publisher_delayer_delay_ms` | `--signature-publisher-delayer-delay-ms` | - | `SIGNATURE_PUBLISHER_DELAYER_DELAY_MS` | Delay (in milliseconds) between two separate publications done by the delayer signature publisher. | `10000` | - | - |

mithril-signer/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-signer"
3-
version = "0.2.245"
3+
version = "0.2.246"
44
description = "A Mithril Signer"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-signer/src/configuration.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,18 @@ use mithril_common::{
1616
CardanoNetwork, StdResult,
1717
};
1818

19+
#[derive(Debug, Clone, Serialize, Deserialize)]
20+
pub struct SignaturePublisherConfig {
21+
/// Number of retry attempts when publishing the signature
22+
pub retry_attempts: u8,
23+
24+
/// Delay (in milliseconds) between two retry attempts when publishing the signature
25+
pub retry_delay_ms: u64,
26+
27+
/// Delay (in milliseconds) between two separate publications done by the delayer signature publisher
28+
pub delayer_delay_ms: u64,
29+
}
30+
1931
/// Client configuration
2032
#[derive(Debug, Clone, Serialize, Deserialize, Documenter)]
2133
pub struct Configuration {
@@ -121,6 +133,10 @@ pub struct Configuration {
121133

122134
/// Preloading refresh interval in seconds
123135
pub preloading_refresh_interval_in_seconds: u64,
136+
137+
/// Signature publisher configuration
138+
#[example = "`{ retry_attempts: 3, retry_delay_ms: 2000, delayer_delay_ms: 10000 }`"]
139+
pub signature_publisher_config: SignaturePublisherConfig,
124140
}
125141

126142
impl Configuration {
@@ -159,6 +175,11 @@ impl Configuration {
159175
transactions_import_block_chunk_size: BlockNumber(1000),
160176
cardano_transactions_block_streamer_max_roll_forwards_per_poll: 1000,
161177
preloading_refresh_interval_in_seconds: 60,
178+
signature_publisher_config: SignaturePublisherConfig {
179+
retry_attempts: 1,
180+
retry_delay_ms: 1,
181+
delayer_delay_ms: 1,
182+
},
162183
}
163184
}
164185

mithril-signer/src/dependency_injection/builder.rs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ use crate::dependency_injection::SignerDependencyContainer;
4141
use crate::services::{
4242
AggregatorHTTPClient, CardanoTransactionsImporter,
4343
CardanoTransactionsPreloaderActivationSigner, MithrilEpochService, MithrilSingleSigner,
44-
SignaturePublisher, SignerCertifierService, SignerSignableSeedBuilder,
44+
SignaturePublishRetryPolicy, SignaturePublisherDelayer, SignaturePublisherNoop,
45+
SignaturePublisherRetrier, SignerCertifierService, SignerSignableSeedBuilder,
4546
SignerSignedEntityConfigProvider, SignerUpkeepService, TransactionsImporterByChunk,
4647
TransactionsImporterWithPruner, TransactionsImporterWithVacuum,
4748
};
@@ -386,7 +387,30 @@ impl<'a> DependenciesBuilder<'a> {
386387
self.root_logger(),
387388
));
388389

389-
let signature_publisher: Arc<dyn SignaturePublisher> = aggregator_client.clone();
390+
let signature_publisher = {
391+
// Temporary no-op publisher before a DMQ-based implementation is available.
392+
let first_publisher = SignaturePublisherRetrier::new(
393+
Arc::new(SignaturePublisherNoop {}),
394+
SignaturePublishRetryPolicy::never(),
395+
);
396+
397+
let second_publisher = SignaturePublisherRetrier::new(
398+
aggregator_client.clone(),
399+
SignaturePublishRetryPolicy {
400+
attempts: self.config.signature_publisher_config.retry_attempts,
401+
delay_between_attempts: Duration::from_millis(
402+
self.config.signature_publisher_config.retry_delay_ms,
403+
),
404+
},
405+
);
406+
407+
Arc::new(SignaturePublisherDelayer::new(
408+
Arc::new(first_publisher),
409+
Arc::new(second_publisher),
410+
Duration::from_millis(self.config.signature_publisher_config.delayer_delay_ms),
411+
self.root_logger(),
412+
))
413+
};
390414

391415
let certifier = Arc::new(SignerCertifierService::new(
392416
signed_beacon_repository,

mithril-signer/src/main.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,26 @@ pub struct Args {
8888
default_value_t = 43200
8989
)]
9090
preloading_refresh_interval_in_seconds: u64,
91+
92+
/// Number of retry attempts when publishing the signature
93+
#[clap(long, env = "SIGNATURE_PUBLISHER_RETRY_ATTEMPTS", default_value_t = 3)]
94+
signature_publisher_retry_attempts: u64,
95+
96+
/// Delay (in milliseconds) between two retry attempts when publishing the signature
97+
#[clap(
98+
long,
99+
env = "SIGNATURE_PUBLISHER_RETRY_DELAY_MS",
100+
default_value_t = 2_000
101+
)]
102+
signature_publisher_retry_delay_ms: u64,
103+
104+
/// Delay (in milliseconds) between two separate publications done by the delayer signature publisher
105+
#[clap(
106+
long,
107+
env = "SIGNATURE_PUBLISHER_DELAYER_DELAY_MS",
108+
default_value_t = 10_000
109+
)]
110+
signature_publisher_delayer_delay_ms: u64,
91111
}
92112

93113
impl Args {
@@ -175,6 +195,18 @@ async fn main() -> StdResult<()> {
175195
.with_context(|| {
176196
"configuration error: could not set `preloading_refresh_interval_in_seconds`"
177197
})?
198+
.set_default(
199+
"signature_publisher_config.retry_attempts",
200+
args.signature_publisher_retry_attempts,
201+
)?
202+
.set_default(
203+
"signature_publisher_config.retry_delay_ms",
204+
args.signature_publisher_retry_delay_ms,
205+
)?
206+
.set_default(
207+
"signature_publisher_config.delayer_delay_ms",
208+
args.signature_publisher_delayer_delay_ms,
209+
)?
178210
.add_source(DefaultConfiguration::default())
179211
.add_source(
180212
config::File::with_name(&format!(
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
mod http;
22
mod interface;
3+
mod signature_publisher_delayer;
4+
mod signature_publisher_noop;
5+
mod signature_publisher_retrier;
36

47
pub use interface::*;
8+
pub use signature_publisher_delayer::*;
9+
pub use signature_publisher_noop::*;
10+
pub use signature_publisher_retrier::*;

0 commit comments

Comments
 (0)