1
- use std:: { path :: PathBuf , sync:: Arc } ;
1
+ use std:: sync:: Arc ;
2
2
3
3
use anyhow:: { anyhow, Context } ;
4
4
use async_trait:: async_trait;
@@ -13,15 +13,12 @@ use mithril_common::{
13
13
CardanoNetwork , StdResult ,
14
14
} ;
15
15
16
- use crate :: artifact_builder:: {
17
- utils:: compute_uncompressed_database_size, AncillaryArtifactBuilder , ArtifactBuilder ,
18
- } ;
16
+ use crate :: artifact_builder:: { AncillaryArtifactBuilder , ArtifactBuilder } ;
19
17
20
18
use super :: { DigestArtifactBuilder , ImmutableArtifactBuilder } ;
21
19
22
20
pub struct CardanoDatabaseArtifactBuilder {
23
21
network : CardanoNetwork ,
24
- db_directory : PathBuf ,
25
22
cardano_node_version : Version ,
26
23
ancillary_builder : Arc < AncillaryArtifactBuilder > ,
27
24
immutable_builder : Arc < ImmutableArtifactBuilder > ,
@@ -31,15 +28,13 @@ pub struct CardanoDatabaseArtifactBuilder {
31
28
impl CardanoDatabaseArtifactBuilder {
32
29
pub fn new (
33
30
network : CardanoNetwork ,
34
- db_directory : PathBuf ,
35
31
cardano_node_version : & Version ,
36
32
ancillary_builder : Arc < AncillaryArtifactBuilder > ,
37
33
immutable_builder : Arc < ImmutableArtifactBuilder > ,
38
34
digest_builder : Arc < DigestArtifactBuilder > ,
39
35
) -> Self {
40
36
Self {
41
37
network,
42
- db_directory,
43
38
cardano_node_version : cardano_node_version. clone ( ) ,
44
39
ancillary_builder,
45
40
immutable_builder,
@@ -67,55 +62,27 @@ impl ArtifactBuilder<CardanoDbBeacon, CardanoDatabaseSnapshot> for CardanoDataba
67
62
SignedEntityType :: CardanoDatabase ( beacon. clone( ) )
68
63
)
69
64
} ) ?;
70
- let total_db_size_uncompressed = {
71
- let db_directory = self . db_directory . clone ( ) ;
72
- tokio:: task:: spawn_blocking ( move || -> StdResult < u64 > {
73
- compute_uncompressed_database_size ( & db_directory)
74
- } )
75
- . await ??
76
- } ;
77
-
78
- let ancillary_locations = self . ancillary_builder . upload ( & beacon) . await ?;
79
- let ancillary_builder = self . ancillary_builder . clone ( ) ;
80
- let ancillary_size = {
81
- let db_directory = self . db_directory . clone ( ) ;
82
- let beacon = beacon. clone ( ) ;
83
- tokio:: task:: spawn_blocking ( move || -> StdResult < u64 > {
84
- ancillary_builder. compute_uncompressed_size ( & db_directory, & beacon)
85
- } )
86
- . await ??
87
- } ;
88
65
89
- let immutables_locations = self
66
+ let ancillary_upload = self . ancillary_builder . upload ( & beacon) . await ?;
67
+ let immutables_upload = self
90
68
. immutable_builder
91
69
. upload ( beacon. immutable_file_number )
92
70
. await ?;
93
- let immutable_average_size = {
94
- let db_directory = self . db_directory . clone ( ) ;
95
- let immutable_file_number = beacon. immutable_file_number ;
96
- let immutable_builder = self . immutable_builder . clone ( ) ;
97
- tokio:: task:: spawn_blocking ( move || -> StdResult < u64 > {
98
- immutable_builder
99
- . compute_average_uncompressed_size ( & db_directory, immutable_file_number)
100
- } )
101
- . await ??
102
- } ;
103
-
104
71
let digest_upload = self . digest_builder . upload ( & beacon) . await ?;
105
72
106
73
let content = CardanoDatabaseSnapshotArtifactData {
107
- total_db_size_uncompressed,
74
+ total_db_size_uncompressed : ancillary_upload . size + immutables_upload . total_size ,
108
75
digests : DigestsLocations {
109
76
size_uncompressed : digest_upload. size ,
110
77
locations : digest_upload. locations ,
111
78
} ,
112
79
immutables : ImmutablesLocations {
113
- average_size_uncompressed : immutable_average_size ,
114
- locations : immutables_locations ,
80
+ average_size_uncompressed : immutables_upload . average_size ,
81
+ locations : immutables_upload . locations ,
115
82
} ,
116
83
ancillary : AncillaryLocations {
117
- size_uncompressed : ancillary_size ,
118
- locations : ancillary_locations ,
84
+ size_uncompressed : ancillary_upload . size ,
85
+ locations : ancillary_upload . locations ,
119
86
} ,
120
87
} ;
121
88
@@ -151,9 +118,9 @@ mod tests {
151
118
DigestSnapshotter , MockAncillaryFileUploader , MockImmutableFilesUploader ,
152
119
} ,
153
120
immutable_file_digest_mapper:: MockImmutableFileDigestMapper ,
154
- services:: { DumbSnapshotter , FakeSnapshotter } ,
121
+ services:: CompressedArchiveSnapshotter ,
155
122
test_tools:: TestLogger ,
156
- tools:: url_sanitizer:: SanitizedUrlWithTrailingSlash ,
123
+ tools:: { file_archiver :: FileArchiver , url_sanitizer:: SanitizedUrlWithTrailingSlash } ,
157
124
} ;
158
125
159
126
use super :: * ;
@@ -162,29 +129,6 @@ mod tests {
162
129
TempDir :: create ( "cardano_database" , dir_name)
163
130
}
164
131
165
- #[ test]
166
- fn should_compute_the_size_of_the_uncompressed_database_only_immutable_ledger_and_volatile ( ) {
167
- let test_dir = get_test_directory ( "should_compute_the_size_of_the_uncompressed_database_only_immutable_ledger_and_volatile" ) ;
168
-
169
- let immutable_trio_file_size = 777 ;
170
- let ledger_file_size = 6666 ;
171
- let volatile_file_size = 99 ;
172
- DummyCardanoDbBuilder :: new ( test_dir. as_os_str ( ) . to_str ( ) . unwrap ( ) )
173
- . with_immutables ( & [ 1 , 2 ] )
174
- . set_immutable_trio_file_size ( immutable_trio_file_size)
175
- . with_ledger_files ( & [ "blocks-0.dat" , "blocks-1.dat" , "blocks-2.dat" ] )
176
- . set_ledger_file_size ( ledger_file_size)
177
- . with_volatile_files ( & [ "437" , "537" , "637" , "737" ] )
178
- . set_volatile_file_size ( volatile_file_size)
179
- . build ( ) ;
180
- let expected_total_size =
181
- ( 2 * immutable_trio_file_size) + ( 3 * ledger_file_size) + ( 4 * volatile_file_size) ;
182
-
183
- let total_size = compute_uncompressed_database_size ( & test_dir) . unwrap ( ) ;
184
-
185
- assert_eq ! ( expected_total_size, total_size) ;
186
- }
187
-
188
132
#[ tokio:: test]
189
133
async fn should_compute_valid_artifact ( ) {
190
134
let test_dir = get_test_directory ( "should_compute_valid_artifact" ) ;
@@ -198,18 +142,25 @@ mod tests {
198
142
. with_immutables ( & [ 1 , 2 , 3 ] )
199
143
. append_immutable_trio ( )
200
144
. set_immutable_trio_file_size ( immutable_trio_file_size)
201
- . with_ledger_files ( & [ "blocks-0.dat " ] )
145
+ . with_ledger_files ( & [ "437 " ] )
202
146
. set_ledger_file_size ( ledger_file_size)
203
- . with_volatile_files ( & [ "437 " ] )
147
+ . with_volatile_files ( & [ "blocks-0.dat " ] )
204
148
. set_volatile_file_size ( volatile_file_size)
205
149
. build ( ) ;
206
150
let expected_average_immutable_size = immutable_trio_file_size;
207
- let expected_ancillary_size =
208
- immutable_trio_file_size + ledger_file_size + volatile_file_size;
209
- let expected_total_size =
210
- 4 * immutable_trio_file_size + ledger_file_size + volatile_file_size;
151
+ let expected_ancillary_size = immutable_trio_file_size + ledger_file_size;
152
+ let expected_total_size = 4 * immutable_trio_file_size + ledger_file_size;
211
153
212
- let snapshotter = Arc :: new ( FakeSnapshotter :: new ( test_dir. join ( "fake_snapshots" ) ) ) ;
154
+ let snapshotter = Arc :: new (
155
+ CompressedArchiveSnapshotter :: new (
156
+ cardano_db. get_dir ( ) . to_path_buf ( ) ,
157
+ test_dir. join ( "ongoing_snapshots" ) ,
158
+ CompressionAlgorithm :: Gzip ,
159
+ Arc :: new ( FileArchiver :: new_for_test ( test_dir. join ( "verification" ) ) ) ,
160
+ TestLogger :: stdout ( ) ,
161
+ )
162
+ . unwrap ( ) ,
163
+ ) ;
213
164
214
165
let ancillary_artifact_builder = {
215
166
let mut ancillary_uploader = MockAncillaryFileUploader :: new ( ) ;
@@ -224,7 +175,6 @@ mod tests {
224
175
vec ! [ Arc :: new( ancillary_uploader) ] ,
225
176
snapshotter. clone ( ) ,
226
177
network,
227
- CompressionAlgorithm :: Gzip ,
228
178
TestLogger :: stdout ( ) ,
229
179
)
230
180
. unwrap ( )
@@ -253,10 +203,9 @@ mod tests {
253
203
} ) ;
254
204
255
205
ImmutableArtifactBuilder :: new (
256
- test_dir . join ( "immutable" ) ,
206
+ cardano_db . get_immutable_dir ( ) . to_path_buf ( ) ,
257
207
vec ! [ Arc :: new( immutable_uploader) ] ,
258
208
snapshotter,
259
- CompressionAlgorithm :: Gzip ,
260
209
TestLogger :: stdout ( ) ,
261
210
)
262
211
. unwrap ( )
@@ -273,7 +222,10 @@ mod tests {
273
222
SanitizedUrlWithTrailingSlash :: parse ( "http://aggregator_uri" ) . unwrap ( ) ,
274
223
vec ! [ ] ,
275
224
DigestSnapshotter {
276
- snapshotter : Arc :: new ( DumbSnapshotter :: new ( ) ) ,
225
+ file_archiver : Arc :: new ( FileArchiver :: new_for_test (
226
+ test_dir. join ( "verification" ) ,
227
+ ) ) ,
228
+ target_location : test_dir. clone ( ) ,
277
229
compression_algorithm : CompressionAlgorithm :: Gzip ,
278
230
} ,
279
231
network,
@@ -286,7 +238,6 @@ mod tests {
286
238
287
239
let cardano_database_artifact_builder = CardanoDatabaseArtifactBuilder :: new (
288
240
network,
289
- cardano_db. get_dir ( ) . to_owned ( ) ,
290
241
& Version :: parse ( "1.0.0" ) . unwrap ( ) ,
291
242
Arc :: new ( ancillary_artifact_builder) ,
292
243
Arc :: new ( immutable_artifact_builder) ,
0 commit comments