From beaf38da60e06189982e836be621d3ce94fe033f Mon Sep 17 00:00:00 2001 From: Damien Lachaume <135982616+dlachaume@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:49:34 +0200 Subject: [PATCH 1/2] fix: updating the empty existing stored configurations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sébastien Fauvel --- .../repository/epoch_settings_store.rs | 88 ++++++++++++++++++- .../src/dependency_injection/builder.rs | 12 +++ 2 files changed, 99 insertions(+), 1 deletion(-) diff --git a/mithril-aggregator/src/database/repository/epoch_settings_store.rs b/mithril-aggregator/src/database/repository/epoch_settings_store.rs index 1416eba2f66..80491a7e6c7 100644 --- a/mithril-aggregator/src/database/repository/epoch_settings_store.rs +++ b/mithril-aggregator/src/database/repository/epoch_settings_store.rs @@ -2,10 +2,11 @@ use std::sync::Arc; use async_trait::async_trait; -use mithril_common::entities::{Epoch, ProtocolParameters}; +use mithril_common::entities::{CardanoTransactionsSigningConfig, Epoch, ProtocolParameters}; use mithril_common::StdResult; use mithril_persistence::sqlite::{ConnectionExtensions, SqliteConnection}; use mithril_persistence::store::adapter::AdapterError; +use sqlite::Value; use crate::database::query::{ DeleteEpochSettingsQuery, GetEpochSettingsQuery, UpdateEpochSettingsQuery, @@ -30,6 +31,28 @@ impl EpochSettingsStore { retention_limit, } } + + #[deprecated(since = "0.5.72", note = "temporary fix, should be removed")] + /// Replace empty JSON values '{}' injected with Migration #28 + pub fn replace_cardano_signing_config_empty_values( + &self, + cardano_signing_config: CardanoTransactionsSigningConfig, + ) -> StdResult<()> { + let query = r#" + update epoch_setting + set cardano_transactions_signing_config = ? + where cardano_transactions_signing_config == '{}'"#; + + let mut statement = self.connection.prepare(query)?; + statement.bind::<&[(_, Value)]>(&[( + 1, + serde_json::to_string(&cardano_signing_config)?.into(), + )])?; + + statement.next()?; + + Ok(()) + } } #[async_trait] @@ -81,10 +104,73 @@ impl EpochSettingsStorer for EpochSettingsStore { #[cfg(test)] mod tests { + use mithril_common::entities::BlockNumber; + use crate::database::test_helper::{insert_epoch_settings, main_db_connection}; use super::*; + #[tokio::test] + async fn replace_cardano_signing_config_empty_values_updates_only_empty_values() { + let connection = main_db_connection().unwrap(); + connection.execute( + r#"insert into epoch_setting (epoch_setting_id, protocol_parameters, cardano_transactions_signing_config) + values ( + 1, + '{"k": 5, "m": 100, "phi_f": 0.65}', + '{"security_parameter": 70, "step": 20}' + )"#, + ).unwrap(); + connection.execute( + r#"insert into epoch_setting (epoch_setting_id, protocol_parameters, cardano_transactions_signing_config) + values ( + 2, + '{"k": 73, "m": 100, "phi_f": 0.65}', + '{}' + )"#, + ).unwrap(); + + let store = EpochSettingsStore::new(Arc::new(connection), None); + + let epoch_settings = store.get_epoch_settings(Epoch(1)).await.unwrap().unwrap(); + assert_eq!( + CardanoTransactionsSigningConfig { + security_parameter: BlockNumber(70), + step: BlockNumber(20), + }, + epoch_settings.cardano_transactions_signing_config + ); + + #[allow(deprecated)] + store + .replace_cardano_signing_config_empty_values(CardanoTransactionsSigningConfig { + security_parameter: BlockNumber(50), + step: BlockNumber(10), + }) + .unwrap(); + + { + let epoch_settings = store.get_epoch_settings(Epoch(1)).await.unwrap().unwrap(); + assert_eq!( + CardanoTransactionsSigningConfig { + security_parameter: BlockNumber(70), + step: BlockNumber(20), + }, + epoch_settings.cardano_transactions_signing_config + ); + } + { + let epoch_settings = store.get_epoch_settings(Epoch(2)).await.unwrap().unwrap(); + assert_eq!( + CardanoTransactionsSigningConfig { + security_parameter: BlockNumber(50), + step: BlockNumber(10), + }, + epoch_settings.cardano_transactions_signing_config + ); + } + } + #[tokio::test] async fn save_epoch_settings_prune_older_epoch_settings() { const EPOCH_SETTINGS_PRUNE_EPOCH_THRESHOLD: u64 = 5; diff --git a/mithril-aggregator/src/dependency_injection/builder.rs b/mithril-aggregator/src/dependency_injection/builder.rs index a0f1d3b6493..552bfcee96f 100644 --- a/mithril-aggregator/src/dependency_injection/builder.rs +++ b/mithril-aggregator/src/dependency_injection/builder.rs @@ -579,6 +579,18 @@ impl DependenciesBuilder { message: "cannot build aggregator runner: no epoch returned.".to_string(), error: None, })?; + + { + // Temporary fix, should be removed + // Replace empty JSON values '{}' injected with Migration #28 + let cardano_signing_config = self + .get_signed_entity_config()? + .cardano_transactions_signing_config; + #[allow(deprecated)] + epoch_settings_store + .replace_cardano_signing_config_empty_values(cardano_signing_config)?; + } + epoch_settings_store .handle_discrepancies_at_startup( current_epoch, From 0939f5624fc4e4e2fcef02c5a5a44b40c4cc6727 Mon Sep 17 00:00:00 2001 From: sfauvel Date: Tue, 1 Oct 2024 16:20:16 +0200 Subject: [PATCH 2/2] Upgrade crate versions * mithril-aggregator from `0.5.71` to `0.5.72` --- Cargo.lock | 2 +- mithril-aggregator/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fdb79b92f34..79dc05eeddc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3403,7 +3403,7 @@ dependencies = [ [[package]] name = "mithril-aggregator" -version = "0.5.71" +version = "0.5.72" dependencies = [ "anyhow", "async-trait", diff --git a/mithril-aggregator/Cargo.toml b/mithril-aggregator/Cargo.toml index 74e5a80c480..9cb07656cb8 100644 --- a/mithril-aggregator/Cargo.toml +++ b/mithril-aggregator/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mithril-aggregator" -version = "0.5.71" +version = "0.5.72" description = "A Mithril Aggregator server" authors = { workspace = true } edition = { workspace = true }