Skip to content

Commit 2322b54

Browse files
authored
Merge pull request #800 from input-output-hk/greg/799/stake_pool_service
add stake pool service
2 parents b9dee08 + 8f296a9 commit 2322b54

File tree

23 files changed

+636
-307
lines changed

23 files changed

+636
-307
lines changed

Cargo.lock

Lines changed: 3 additions & 3 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.2.33"
3+
version = "0.2.34"
44
description = "A Mithril Aggregator server"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-aggregator/src/command_args.rs

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,9 @@ use config::{builder::DefaultState, ConfigBuilder, Map, Source, Value, ValueKind
33
use slog::Level;
44
use slog_scope::{crit, debug, info};
55
use sqlite::Connection;
6-
use std::{
7-
error::Error,
8-
ffi::OsStr,
9-
fs,
10-
net::IpAddr,
11-
path::PathBuf,
12-
sync::{Arc, Mutex},
13-
};
6+
use std::{error::Error, ffi::OsStr, fs, net::IpAddr, path::PathBuf, sync::Arc};
147
use tokio::{
15-
sync::{oneshot, RwLock},
8+
sync::{oneshot, Mutex, RwLock},
169
task::JoinSet,
1710
time::Duration,
1811
};
@@ -40,6 +33,7 @@ use crate::{
4033
database::provider::StakePoolStore,
4134
event_store::{self, TransmitterService},
4235
http_server::routes::router,
36+
stake_distribution_service::MithrilStakeDistributionService,
4337
tools::{EraTools, GenesisTools, GenesisToolsDependency},
4438
AggregatorConfig, AggregatorRunner, AggregatorRuntime, CertificatePendingStore,
4539
CertificateStore, Configuration, DefaultConfiguration, DependencyManager, GenesisConfiguration,
@@ -49,12 +43,10 @@ use crate::{
4943

5044
const SQLITE_MONITORING_FILE: &str = "monitoring.sqlite3";
5145

52-
fn setup_genesis_dependencies(
46+
async fn setup_genesis_dependencies(
5347
config: &GenesisConfiguration,
5448
) -> Result<GenesisToolsDependency, Box<dyn std::error::Error>> {
5549
let sqlite_db_path = Some(config.get_sqlite_file());
56-
check_database_migration(config.get_sqlite_file())?;
57-
5850
let chain_observer = Arc::new(
5951
mithril_common::chain_observer::CardanoCliChainObserver::new(Box::new(
6052
CardanoCliRunner::new(
@@ -70,6 +62,11 @@ fn setup_genesis_dependencies(
7062
.map(|path| path.as_os_str())
7163
.unwrap_or(OsStr::new(":memory:")),
7264
)?));
65+
66+
// DATABASE MIGRATION
67+
check_database_migration(sqlite_connection.clone()).await?;
68+
69+
let stake_store = Arc::new(StakePoolStore::new(sqlite_connection.clone()));
7370
let immutable_file_observer = Arc::new(ImmutableFileSystemObserver::new(&config.db_directory));
7471
let beacon_provider = Arc::new(BeaconProviderImpl::new(
7572
chain_observer,
@@ -99,7 +96,6 @@ fn setup_genesis_dependencies(
9996
)?),
10097
config.store_retention_limit,
10198
));
102-
let stake_store = Arc::new(StakePoolStore::new(sqlite_connection.clone()));
10399
let single_signature_store = Arc::new(SingleSignatureStore::new(
104100
Box::new(SQLiteAdapter::new("single_signature", sqlite_connection)?),
105101
config.store_retention_limit,
@@ -159,18 +155,23 @@ async fn do_first_launch_initialization_if_needed(
159155

160156
/// Database version checker.
161157
/// This is the place where migrations are to be registered.
162-
fn check_database_migration(sql_file_path: PathBuf) -> Result<(), Box<dyn Error>> {
158+
pub async fn check_database_migration(
159+
connection: Arc<Mutex<Connection>>,
160+
) -> Result<(), Box<dyn Error>> {
163161
let mut db_checker = DatabaseVersionChecker::new(
164162
slog_scope::logger(),
165163
ApplicationNodeType::Aggregator,
166-
sql_file_path,
164+
connection,
167165
);
168166

169167
for migration in crate::database::migration::get_migrations() {
170168
db_checker.add_migration(migration);
171169
}
172170

173-
db_checker.apply().map_err(|e| -> Box<dyn Error> { e })
171+
db_checker
172+
.apply()
173+
.await
174+
.map_err(|e| -> Box<dyn Error> { e })
174175
}
175176

176177
/// Mithril Aggregator Node
@@ -345,11 +346,14 @@ impl ServeCommand {
345346
.try_deserialize()
346347
.map_err(|e| format!("configuration deserialize error: {e}"))?;
347348
debug!("SERVE command"; "config" => format!("{config:?}"));
348-
check_database_migration(config.get_sqlite_file())?;
349349

350350
// Init dependencies
351351
let sqlite_db_path = config.get_sqlite_file();
352352
let sqlite_connection = Arc::new(Mutex::new(Connection::open(sqlite_db_path)?));
353+
354+
// DATABASE MIGRATION
355+
check_database_migration(sqlite_connection.clone()).await?;
356+
353357
let snapshot_store = Arc::new(LocalSnapshotStore::new(
354358
Box::new(SQLiteAdapter::new("snapshot", sqlite_connection.clone())?),
355359
LIST_SNAPSHOTS_MAX_ITEMS,
@@ -370,7 +374,6 @@ impl ServeCommand {
370374
)?),
371375
config.store_retention_limit,
372376
));
373-
let stake_store = Arc::new(StakePoolStore::new(sqlite_connection.clone()));
374377
let single_signature_store = Arc::new(SingleSignatureStore::new(
375378
Box::new(SQLiteAdapter::new(
376379
"single_signature",
@@ -381,7 +384,7 @@ impl ServeCommand {
381384
let protocol_parameters_store = Arc::new(ProtocolParametersStore::new(
382385
Box::new(SQLiteAdapter::new(
383386
"protocol_parameters",
384-
sqlite_connection,
387+
sqlite_connection.clone(),
385388
)?),
386389
config.store_retention_limit,
387390
));
@@ -394,6 +397,11 @@ impl ServeCommand {
394397
),
395398
)),
396399
);
400+
let stake_store = Arc::new(StakePoolStore::new(sqlite_connection.clone()));
401+
let stake_distribution_service = Arc::new(MithrilStakeDistributionService::new(
402+
stake_store.clone(),
403+
chain_observer.clone(),
404+
));
397405
let immutable_file_observer =
398406
Arc::new(ImmutableFileSystemObserver::new(&config.db_directory));
399407
let beacon_provider = Arc::new(BeaconProviderImpl::new(
@@ -452,13 +460,14 @@ impl ServeCommand {
452460
// Init dependency manager
453461
let dependency_manager = DependencyManager {
454462
config: config.clone(),
463+
sqlite_connection,
464+
stake_store,
455465
snapshot_store: snapshot_store.clone(),
456466
snapshot_uploader: snapshot_uploader.clone(),
457467
multi_signer: multi_signer.clone(),
458468
certificate_pending_store: certificate_pending_store.clone(),
459469
certificate_store: certificate_store.clone(),
460470
verification_key_store: verification_key_store.clone(),
461-
stake_store: stake_store.clone(),
462471
single_signature_store: single_signature_store.clone(),
463472
protocol_parameters_store: protocol_parameters_store.clone(),
464473
chain_observer: chain_observer.clone(),
@@ -474,6 +483,7 @@ impl ServeCommand {
474483
era_reader: era_reader.clone(),
475484
event_transmitter,
476485
api_version_provider,
486+
stake_distribution_service,
477487
};
478488
let dependency_manager = Arc::new(dependency_manager);
479489

@@ -633,7 +643,7 @@ impl ExportGenesisSubCommand {
633643
"Genesis export payload to sign to {}",
634644
self.target_path.display()
635645
);
636-
let dependencies = setup_genesis_dependencies(&config)?;
646+
let dependencies = setup_genesis_dependencies(&config).await?;
637647

638648
let genesis_tools = GenesisTools::from_dependencies(dependencies).await?;
639649
genesis_tools.export_payload_to_sign(&self.target_path)
@@ -662,7 +672,7 @@ impl ImportGenesisSubCommand {
662672
"Genesis import signed payload from {}",
663673
self.signed_payload_path.to_string_lossy()
664674
);
665-
let dependencies = setup_genesis_dependencies(&config)?;
675+
let dependencies = setup_genesis_dependencies(&config).await?;
666676

667677
let genesis_tools = GenesisTools::from_dependencies(dependencies).await?;
668678
genesis_tools
@@ -690,7 +700,7 @@ impl BootstrapGenesisSubCommand {
690700
.map_err(|e| format!("configuration deserialize error: {e}"))?;
691701
debug!("BOOTSTRAP GENESIS command"; "config" => format!("{config:?}"));
692702
println!("Genesis bootstrap for test only!");
693-
let dependencies = setup_genesis_dependencies(&config)?;
703+
let dependencies = setup_genesis_dependencies(&config).await?;
694704

695705
let genesis_tools = GenesisTools::from_dependencies(dependencies).await?;
696706
let genesis_secret_key = key_decode_hex(&self.genesis_secret_key)?;

0 commit comments

Comments
 (0)