1
- use crate :: Chunk ;
2
1
use crate :: db_functions:: save_chunk_internal_batch; // Ensure this is the batch save function
3
2
use crate :: errors:: WorldError ;
4
3
use crate :: vanilla_chunk_format:: VanillaChunk ;
4
+ use crate :: Chunk ;
5
5
use crate :: World ;
6
6
use ferrumc_anvil:: load_anvil_file;
7
7
use ferrumc_general_purpose:: paths:: BetterPathExt ;
@@ -28,17 +28,23 @@ impl World {
28
28
progress : Arc < ProgressBar > ,
29
29
processed_since_flush : Arc < AtomicU64 > ,
30
30
) -> Result < ( ) , WorldError > {
31
- let chunk_objects: Vec < Chunk > = chunks. into_iter ( ) . filter_map ( |chunk| chunk. to_custom_format ( ) . ok ( ) ) . collect ( ) ;
31
+ let chunk_objects: Vec < Chunk > = chunks
32
+ . into_iter ( )
33
+ . filter_map ( |chunk| chunk. to_custom_format ( ) . ok ( ) )
34
+ . collect ( ) ;
32
35
33
36
let mut success_count = 0 ;
34
- if let Ok ( ( ) ) = save_chunk_internal_batch ( self , chunk_objects. clone ( ) /*temp clone*/ ) . await {
37
+ if let Ok ( ( ) ) = save_chunk_internal_batch ( self , chunk_objects. clone ( ) /*temp clone*/ ) . await
38
+ {
35
39
success_count = chunk_objects. len ( ) ; // Increment by the number of chunks successfully saved
36
40
}
37
41
38
42
progress. inc ( success_count. try_into ( ) . unwrap ( ) ) ; // Convert success_count to u64
39
43
40
44
// Flush logic remains the same
41
- let total_processed = processed_since_flush. fetch_add ( success_count as u64 , Ordering :: Relaxed ) + success_count as u64 ;
45
+ let total_processed = processed_since_flush
46
+ . fetch_add ( success_count as u64 , Ordering :: Relaxed )
47
+ + success_count as u64 ;
42
48
if total_processed >= FLUSH_INTERVAL {
43
49
self . storage_backend . flush ( ) . await ?;
44
50
processed_since_flush. store ( 0 , Ordering :: Relaxed ) ;
@@ -48,7 +54,6 @@ impl World {
48
54
Ok ( ( ) )
49
55
}
50
56
51
-
52
57
fn get_chunk_count ( & self , import_dir : & PathBuf ) -> Result < u64 , WorldError > {
53
58
info ! ( "Counting chunks in import directory..." ) ;
54
59
let regions_dir = import_dir. join ( "region" ) . read_dir ( ) ?;
@@ -63,10 +68,8 @@ impl World {
63
68
}
64
69
65
70
if let Ok ( anvil_file) = load_anvil_file ( entry. path ( ) ) {
66
- chunk_count. fetch_add (
67
- anvil_file. get_locations ( ) . len ( ) as u64 ,
68
- Ordering :: Relaxed ,
69
- ) ;
71
+ chunk_count
72
+ . fetch_add ( anvil_file. get_locations ( ) . len ( ) as u64 , Ordering :: Relaxed ) ;
70
73
}
71
74
Ok ( ( ) )
72
75
} ) ?;
@@ -114,7 +117,11 @@ impl World {
114
117
let anvil_file = match load_anvil_file ( region_entry. path ( ) ) {
115
118
Ok ( file) => file,
116
119
Err ( e) => {
117
- error ! ( "Failed to load region file {}: {}" , region_entry. path( ) . display( ) , e) ;
120
+ error ! (
121
+ "Failed to load region file {}: {}" ,
122
+ region_entry. path( ) . display( ) ,
123
+ e
124
+ ) ;
118
125
continue ;
119
126
}
120
127
} ;
@@ -125,15 +132,25 @@ impl World {
125
132
current_batch. push ( vanilla_chunk) ;
126
133
127
134
if current_batch. len ( ) >= BATCH_SIZE {
128
- let batch = std:: mem:: replace ( & mut current_batch, Vec :: with_capacity ( BATCH_SIZE ) ) ;
135
+ let batch = std:: mem:: replace (
136
+ & mut current_batch,
137
+ Vec :: with_capacity ( BATCH_SIZE ) ,
138
+ ) ;
129
139
let progress_clone = Arc :: clone ( & progress) ;
130
140
let self_clone = self . clone ( ) ;
131
141
let permit = Arc :: clone ( & semaphore) . acquire_owned ( ) . await ?;
132
142
let processed_since_flush_clone = Arc :: clone ( & processed_since_flush) ;
133
143
134
144
task_set. spawn ( async move {
135
145
let _permit = permit; // Keep permit alive for the duration of the task
136
- if let Err ( e) = self_clone. process_chunk_batch ( batch, progress_clone, processed_since_flush_clone) . await {
146
+ if let Err ( e) = self_clone
147
+ . process_chunk_batch (
148
+ batch,
149
+ progress_clone,
150
+ processed_since_flush_clone,
151
+ )
152
+ . await
153
+ {
137
154
error ! ( "Batch processing error: {}" , e) ;
138
155
}
139
156
} ) ;
@@ -152,7 +169,10 @@ impl World {
152
169
153
170
task_set. spawn ( async move {
154
171
let _permit = permit;
155
- if let Err ( e) = self_clone. process_chunk_batch ( current_batch, progress_clone, processed_since_flush_clone) . await {
172
+ if let Err ( e) = self_clone
173
+ . process_chunk_batch ( current_batch, progress_clone, processed_since_flush_clone)
174
+ . await
175
+ {
156
176
error ! ( "Final batch processing error: {}" , e) ;
157
177
}
158
178
} ) ;
0 commit comments