Skip to content

Commit 9fd9ae8

Browse files
authored
Merge pull request #1936 from input-output-hk/jpraynaud/1901-fix-data-inconsistency-cardano-transaction
Fix: data inconsistency in Cardano transactions stores
2 parents ebb4030 + 99e2300 commit 9fd9ae8

File tree

8 files changed

+48
-15
lines changed

8 files changed

+48
-15
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.

internal/mithril-persistence/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-persistence"
3-
version = "0.2.26"
3+
version = "0.2.27"
44
description = "Common types, interfaces, and utilities to persist data for Mithril nodes."
55
authors = { workspace = true }
66
edition = { workspace = true }

internal/mithril-persistence/src/database/cardano_transaction_migration.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,17 @@ vacuum;
106106
r#"
107107
drop index cardano_tx_immutable_file_number_index;
108108
alter table cardano_tx drop column immutable_file_number;
109+
"#,
110+
),
111+
// Migration 9
112+
// Truncate Cardano transaction related tables to avoid data inconsistency
113+
// with previous versions of the nodes.
114+
SqlMigration::new(
115+
9,
116+
r#"
117+
delete from cardano_tx;
118+
delete from block_range_root;
119+
vacuum;
109120
"#,
110121
),
111122
]

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.5.62"
3+
version = "0.5.63"
44
description = "A Mithril Aggregator server"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-aggregator/src/dependency_injection/builder.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,7 @@ impl DependenciesBuilder {
731731
let chain_block_reader = PallasChainReader::new(
732732
&self.configuration.cardano_node_socket_path,
733733
self.configuration.get_network()?,
734+
self.get_logger()?,
734735
);
735736

736737
Ok(Arc::new(Mutex::new(chain_block_reader)))

mithril-common/src/chain_reader/pallas_chain_reader.rs

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use pallas_network::{
77
miniprotocols::chainsync::{BlockContent, NextResponse},
88
};
99
use pallas_traverse::MultiEraBlock;
10+
use slog::{debug, Logger};
1011

1112
use crate::{cardano_block_scanner::ScannedBlock, entities::ChainPoint, CardanoNetwork, StdResult};
1213

@@ -17,15 +18,17 @@ pub struct PallasChainReader {
1718
socket: PathBuf,
1819
network: CardanoNetwork,
1920
client: Option<NodeClient>,
21+
logger: Logger,
2022
}
2123

2224
impl PallasChainReader {
2325
/// Creates a new `PallasChainReader` with the specified socket and network.
24-
pub fn new(socket: &Path, network: CardanoNetwork) -> Self {
26+
pub fn new(socket: &Path, network: CardanoNetwork, logger: Logger) -> Self {
2527
Self {
2628
socket: socket.to_owned(),
2729
network,
2830
client: None,
31+
logger,
2932
}
3033
}
3134

@@ -42,6 +45,7 @@ impl PallasChainReader {
4245
async fn get_client(&mut self) -> StdResult<&mut NodeClient> {
4346
if self.client.is_none() {
4447
self.client = Some(self.new_client().await?);
48+
debug!(self.logger, "PallasChainReader connected to a new client");
4549
}
4650

4751
self.client
@@ -51,13 +55,17 @@ impl PallasChainReader {
5155

5256
/// Intersects the point of the chain with the given point.
5357
async fn find_intersect_point(&mut self, point: &ChainPoint) -> StdResult<()> {
58+
let logger = self.logger.clone();
5459
let client = self.get_client().await?;
5560
let chainsync = client.chainsync();
5661

5762
if chainsync.has_agency() {
63+
debug!(logger, "PallasChainReader has agency, finding intersect point..."; "point" => ?point);
5864
chainsync
5965
.find_intersect(vec![point.to_owned().into()])
6066
.await?;
67+
} else {
68+
debug!(logger, "PallasChainReader doesn't have agency, no need to find intersect point";);
6169
}
6270

6371
Ok(())
@@ -130,6 +138,7 @@ mod tests {
130138

131139
use super::*;
132140

141+
use crate::test_utils::TestLogger;
133142
use crate::{entities::BlockNumber, test_utils::TempDir};
134143

135144
/// Enum representing the action to be performed by the server.
@@ -253,8 +262,11 @@ mod tests {
253262
)
254263
.await;
255264
let client = tokio::spawn(async move {
256-
let mut chain_reader =
257-
PallasChainReader::new(socket_path.as_path(), CardanoNetwork::TestNet(10));
265+
let mut chain_reader = PallasChainReader::new(
266+
socket_path.as_path(),
267+
CardanoNetwork::TestNet(10),
268+
TestLogger::stdout(),
269+
);
258270

259271
chain_reader
260272
.set_chain_point(&ChainPoint::from(known_point.clone()))
@@ -285,8 +297,11 @@ mod tests {
285297
)
286298
.await;
287299
let client = tokio::spawn(async move {
288-
let mut chain_reader =
289-
PallasChainReader::new(socket_path.as_path(), CardanoNetwork::TestNet(10));
300+
let mut chain_reader = PallasChainReader::new(
301+
socket_path.as_path(),
302+
CardanoNetwork::TestNet(10),
303+
TestLogger::stdout(),
304+
);
290305

291306
chain_reader
292307
.set_chain_point(&ChainPoint::from(known_point.clone()))
@@ -317,8 +332,11 @@ mod tests {
317332
)
318333
.await;
319334
let client = tokio::spawn(async move {
320-
let mut chain_reader =
321-
PallasChainReader::new(socket_path.as_path(), CardanoNetwork::TestNet(10));
335+
let mut chain_reader = PallasChainReader::new(
336+
socket_path.as_path(),
337+
CardanoNetwork::TestNet(10),
338+
TestLogger::stdout(),
339+
);
322340

323341
chain_reader
324342
.set_chain_point(&ChainPoint::from(known_point.clone()))

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.181"
3+
version = "0.2.182"
44
description = "A Mithril Signer"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-signer/src/dependency_injection/builder.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,11 @@ impl<'a> DependenciesBuilder<'a> {
264264
let transaction_store = Arc::new(CardanoTransactionRepository::new(
265265
sqlite_connection_cardano_transaction_pool.clone(),
266266
));
267-
let chain_block_reader =
268-
PallasChainReader::new(&self.config.cardano_node_socket_path, network);
267+
let chain_block_reader = PallasChainReader::new(
268+
&self.config.cardano_node_socket_path,
269+
network,
270+
slog_scope::logger(),
271+
);
269272
let block_scanner = Arc::new(CardanoBlockScanner::new(
270273
Arc::new(Mutex::new(chain_block_reader)),
271274
self.config

0 commit comments

Comments
 (0)