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;
@@ -14,13 +14,11 @@ use mithril_common::{
14
14
} ;
15
15
16
16
use crate :: artifact_builder:: { AncillaryArtifactBuilder , ArtifactBuilder } ;
17
- use crate :: tools:: file_size;
18
17
19
18
use super :: { DigestArtifactBuilder , ImmutableArtifactBuilder } ;
20
19
21
20
pub struct CardanoDatabaseArtifactBuilder {
22
21
network : CardanoNetwork ,
23
- db_directory : PathBuf ,
24
22
cardano_node_version : Version ,
25
23
ancillary_builder : Arc < AncillaryArtifactBuilder > ,
26
24
immutable_builder : Arc < ImmutableArtifactBuilder > ,
@@ -30,15 +28,13 @@ pub struct CardanoDatabaseArtifactBuilder {
30
28
impl CardanoDatabaseArtifactBuilder {
31
29
pub fn new (
32
30
network : CardanoNetwork ,
33
- db_directory : PathBuf ,
34
31
cardano_node_version : & Version ,
35
32
ancillary_builder : Arc < AncillaryArtifactBuilder > ,
36
33
immutable_builder : Arc < ImmutableArtifactBuilder > ,
37
34
digest_builder : Arc < DigestArtifactBuilder > ,
38
35
) -> Self {
39
36
Self {
40
37
network,
41
- db_directory,
42
38
cardano_node_version : cardano_node_version. clone ( ) ,
43
39
ancillary_builder,
44
40
immutable_builder,
@@ -66,55 +62,27 @@ impl ArtifactBuilder<CardanoDbBeacon, CardanoDatabaseSnapshot> for CardanoDataba
66
62
SignedEntityType :: CardanoDatabase ( beacon. clone( ) )
67
63
)
68
64
} ) ?;
69
- let total_db_size_uncompressed = {
70
- let db_directory = self . db_directory . clone ( ) ;
71
- tokio:: task:: spawn_blocking ( move || -> StdResult < u64 > {
72
- file_size:: compute_size_of_path ( & db_directory)
73
- } )
74
- . await ??
75
- } ;
76
-
77
- let ancillary_locations = self . ancillary_builder . upload ( & beacon) . await ?;
78
- let ancillary_builder = self . ancillary_builder . clone ( ) ;
79
- let ancillary_size = {
80
- let db_directory = self . db_directory . clone ( ) ;
81
- let beacon = beacon. clone ( ) ;
82
- tokio:: task:: spawn_blocking ( move || -> StdResult < u64 > {
83
- ancillary_builder. compute_uncompressed_size ( & db_directory, & beacon)
84
- } )
85
- . await ??
86
- } ;
87
65
88
- let immutables_locations = self
66
+ let ancillary_upload = self . ancillary_builder . upload ( & beacon) . await ?;
67
+ let immutables_upload = self
89
68
. immutable_builder
90
69
. upload ( beacon. immutable_file_number )
91
70
. await ?;
92
- let immutable_average_size = {
93
- let db_directory = self . db_directory . clone ( ) ;
94
- let immutable_file_number = beacon. immutable_file_number ;
95
- let immutable_builder = self . immutable_builder . clone ( ) ;
96
- tokio:: task:: spawn_blocking ( move || -> StdResult < u64 > {
97
- immutable_builder
98
- . compute_average_uncompressed_size ( & db_directory, immutable_file_number)
99
- } )
100
- . await ??
101
- } ;
102
-
103
71
let digest_upload = self . digest_builder . upload ( & beacon) . await ?;
104
72
105
73
let content = CardanoDatabaseSnapshotArtifactData {
106
- total_db_size_uncompressed,
74
+ total_db_size_uncompressed : ancillary_upload . size + immutables_upload . total_size ,
107
75
digests : DigestsLocations {
108
76
size_uncompressed : digest_upload. size ,
109
77
locations : digest_upload. locations ,
110
78
} ,
111
79
immutables : ImmutablesLocations {
112
- average_size_uncompressed : immutable_average_size ,
113
- locations : immutables_locations ,
80
+ average_size_uncompressed : immutables_upload . average_size ,
81
+ locations : immutables_upload . locations ,
114
82
} ,
115
83
ancillary : AncillaryLocations {
116
- size_uncompressed : ancillary_size ,
117
- locations : ancillary_locations ,
84
+ size_uncompressed : ancillary_upload . size ,
85
+ locations : ancillary_upload . locations ,
118
86
} ,
119
87
} ;
120
88
@@ -145,45 +113,22 @@ mod tests {
145
113
} ;
146
114
use mockall:: { predicate, Predicate } ;
147
115
148
- use super :: * ;
149
- use crate :: tools:: file_archiver:: FileArchiver ;
150
116
use crate :: {
151
117
artifact_builder:: {
152
118
DigestSnapshotter , MockAncillaryFileUploader , MockImmutableFilesUploader ,
153
119
} ,
154
120
immutable_file_digest_mapper:: MockImmutableFileDigestMapper ,
155
- services:: FakeSnapshotter ,
121
+ services:: CompressedArchiveSnapshotter ,
156
122
test_tools:: TestLogger ,
157
- tools:: url_sanitizer:: SanitizedUrlWithTrailingSlash ,
123
+ tools:: { file_archiver :: FileArchiver , url_sanitizer:: SanitizedUrlWithTrailingSlash } ,
158
124
} ;
159
125
126
+ use super :: * ;
127
+
160
128
fn get_test_directory ( dir_name : & str ) -> PathBuf {
161
129
TempDir :: create ( "cardano_database" , dir_name)
162
130
}
163
131
164
- #[ test]
165
- fn should_compute_the_size_of_the_uncompressed_database_only_immutable_ledger_and_volatile ( ) {
166
- let test_dir = get_test_directory ( "should_compute_the_size_of_the_uncompressed_database_only_immutable_ledger_and_volatile" ) ;
167
-
168
- let immutable_trio_file_size = 777 ;
169
- let ledger_file_size = 6666 ;
170
- let volatile_file_size = 99 ;
171
- DummyCardanoDbBuilder :: new ( test_dir. as_os_str ( ) . to_str ( ) . unwrap ( ) )
172
- . with_immutables ( & [ 1 , 2 ] )
173
- . set_immutable_trio_file_size ( immutable_trio_file_size)
174
- . with_ledger_files ( & [ "437" , "537" , "637" , "737" ] )
175
- . set_ledger_file_size ( ledger_file_size)
176
- . with_volatile_files ( & [ "blocks-0.dat" , "blocks-1.dat" , "blocks-2.dat" ] )
177
- . set_volatile_file_size ( volatile_file_size)
178
- . build ( ) ;
179
- let expected_total_size =
180
- ( 2 * immutable_trio_file_size) + ( 4 * ledger_file_size) + ( 3 * volatile_file_size) ;
181
-
182
- let total_size = file_size:: compute_size_of_path ( & test_dir) . unwrap ( ) ;
183
-
184
- assert_eq ! ( expected_total_size, total_size) ;
185
- }
186
-
187
132
#[ tokio:: test]
188
133
async fn should_compute_valid_artifact ( ) {
189
134
let test_dir = get_test_directory ( "should_compute_valid_artifact" ) ;
@@ -203,12 +148,19 @@ mod tests {
203
148
. set_volatile_file_size ( volatile_file_size)
204
149
. build ( ) ;
205
150
let expected_average_immutable_size = immutable_trio_file_size;
206
- let expected_ancillary_size =
207
- immutable_trio_file_size + ledger_file_size + volatile_file_size;
208
- let expected_total_size =
209
- 4 * immutable_trio_file_size + ledger_file_size + volatile_file_size;
210
-
211
- let snapshotter = Arc :: new ( FakeSnapshotter :: new ( test_dir. join ( "fake_snapshots" ) ) ) ;
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;
153
+
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
+ ) ;
212
164
213
165
let ancillary_artifact_builder = {
214
166
let mut ancillary_uploader = MockAncillaryFileUploader :: new ( ) ;
@@ -251,7 +203,7 @@ mod tests {
251
203
} ) ;
252
204
253
205
ImmutableArtifactBuilder :: new (
254
- test_dir . join ( "immutable" ) ,
206
+ cardano_db . get_immutable_dir ( ) . to_path_buf ( ) ,
255
207
vec ! [ Arc :: new( immutable_uploader) ] ,
256
208
snapshotter,
257
209
TestLogger :: stdout ( ) ,
@@ -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