Skip to content

Commit 744d9ed

Browse files
committed
refacto: Move snapshotter creation to artifacts.rs
1 parent 7a2ace5 commit 744d9ed

File tree

3 files changed

+89
-113
lines changed

3 files changed

+89
-113
lines changed

mithril-aggregator/src/artifact_builder/cardano_database.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ mod tests {
149149
use crate::{
150150
artifact_builder::{MockAncillaryFileUploader, MockImmutableFilesUploader},
151151
immutable_file_digest_mapper::MockImmutableFileDigestMapper,
152-
services::FakeSnapshotter,
152+
services::{DumbSnapshotter, FakeSnapshotter},
153153
test_tools::TestLogger,
154154
tools::url_sanitizer::SanitizedUrlWithTrailingSlash,
155155
};
@@ -270,6 +270,7 @@ mod tests {
270270
DigestArtifactBuilder::new(
271271
SanitizedUrlWithTrailingSlash::parse("http://aggregator_uri").unwrap(),
272272
vec![],
273+
Arc::new(DumbSnapshotter::new()),
273274
CompressionAlgorithm::Gzip,
274275
network,
275276
test_dir.join("digests"),

mithril-aggregator/src/artifact_builder/cardano_database_artifacts/digest.rs

Lines changed: 45 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use slog::{error, Logger};
1616

1717
use crate::{
1818
file_uploaders::{GcpUploader, LocalUploader},
19-
services::{CompressedArchiveSnapshotter, Snapshotter, SnapshotterCompressionAlgorithm},
19+
services::Snapshotter,
2020
tools::url_sanitizer::SanitizedUrlWithTrailingSlash,
2121
DumbUploader, FileUploader, ImmutableFileDigestMapper,
2222
};
@@ -94,12 +94,12 @@ pub struct DigestArtifactBuilder {
9494
uploaders: Vec<Arc<dyn DigestFileUploader>>,
9595

9696
snapshotter: Arc<dyn Snapshotter>,
97+
9798
compression_algorithm: CompressionAlgorithm,
9899

99100
network: CardanoNetwork,
100101

101102
digests_dir: PathBuf,
102-
archive_dir: PathBuf,
103103

104104
immutable_file_digest_mapper: Arc<dyn ImmutableFileDigestMapper>,
105105

@@ -109,47 +109,6 @@ pub struct DigestArtifactBuilder {
109109
impl DigestArtifactBuilder {
110110
/// Creates a new [DigestArtifactBuilder].
111111
pub fn new(
112-
aggregator_url_prefix: SanitizedUrlWithTrailingSlash,
113-
uploaders: Vec<Arc<dyn DigestFileUploader>>,
114-
compression_algorithm: CompressionAlgorithm,
115-
network: CardanoNetwork,
116-
digests_dir: PathBuf,
117-
immutable_file_digest_mapper: Arc<dyn ImmutableFileDigestMapper>,
118-
logger: Logger,
119-
) -> StdResult<Self> {
120-
// TODO We have to pass SnapshotterCompressionAlgorithm ?
121-
// TODO CompressedArchiveSnapshotter use one temporary folder and should not be use by another one !!!
122-
let algorithm = match compression_algorithm {
123-
CompressionAlgorithm::Gzip => SnapshotterCompressionAlgorithm::Gzip,
124-
_ => todo!(),
125-
// Probably pass the SnappshotterCompressionAlgorithm to the struct or the snapshotter ?
126-
// CompressionAlgorithm::Zstandard => self
127-
// .configuration
128-
// .zstandard_parameters
129-
// .unwrap_or_default()
130-
// .into(),
131-
};
132-
133-
let snapshotter = CompressedArchiveSnapshotter::new(
134-
digests_dir.clone(),
135-
PathBuf::from("/tmp/mithril_test/unpack"),
136-
algorithm,
137-
logger.clone(),
138-
)?;
139-
140-
Self::new_with_snapshotter(
141-
aggregator_url_prefix,
142-
uploaders,
143-
Arc::new(snapshotter),
144-
compression_algorithm,
145-
network,
146-
digests_dir,
147-
immutable_file_digest_mapper,
148-
logger,
149-
)
150-
}
151-
152-
pub fn new_with_snapshotter(
153112
aggregator_url_prefix: SanitizedUrlWithTrailingSlash,
154113
uploaders: Vec<Arc<dyn DigestFileUploader>>,
155114
snapshotter: Arc<dyn Snapshotter>,
@@ -165,7 +124,6 @@ impl DigestArtifactBuilder {
165124
snapshotter,
166125
compression_algorithm,
167126
network,
168-
archive_dir: digests_dir.clone(),
169127
digests_dir,
170128
immutable_file_digest_mapper,
171129
logger: logger.new_with_component_name::<Self>(),
@@ -183,12 +141,14 @@ impl DigestArtifactBuilder {
183141
fs::remove_file(&digest_path).with_context(|| {
184142
format!("Could not remove digest file: '{}'", digest_path.display())
185143
})?;
186-
fs::remove_file(&digest_archive_file_path).with_context(|| {
187-
format!(
188-
"Could not remove digest archive file: '{}'",
189-
digest_archive_file_path.display()
190-
)
191-
})?;
144+
if digest_archive_file_path.exists() {
145+
fs::remove_file(&digest_archive_file_path).with_context(|| {
146+
format!(
147+
"Could not remove digest archive file: '{}'",
148+
digest_archive_file_path.display()
149+
)
150+
})?;
151+
}
192152

193153
let size = file_metadata
194154
.with_context(|| {
@@ -206,12 +166,11 @@ impl DigestArtifactBuilder {
206166
}
207167

208168
fn create_archive_file(&self, beacon: &CardanoDbBeacon) -> Result<PathBuf, anyhow::Error> {
209-
let digest_archive_file_path = Self::get_digests_file_path(
210-
&self.archive_dir,
169+
let digest_archive_file_path = PathBuf::from(Self::get_digests_file_name(
211170
&self.network,
212171
beacon,
213172
&self.compression_algorithm.tar_file_extension(),
214-
);
173+
));
215174
let digest_file_name =
216175
PathBuf::from(Self::get_digests_file_name(&self.network, beacon, "json"));
217176
self.snapshotter
@@ -326,7 +285,11 @@ mod tests {
326285
};
327286

328287
use crate::{
329-
immutable_file_digest_mapper::MockImmutableFileDigestMapper, test_tools::TestLogger,
288+
immutable_file_digest_mapper::MockImmutableFileDigestMapper,
289+
services::{
290+
CompressedArchiveSnapshotter, DumbSnapshotter, SnapshotterCompressionAlgorithm,
291+
},
292+
test_tools::TestLogger,
330293
};
331294
use anyhow::anyhow;
332295
use flate2::read::GzDecoder;
@@ -338,6 +301,7 @@ mod tests {
338301
};
339302
use mockall::predicate::eq;
340303
use tar::Archive;
304+
use uuid::Uuid;
341305

342306
use super::*;
343307

@@ -378,6 +342,7 @@ mod tests {
378342
let builder = DigestArtifactBuilder::new(
379343
SanitizedUrlWithTrailingSlash::parse("https://aggregator/").unwrap(),
380344
vec![],
345+
Arc::new(DumbSnapshotter::new()),
381346
CompressionAlgorithm::Gzip,
382347
CardanoNetwork::DevNet(123),
383348
temp_dir,
@@ -407,6 +372,7 @@ mod tests {
407372
let builder = DigestArtifactBuilder::new(
408373
SanitizedUrlWithTrailingSlash::parse("https://aggregator/").unwrap(),
409374
vec![],
375+
Arc::new(DumbSnapshotter::new()),
410376
CompressionAlgorithm::Gzip,
411377
CardanoNetwork::DevNet(123),
412378
temp_dir,
@@ -438,6 +404,7 @@ mod tests {
438404
let builder = DigestArtifactBuilder::new(
439405
SanitizedUrlWithTrailingSlash::parse("https://aggregator/").unwrap(),
440406
vec![Arc::new(uploader)],
407+
Arc::new(DumbSnapshotter::new()),
441408
CompressionAlgorithm::Gzip,
442409
CardanoNetwork::DevNet(123),
443410
PathBuf::from("/tmp/whatever"),
@@ -460,6 +427,7 @@ mod tests {
460427
let builder = DigestArtifactBuilder::new(
461428
SanitizedUrlWithTrailingSlash::parse("https://aggregator/").unwrap(),
462429
vec![Arc::new(uploader)],
430+
Arc::new(DumbSnapshotter::new()),
463431
CompressionAlgorithm::Gzip,
464432
CardanoNetwork::DevNet(123),
465433
PathBuf::from("/tmp/whatever"),
@@ -491,6 +459,7 @@ mod tests {
491459
let builder = DigestArtifactBuilder::new(
492460
SanitizedUrlWithTrailingSlash::parse("https://aggregator/").unwrap(),
493461
uploaders,
462+
Arc::new(DumbSnapshotter::new()),
494463
CompressionAlgorithm::Gzip,
495464
CardanoNetwork::DevNet(123),
496465
PathBuf::from("/tmp/whatever"),
@@ -529,6 +498,7 @@ mod tests {
529498
let builder = DigestArtifactBuilder::new(
530499
SanitizedUrlWithTrailingSlash::parse("https://aggregator/").unwrap(),
531500
uploaders,
501+
Arc::new(DumbSnapshotter::new()),
532502
CompressionAlgorithm::Gzip,
533503
CardanoNetwork::DevNet(123),
534504
PathBuf::from("/tmp/whatever"),
@@ -576,6 +546,7 @@ mod tests {
576546
let builder = DigestArtifactBuilder::new(
577547
SanitizedUrlWithTrailingSlash::parse("https://aggregator/").unwrap(),
578548
vec![],
549+
Arc::new(DumbSnapshotter::new()),
579550
CompressionAlgorithm::Gzip,
580551
CardanoNetwork::DevNet(123),
581552
temp_dir,
@@ -603,55 +574,11 @@ mod tests {
603574
);
604575
}
605576

606-
// #[tokio::test]
607-
// async fn upload_should_call_upload_with_created_digest_file_and_delete_the_file() {
608-
// let digests_dir = TempDir::create("digest", current_function!());
609-
// let mut immutable_file_digest_mapper = MockImmutableFileDigestMapper::new();
610-
// immutable_file_digest_mapper
611-
// .expect_get_immutable_file_digest_map()
612-
// .returning(|| Ok(BTreeMap::new()));
613-
614-
// let mut digest_file_uploader = MockDigestFileUploader::new();
615-
616-
// let beacon = CardanoDbBeacon::new(3, 456);
617-
// let network = CardanoNetwork::DevNet(24);
618-
// let digest_file =
619-
// DigestArtifactBuilder::get_digests_file_path(&digests_dir, &network, &beacon, "json");
620-
621-
// let digest_file_clone = digest_file.clone();
622-
// digest_file_uploader
623-
// .expect_upload()
624-
// .withf(move |path, algorithm| {
625-
// path == digest_file_clone && path.exists() && algorithm.is_none()
626-
// })
627-
// .times(1)
628-
// .return_once(|_, _| {
629-
// Ok(DigestLocation::CloudStorage {
630-
// uri: "an_uri".to_string(),
631-
// compression_algorithm: None,
632-
// })
633-
// });
634-
635-
// let builder = DigestArtifactBuilder::new(
636-
// SanitizedUrlWithTrailingSlash::parse("https://aggregator/").unwrap(),
637-
// vec![Arc::new(digest_file_uploader)],
638-
// CompressionAlgorithm::Gzip,
639-
// network,
640-
// digests_dir,
641-
// Arc::new(immutable_file_digest_mapper),
642-
// TestLogger::stdout(),
643-
// )
644-
// .unwrap();
645-
646-
// let _locations = builder.upload(&beacon).await.unwrap();
647-
648-
// assert!(!digest_file.exists());
649-
// }
650-
651577
#[tokio::test]
652578
async fn upload_should_call_upload_with_created_digest_archive_file_and_delete_the_file() {
653579
let tmp_dir = TempDir::create("digest", current_function!());
654580
let digests_dir = tmp_dir.join("digest");
581+
let digests_archive_dir = tmp_dir.join("archive");
655582
let mut immutable_file_digest_mapper = MockImmutableFileDigestMapper::new();
656583
immutable_file_digest_mapper
657584
.expect_get_immutable_file_digest_map()
@@ -665,26 +592,31 @@ mod tests {
665592
let network = CardanoNetwork::DevNet(24);
666593
let digest_file_name =
667594
DigestArtifactBuilder::get_digests_file_name(&network, &beacon, "json");
668-
let digest_archive_file = DigestArtifactBuilder::get_digests_file_path(
669-
&digests_dir,
595+
let archive_path = DigestArtifactBuilder::get_digests_file_path(
596+
&digests_archive_dir,
670597
&network,
671598
&beacon,
672599
&compression_algorithm.tar_file_extension(),
673600
);
601+
let digest_archive_file = PathBuf::from(DigestArtifactBuilder::get_digests_file_name(
602+
&network,
603+
&beacon,
604+
&compression_algorithm.tar_file_extension(),
605+
));
674606

675607
digest_file_uploader
676608
.expect_upload()
677609
.with(eq(digest_archive_file), eq(None))
678610
.times(1)
679-
.return_once(move |archive_path, _| {
611+
.return_once(move |_, _| {
680612
assert!(
681613
archive_path.exists(),
682614
"Path to upload should exist: {}",
683615
archive_path.display()
684616
);
685617

686618
let unpack_dir = tmp_dir.join("unpack");
687-
unpack_archive(archive_path, &unpack_dir);
619+
unpack_archive(&archive_path, &unpack_dir);
688620

689621
let unpack_digest_file = unpack_dir.join(digest_file_name);
690622
assert!(unpack_digest_file.is_file());
@@ -695,9 +627,19 @@ mod tests {
695627
})
696628
});
697629

630+
let mut snapshotter = CompressedArchiveSnapshotter::new(
631+
digests_dir.clone(),
632+
digests_archive_dir,
633+
SnapshotterCompressionAlgorithm::Gzip,
634+
TestLogger::stdout(),
635+
)
636+
.unwrap();
637+
snapshotter.set_sub_temp_dir(Uuid::new_v4().to_string());
638+
698639
let builder = DigestArtifactBuilder::new(
699640
SanitizedUrlWithTrailingSlash::parse("https://aggregator/").unwrap(),
700641
vec![Arc::new(digest_file_uploader)],
642+
Arc::new(snapshotter),
701643
compression_algorithm,
702644
network,
703645
digests_dir.clone(),

0 commit comments

Comments
 (0)