Skip to content

Commit bba21dc

Browse files
committed
Rename SignerTickerImporter to SignersImporter
This is more cardano agnostic and say better what it realy does (it does not just import the ticker but also create a signer in the db if it does not exist). Also make one of its test more robust by using a BtreeMap in a assert_eq instead of a HashMap (that does not have fixed order).
1 parent c8260d9 commit bba21dc

File tree

6 files changed

+64
-68
lines changed

6 files changed

+64
-68
lines changed

mithril-aggregator/src/commands/serve_command.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,10 @@ impl ServeCommand {
134134
Ok(())
135135
});
136136

137-
// Create a [SignerTickersImporter] only if the `cexplorer_pools_url` is provided in the
138-
// config.
137+
// Create a SignersImporter only if the `cexplorer_pools_url` is provided in the config.
139138
if let Some(cexplorer_pools_url) = config.cexplorer_pools_url {
140139
match dependencies_builder
141-
.create_signer_ticker_importer(&cexplorer_pools_url)
140+
.create_signer_importer(&cexplorer_pools_url)
142141
.await
143142
{
144143
Ok(service) => {
@@ -148,16 +147,16 @@ impl ServeCommand {
148147
tokio::time::sleep(Duration::from_secs(5)).await;
149148
service
150149
.run_forever(Duration::from_secs(
151-
// Signer Ticker Interval are in minutes
152-
config.signer_ticker_run_interval * 60,
150+
// Import interval are in minutes
151+
config.signer_importer_run_interval * 60,
153152
))
154153
.await;
155154
Ok(())
156155
});
157156
}
158157
Err(error) => {
159158
warn!(
160-
"Failed to build the `SignerTickersImporter` fetching url `{}`. Error: {:?}",
159+
"Failed to build the `SignersImporter`:\n url to import `{}`\n Error: {:?}",
161160
cexplorer_pools_url, error
162161
);
163162
}

mithril-aggregator/src/configuration.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,11 @@ pub struct Configuration {
122122
/// is set to [zstandard][CompressionAlgorithm::Zstandard].
123123
pub zstandard_parameters: Option<ZstandardCompressionParameters>,
124124

125-
/// Url to CExplorer list of pools that will be pulled to import the pools as signer in
126-
/// the database (including their pool ticker).
125+
/// Url to CExplorer list of pools to import as signer in the database.
127126
pub cexplorer_pools_url: Option<String>,
128127

129-
/// Time interval at which the [Self::cexplorer_pools_url] will be fetch (in minutes).
130-
pub signer_ticker_run_interval: u64,
128+
/// Time interval at which the signers in [Self::cexplorer_pools_url] will be imported (in minutes).
129+
pub signer_importer_run_interval: u64,
131130
}
132131

133132
/// Uploader needed to copy the snapshot once computed.
@@ -196,7 +195,7 @@ impl Configuration {
196195
snapshot_compression_algorithm: CompressionAlgorithm::Zstandard,
197196
zstandard_parameters: Some(ZstandardCompressionParameters::default()),
198197
cexplorer_pools_url: None,
199-
signer_ticker_run_interval: 1,
198+
signer_importer_run_interval: 1,
200199
}
201200
}
202201

@@ -272,8 +271,8 @@ pub struct DefaultConfiguration {
272271
/// Use CDN domain to construct snapshot urls default setting (if snapshot_uploader_type is Gcp)
273272
pub snapshot_use_cdn_domain: String,
274273

275-
/// Signer ticker run interval default setting
276-
pub signer_ticker_run_interval: u64,
274+
/// Signer importer run interval default setting
275+
pub signer_importer_run_interval: u64,
277276
}
278277

279278
impl Default for DefaultConfiguration {
@@ -291,7 +290,7 @@ impl Default for DefaultConfiguration {
291290
disable_digests_cache: "false".to_string(),
292291
snapshot_compression_algorithm: "zstandard".to_string(),
293292
snapshot_use_cdn_domain: "false".to_string(),
294-
signer_ticker_run_interval: 720,
293+
signer_importer_run_interval: 720,
295294
}
296295
}
297296
}
@@ -384,10 +383,10 @@ impl Source for DefaultConfiguration {
384383
),
385384
);
386385
result.insert(
387-
"signer_ticker_run_interval".to_string(),
386+
"signer_importer_run_interval".to_string(),
388387
Value::new(
389388
Some(&namespace),
390-
ValueKind::from(myself.signer_ticker_run_interval),
389+
ValueKind::from(myself.signer_importer_run_interval),
391390
),
392391
);
393392

