@@ -86,16 +86,37 @@ pub struct DigestUpload {
86
86
pub size : u64 ,
87
87
}
88
88
89
+ pub struct DigestSnapshotter {
90
+ pub snapshotter : Arc < dyn Snapshotter > ,
91
+ pub compression_algorithm : CompressionAlgorithm ,
92
+ }
93
+
94
+ impl DigestSnapshotter {
95
+ fn create_archive_file ( & self , digest_file_name : PathBuf ) -> Result < PathBuf , anyhow:: Error > {
96
+ let digest_archive_file_path =
97
+ digest_file_name. with_extension ( self . compression_algorithm . tar_file_extension ( ) ) ;
98
+ let ongoing_digests_archive = self
99
+ . snapshotter
100
+ . snapshot_subset ( & digest_archive_file_path, vec ! [ digest_file_name. clone( ) ] )
101
+ . with_context ( || {
102
+ format ! (
103
+ "Could not create snapshot of digest file: '{}'" ,
104
+ digest_file_name. display( )
105
+ )
106
+ } ) ?;
107
+
108
+ Ok ( ongoing_digests_archive. get_file_path ( ) . clone ( ) )
109
+ }
110
+ }
111
+
89
112
pub struct DigestArtifactBuilder {
90
113
/// Aggregator URL prefix
91
114
aggregator_url_prefix : SanitizedUrlWithTrailingSlash ,
92
115
93
116
/// Uploaders
94
117
uploaders : Vec < Arc < dyn DigestFileUploader > > ,
95
118
96
- snapshotter : Arc < dyn Snapshotter > ,
97
-
98
- compression_algorithm : CompressionAlgorithm ,
119
+ digest_snapshotter : DigestSnapshotter ,
99
120
100
121
network : CardanoNetwork ,
101
122
@@ -111,8 +132,7 @@ impl DigestArtifactBuilder {
111
132
pub fn new (
112
133
aggregator_url_prefix : SanitizedUrlWithTrailingSlash ,
113
134
uploaders : Vec < Arc < dyn DigestFileUploader > > ,
114
- snapshotter : Arc < dyn Snapshotter > ,
115
- compression_algorithm : CompressionAlgorithm ,
135
+ digest_snapshotter : DigestSnapshotter ,
116
136
network : CardanoNetwork ,
117
137
digests_dir : PathBuf ,
118
138
immutable_file_digest_mapper : Arc < dyn ImmutableFileDigestMapper > ,
@@ -121,8 +141,7 @@ impl DigestArtifactBuilder {
121
141
Ok ( Self {
122
142
aggregator_url_prefix,
123
143
uploaders,
124
- snapshotter,
125
- compression_algorithm,
144
+ digest_snapshotter,
126
145
network,
127
146
digests_dir,
128
147
immutable_file_digest_mapper,
@@ -132,7 +151,11 @@ impl DigestArtifactBuilder {
132
151
133
152
pub async fn upload ( & self , beacon : & CardanoDbBeacon ) -> StdResult < DigestUpload > {
134
153
let digest_path = self . create_digest_file ( beacon) . await ?;
135
- let digest_archive_file_path = self . create_archive_file ( beacon) ?;
154
+ let digest_file_name =
155
+ PathBuf :: from ( Self :: get_digests_file_name ( & self . network , beacon, "json" ) ) ;
156
+ let digest_archive_file_path = self
157
+ . digest_snapshotter
158
+ . create_archive_file ( digest_file_name) ?;
136
159
137
160
let locations = self . upload_digest_file ( & digest_archive_file_path) . await ;
138
161
@@ -165,26 +188,6 @@ impl DigestArtifactBuilder {
165
188
} )
166
189
}
167
190
168
- fn create_archive_file ( & self , beacon : & CardanoDbBeacon ) -> Result < PathBuf , anyhow:: Error > {
169
- let digest_archive_file_path = PathBuf :: from ( Self :: get_digests_file_name (
170
- & self . network ,
171
- beacon,
172
- & self . compression_algorithm . tar_file_extension ( ) ,
173
- ) ) ;
174
- let digest_file_name =
175
- PathBuf :: from ( Self :: get_digests_file_name ( & self . network , beacon, "json" ) ) ;
176
- self . snapshotter
177
- . snapshot_subset ( & digest_archive_file_path, vec ! [ digest_file_name. clone( ) ] )
178
- . with_context ( || {
179
- format ! (
180
- "Could not create snapshot of digest file: '{}'" ,
181
- digest_file_name. display( )
182
- )
183
- } ) ?;
184
-
185
- Ok ( digest_archive_file_path)
186
- }
187
-
188
191
async fn create_digest_file ( & self , beacon : & CardanoDbBeacon ) -> StdResult < PathBuf > {
189
192
let immutable_file_digest_map = self
190
193
. immutable_file_digest_mapper
@@ -342,8 +345,10 @@ mod tests {
342
345
let builder = DigestArtifactBuilder :: new (
343
346
SanitizedUrlWithTrailingSlash :: parse ( "https://aggregator/" ) . unwrap ( ) ,
344
347
vec ! [ ] ,
345
- Arc :: new ( DumbSnapshotter :: new ( ) ) ,
346
- CompressionAlgorithm :: Gzip ,
348
+ DigestSnapshotter {
349
+ snapshotter : Arc :: new ( DumbSnapshotter :: new ( ) ) ,
350
+ compression_algorithm : CompressionAlgorithm :: Gzip ,
351
+ } ,
347
352
CardanoNetwork :: DevNet ( 123 ) ,
348
353
temp_dir,
349
354
Arc :: new ( immutable_file_digest_mapper) ,
@@ -372,8 +377,10 @@ mod tests {
372
377
let builder = DigestArtifactBuilder :: new (
373
378
SanitizedUrlWithTrailingSlash :: parse ( "https://aggregator/" ) . unwrap ( ) ,
374
379
vec ! [ ] ,
375
- Arc :: new ( DumbSnapshotter :: new ( ) ) ,
376
- CompressionAlgorithm :: Gzip ,
380
+ DigestSnapshotter {
381
+ snapshotter : Arc :: new ( DumbSnapshotter :: new ( ) ) ,
382
+ compression_algorithm : CompressionAlgorithm :: Gzip ,
383
+ } ,
377
384
CardanoNetwork :: DevNet ( 123 ) ,
378
385
temp_dir,
379
386
Arc :: new ( immutable_file_digest_mapper) ,
@@ -404,8 +411,10 @@ mod tests {
404
411
let builder = DigestArtifactBuilder :: new (
405
412
SanitizedUrlWithTrailingSlash :: parse ( "https://aggregator/" ) . unwrap ( ) ,
406
413
vec ! [ Arc :: new( uploader) ] ,
407
- Arc :: new ( DumbSnapshotter :: new ( ) ) ,
408
- CompressionAlgorithm :: Gzip ,
414
+ DigestSnapshotter {
415
+ snapshotter : Arc :: new ( DumbSnapshotter :: new ( ) ) ,
416
+ compression_algorithm : CompressionAlgorithm :: Gzip ,
417
+ } ,
409
418
CardanoNetwork :: DevNet ( 123 ) ,
410
419
PathBuf :: from ( "/tmp/whatever" ) ,
411
420
Arc :: new ( MockImmutableFileDigestMapper :: new ( ) ) ,
@@ -427,8 +436,10 @@ mod tests {
427
436
let builder = DigestArtifactBuilder :: new (
428
437
SanitizedUrlWithTrailingSlash :: parse ( "https://aggregator/" ) . unwrap ( ) ,
429
438
vec ! [ Arc :: new( uploader) ] ,
430
- Arc :: new ( DumbSnapshotter :: new ( ) ) ,
431
- CompressionAlgorithm :: Gzip ,
439
+ DigestSnapshotter {
440
+ snapshotter : Arc :: new ( DumbSnapshotter :: new ( ) ) ,
441
+ compression_algorithm : CompressionAlgorithm :: Gzip ,
442
+ } ,
432
443
CardanoNetwork :: DevNet ( 123 ) ,
433
444
PathBuf :: from ( "/tmp/whatever" ) ,
434
445
Arc :: new ( MockImmutableFileDigestMapper :: new ( ) ) ,
@@ -459,8 +470,10 @@ mod tests {
459
470
let builder = DigestArtifactBuilder :: new (
460
471
SanitizedUrlWithTrailingSlash :: parse ( "https://aggregator/" ) . unwrap ( ) ,
461
472
uploaders,
462
- Arc :: new ( DumbSnapshotter :: new ( ) ) ,
463
- CompressionAlgorithm :: Gzip ,
473
+ DigestSnapshotter {
474
+ snapshotter : Arc :: new ( DumbSnapshotter :: new ( ) ) ,
475
+ compression_algorithm : CompressionAlgorithm :: Gzip ,
476
+ } ,
464
477
CardanoNetwork :: DevNet ( 123 ) ,
465
478
PathBuf :: from ( "/tmp/whatever" ) ,
466
479
Arc :: new ( MockImmutableFileDigestMapper :: new ( ) ) ,
@@ -498,8 +511,10 @@ mod tests {
498
511
let builder = DigestArtifactBuilder :: new (
499
512
SanitizedUrlWithTrailingSlash :: parse ( "https://aggregator/" ) . unwrap ( ) ,
500
513
uploaders,
501
- Arc :: new ( DumbSnapshotter :: new ( ) ) ,
502
- CompressionAlgorithm :: Gzip ,
514
+ DigestSnapshotter {
515
+ snapshotter : Arc :: new ( DumbSnapshotter :: new ( ) ) ,
516
+ compression_algorithm : CompressionAlgorithm :: Gzip ,
517
+ } ,
503
518
CardanoNetwork :: DevNet ( 123 ) ,
504
519
PathBuf :: from ( "/tmp/whatever" ) ,
505
520
Arc :: new ( MockImmutableFileDigestMapper :: new ( ) ) ,
@@ -546,8 +561,10 @@ mod tests {
546
561
let builder = DigestArtifactBuilder :: new (
547
562
SanitizedUrlWithTrailingSlash :: parse ( "https://aggregator/" ) . unwrap ( ) ,
548
563
vec ! [ ] ,
549
- Arc :: new ( DumbSnapshotter :: new ( ) ) ,
550
- CompressionAlgorithm :: Gzip ,
564
+ DigestSnapshotter {
565
+ snapshotter : Arc :: new ( DumbSnapshotter :: new ( ) ) ,
566
+ compression_algorithm : CompressionAlgorithm :: Gzip ,
567
+ } ,
551
568
CardanoNetwork :: DevNet ( 123 ) ,
552
569
temp_dir,
553
570
Arc :: new ( immutable_file_digest_mapper) ,
@@ -598,15 +615,10 @@ mod tests {
598
615
& beacon,
599
616
& compression_algorithm. tar_file_extension ( ) ,
600
617
) ;
601
- let digest_archive_file = PathBuf :: from ( DigestArtifactBuilder :: get_digests_file_name (
602
- & network,
603
- & beacon,
604
- & compression_algorithm. tar_file_extension ( ) ,
605
- ) ) ;
606
618
607
619
digest_file_uploader
608
620
. expect_upload ( )
609
- . with ( eq ( digest_archive_file ) , eq ( None ) )
621
+ . with ( eq ( archive_path . clone ( ) ) , eq ( None ) )
610
622
. times ( 1 )
611
623
. return_once ( move |_, _| {
612
624
assert ! (
@@ -639,8 +651,10 @@ mod tests {
639
651
let builder = DigestArtifactBuilder :: new (
640
652
SanitizedUrlWithTrailingSlash :: parse ( "https://aggregator/" ) . unwrap ( ) ,
641
653
vec ! [ Arc :: new( digest_file_uploader) ] ,
642
- Arc :: new ( snapshotter) ,
643
- compression_algorithm,
654
+ DigestSnapshotter {
655
+ snapshotter : Arc :: new ( snapshotter) ,
656
+ compression_algorithm : CompressionAlgorithm :: Gzip ,
657
+ } ,
644
658
network,
645
659
digests_dir. clone ( ) ,
646
660
Arc :: new ( immutable_file_digest_mapper) ,
0 commit comments