mithril-aggregator/src/dependency_injection/builder.rs

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,7 @@ use crate::{
5656
MithrilStakeDistributionService, MithrilTickerService, SignedEntityService,
5757
StakeDistributionService, TickerService,
5858
},
59-
tools::{
60-
CExplorerSignerTickerRetriever, GcpFileUploader, GenesisToolsDependency,
61-
SignerTickersImporter,
62-
},
59+
tools::{CExplorerSignerRetriever, GcpFileUploader, GenesisToolsDependency, SignersImporter},
6360
AggregatorConfig, AggregatorRunner, AggregatorRuntime, CertificatePendingStore,
6461
CompressedArchiveSnapshotter, Configuration, DependencyContainer, DumbSnapshotUploader,
6562
DumbSnapshotter, LocalSnapshotUploader, MithrilSignerRegisterer, MultiSigner, MultiSignerImpl,
@@ -1097,18 +1094,16 @@ impl DependenciesBuilder {
10971094
Ok(dependencies)
10981095
}
10991096

1100-
/// Create a [SignerTickersImporter] instance.
1101-
pub async fn create_signer_ticker_importer(
1097+
/// Create a [SignersImporter] instance.
1098+
pub async fn create_signer_importer(
11021099
&mut self,
11031100
cexplorer_pools_url: &str,
1104-
) -> Result<SignerTickersImporter> {
1105-
let retriever = CExplorerSignerTickerRetriever::new(
1106-
cexplorer_pools_url,
1107-
Some(Duration::from_secs(30)),
1108-
)?;
1101+
) -> Result<SignersImporter> {
1102+
let retriever =
1103+
CExplorerSignerRetriever::new(cexplorer_pools_url, Some(Duration::from_secs(30)))?;
11091104
let persister = self.get_signer_store().await?;
11101105

1111-
Ok(SignerTickersImporter::new(Arc::new(retriever), persister))
1106+
Ok(SignersImporter::new(Arc::new(retriever), persister))
11121107
}
11131108

11141109
/// Create [TickerService] instance.

mithril-aggregator/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ pub use store::{
5858
CertificatePendingStore, ProtocolParametersStore, ProtocolParametersStorer,
5959
VerificationKeyStore, VerificationKeyStorer,
6060
};
61+
pub use tools::{
62+
CExplorerSignerRetriever, SignersImporter, SignersImporterPersister, SignersImporterRetriever,
63+
};
6164

6265
#[cfg(test)]
6366
pub use dependency_injection::tests::initialize_dependencies;

mithril-aggregator/src/tools/mod.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@ mod digest_helpers;
33
mod era;
44
mod genesis;
55
mod remote_file_uploader;
6-
mod signer_tickers_importer;
6+
mod signer_importer;
77

88
pub use certificates_hash_migrator::CertificatesHashMigrator;
99
pub use digest_helpers::extract_digest_from_path;
1010
pub use era::EraTools;
1111
pub use genesis::{GenesisTools, GenesisToolsDependency};
1212
pub use remote_file_uploader::{GcpFileUploader, RemoteFileUploader};
13-
pub use signer_tickers_importer::{
14-
CExplorerSignerTickerRetriever, SignerTickersImporter, SignerTickersPersister,
15-
SignerTickersRetriever,
13+
pub use signer_importer::{
14+
CExplorerSignerRetriever, SignersImporter, SignersImporterPersister, SignersImporterRetriever,
1615
};
1716

1817
#[cfg(test)]

mithril-aggregator/src/tools/signer_tickers_importer.rs renamed to mithril-aggregator/src/tools/signer_importer.rs

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,17 @@ use slog_scope::{info, warn};
1616

1717
pub type PoolTicker = String;
1818

19-
/// Tool that can import a list of Signer including their Pool Tickers
20-
pub struct SignerTickersImporter {
21-
retriever: Arc<dyn SignerTickersRetriever>,
22-
persister: Arc<dyn SignerTickersPersister>,
19+
/// Tool that can import a list of signers
20+
pub struct SignersImporter {
21+
retriever: Arc<dyn SignersImporterRetriever>,
22+
persister: Arc<dyn SignersImporterPersister>,
2323
}
2424

25-
impl SignerTickersImporter {
26-
/// [SignerTickersImporter] factory
25+
impl SignersImporter {
26+
/// [SignersImporter] factory
2727
pub fn new(
28-
retriever: Arc<dyn SignerTickersRetriever>,
29-
persister: Arc<dyn SignerTickersPersister>,
28+
retriever: Arc<dyn SignersImporterRetriever>,
29+
persister: Arc<dyn SignersImporterPersister>,
3030
) -> Self {
3131
Self {
3232
retriever,
@@ -36,7 +36,7 @@ impl SignerTickersImporter {
3636

3737
/// Import and persist the signers
3838
pub async fn run(&self) -> StdResult<()> {
39-
info!("🔧 Signer Ticker Importer: starting");
39+
info!("🔧 Signer Importer: starting");
4040
let items = self
4141
.retriever
4242
.retrieve()
@@ -55,35 +55,37 @@ impl SignerTickersImporter {
5555
loop {
5656
interval.tick().await;
5757
if let Err(error) = self.run().await {
58-
warn!("Signer ticker retriever failed: Error: «{:?}».", error);
58+
warn!("Signer retriever failed: Error: «{:?}».", error);
5959
}
6060
info!(
61-
"🔧 Signer Ticker Importer: Cycle finished, Sleeping for {} min",
61+
"🔧 Signer Importer: Cycle finished, Sleeping for {} min",
6262
run_interval.as_secs() / 60
6363
);
6464
}
6565
}
6666
}
6767

68+
/// Trait that define how a [SignersImporter] retrieve the signers to import.
6869
#[cfg_attr(test, automock)]
6970
#[async_trait]
70-
pub trait SignerTickersRetriever: Sync + Send {
71+
pub trait SignersImporterRetriever: Sync + Send {
7172
/// Retrieve the signers list.
7273
async fn retrieve(&self) -> StdResult<HashMap<PartyId, Option<PoolTicker>>>;
7374
}
7475

76+
/// Trait that define how a [SignersImporter] persist the retrieved signers.
7577
#[cfg_attr(test, automock)]
7678
#[async_trait]
77-
pub trait SignerTickersPersister: Sync + Send {
79+
pub trait SignersImporterPersister: Sync + Send {
7880
/// Persist the given list of signers.
7981
async fn persist(&self, signers: HashMap<PartyId, Option<PoolTicker>>) -> StdResult<()>;
8082
}
8183

8284
#[async_trait]
83-
impl SignerTickersPersister for SignerStore {
85+
impl SignersImporterPersister for SignerStore {
8486
async fn persist(&self, signers: HashMap<PartyId, Option<PoolTicker>>) -> StdResult<()> {
8587
info!(
86-
"🔧 Signer Ticker Importer: persisting retrieved data in the database";
88+
"🔧 Signer Importer: persisting retrieved data in the database";
8789
"number_of_signer_to_insert" => signers.len()
8890
);
8991
self.import_many_signers(signers).await?;
@@ -92,15 +94,15 @@ impl SignerTickersPersister for SignerStore {
9294
}
9395
}
9496

95-
/// A [SignerTickersRetriever] fetching signers data from CExplorer.
96-
pub struct CExplorerSignerTickerRetriever {
97+
/// A [SignersImporterRetriever] fetching signers data from CExplorer.
98+
pub struct CExplorerSignerRetriever {
9799
/// Url from which a SPO list using the CExplorer format will be fetch.
98100
source_url: Url,
99101
client: reqwest::Client,
100102
}
101103

102-
impl CExplorerSignerTickerRetriever {
103-
/// Create a new [CExplorerSignerTickerRetriever] that will fetch data from the given url.
104+
impl CExplorerSignerRetriever {
105+
/// Create a new [CExplorerSignerRetriever] that will fetch data from the given url.
104106
pub(crate) fn new<T: IntoUrl>(source_url: T, timeout: Option<Duration>) -> StdResult<Self> {
105107
let source_url = source_url
106108
.into_url()
@@ -118,10 +120,10 @@ impl CExplorerSignerTickerRetriever {
118120
}
119121

120122
#[async_trait]
121-
impl SignerTickersRetriever for CExplorerSignerTickerRetriever {
123+
impl SignersImporterRetriever for CExplorerSignerRetriever {
122124
async fn retrieve(&self) -> StdResult<HashMap<PartyId, Option<PoolTicker>>> {
123125
info!(
124-
"🔧 Signer Ticker Importer: retrieving data from source";
126+
"🔧 Signer Importer: retrieving data from source";
125127
"source_url" => &self.source_url.as_str()
126128
);
127129
let response = self
@@ -167,7 +169,7 @@ impl SPOItem {
167169
}
168170

169171
/// Consume this item to convert it to a result ready to be yield by a
170-
/// [SignerTickersRetriever::retrieve] implementation.
172+
/// [SignersImporterRetriever::retrieve] implementation.
171173
fn extract(self) -> (PartyId, Option<PoolTicker>) {
172174
let is_name_empty = self.is_name_empty();
173175
let (pool_id, name) = (self.pool_id, self.name);
@@ -181,7 +183,7 @@ mod tests {
181183
use mithril_common::test_utils::test_http_server::test_http_server;
182184
use mithril_common::StdResult;
183185
use sqlite::Connection;
184-
use std::collections::BTreeSet;
186+
use std::collections::{BTreeMap, BTreeSet};
185187
use std::convert::Infallible;
186188
use std::sync::Arc;
187189
use tokio::sync::Mutex;
@@ -282,15 +284,15 @@ mod tests {
282284
}));
283285

284286
let retriever =
285-
CExplorerSignerTickerRetriever::new(format!("{}/list", server.url()), None).unwrap();
287+
CExplorerSignerRetriever::new(format!("{}/list", server.url()), None).unwrap();
286288
let result = retriever
287289
.retrieve()
288290
.await
289291
.expect("Retriever should not fail");
290292

291293
assert_eq!(
292-
result,
293-
HashMap::from([
294+
result.into_iter().collect::<BTreeMap<_, _>>(),
295+
BTreeMap::from([
294296
("pool1".to_string(), None),
295297
("pool2".to_string(), None),
296298
("pool3".to_string(), Some("whatever2".to_string())),
@@ -305,7 +307,7 @@ mod tests {
305307
);
306308

307309
let retriever =
308-
CExplorerSignerTickerRetriever::new(format!("{}/list", server.url()), None).unwrap();
310+
CExplorerSignerRetriever::new(format!("{}/list", server.url()), None).unwrap();
309311
retriever
310312
.retrieve()
311313
.await
@@ -317,7 +319,7 @@ mod tests {
317319
let server = test_http_server(warp::path("list").map(|| r#"{ "data": [ {"pool_" ] }"#));
318320

319321
let retriever =
320-
CExplorerSignerTickerRetriever::new(format!("{}/list", server.url()), None).unwrap();
322+
CExplorerSignerRetriever::new(format!("{}/list", server.url()), None).unwrap();
321323
retriever
322324
.retrieve()
323325
.await
@@ -331,7 +333,7 @@ mod tests {
331333
Ok::<&str, Infallible>(r#"{"data":[]}"#)
332334
}));
333335

334-
let retriever = CExplorerSignerTickerRetriever::new(
336+
let retriever = CExplorerSignerRetriever::new(
335337
format!("{}/list", server.url()),
336338
Some(Duration::from_millis(10)),
337339
)
@@ -345,15 +347,15 @@ mod tests {
345347
#[tokio::test]
346348
async fn persist_list_of_two_signers_one_with_ticker_the_other_without() {
347349
let connection = Arc::new(Mutex::new(connection_without_foreign_key_support()));
348-
let mut retriever = MockSignerTickersRetriever::new();
350+
let mut retriever = MockSignersImporterRetriever::new();
349351
retriever.expect_retrieve().returning(|| {
350352
Ok(HashMap::from([
351353
("pool1".to_string(), Some("[Pool name test]".to_string())),
352354
("pool2".to_string(), None),
353355
]))
354356
});
355357

356-
let importer = SignerTickersImporter::new(
358+
let importer = SignersImporter::new(
357359
Arc::new(retriever),
358360
Arc::new(SignerStore::new(connection.clone())),
359361
);
@@ -386,7 +388,7 @@ mod tests {
386388
)
387389
.await
388390
.unwrap();
389-
let mut retriever = MockSignerTickersRetriever::new();
391+
let mut retriever = MockSignersImporterRetriever::new();
390392
retriever.expect_retrieve().returning(|| {
391393
Ok(HashMap::from([
392394
("pool1".to_string(), Some("[Updated Pool name]".to_string())),
@@ -397,7 +399,7 @@ mod tests {
397399
]))
398400
});
399401

400-
let importer = SignerTickersImporter::new(
402+
let importer = SignersImporter::new(
401403
Arc::new(retriever),
402404
Arc::new(SignerStore::new(connection.clone())),
403405
);
@@ -446,10 +448,9 @@ mod tests {
446448
}"#
447449
}));
448450

449-
let importer = SignerTickersImporter::new(
451+
let importer = SignersImporter::new(
450452
Arc::new(
451-
CExplorerSignerTickerRetriever::new(format!("{}/list", server.url()), None)
452-
.unwrap(),
453+
CExplorerSignerRetriever::new(format!("{}/list", server.url()), None).unwrap(),
453454
),
454455
Arc::new(SignerStore::new(connection.clone())),
455456
);

0 commit comments

Comments
 (0)