@@ -106,75 +106,51 @@ impl BackupManager {
106
106
. join ( format ! ( "backup_{}_{}" , l2_height, timestamp) ) ;
107
107
info ! ( "Creating backup at path {}" , backup_path. display( ) ) ;
108
108
109
- let total_dbs = 3 + self . mmr_db . is_some ( ) as u32 ;
110
- let mut completed_dbs = 0 ;
111
-
112
- // Backup ledger db
113
- info ! (
114
- "Backing up ledger database ({}/{})" ,
115
- completed_dbs + 1 ,
116
- total_dbs
117
- ) ;
118
- let ledger_start = Instant :: now ( ) ;
119
- self . ledger_db
120
- . db_ref ( )
121
- . create_backup ( backup_path. join ( "ledger" ) ) ?;
122
- info ! (
123
- "Ledger database backup completed in {:.2}s" ,
124
- ledger_start. elapsed( ) . as_secs_f32( )
125
- ) ;
126
- completed_dbs += 1 ;
127
-
128
- // Backup state db
129
- info ! (
130
- "Backing up state database ({}/{})" ,
131
- completed_dbs + 1 ,
132
- total_dbs
133
- ) ;
134
- let state_start = Instant :: now ( ) ;
135
- self . state_db
136
- . write ( )
137
- . unwrap ( )
138
- . db_ref ( )
139
- . create_backup ( backup_path. join ( "state" ) ) ?;
140
- info ! (
141
- "State database backup completed in {:.2}s" ,
142
- state_start. elapsed( ) . as_secs_f32( )
143
- ) ;
144
- completed_dbs += 1 ;
145
-
146
- // Backup native db
147
- info ! (
148
- "Backing up native-db database ({}/{})" ,
149
- completed_dbs + 1 ,
150
- total_dbs
151
- ) ;
152
- let native_start = Instant :: now ( ) ;
153
- self . native_db
154
- . write ( )
155
- . unwrap ( )
156
- . db_ref ( )
157
- . create_backup ( backup_path. join ( "native-db" ) ) ?;
158
- info ! (
159
- "Native database backup completed in {:.2}s" ,
160
- native_start. elapsed( ) . as_secs_f32( )
161
- ) ;
162
- completed_dbs += 1 ;
163
-
164
- if let Some ( mmr_db) = & self . mmr_db {
165
- info ! (
166
- "Backing up MMR database ({}/{})" ,
167
- completed_dbs + 1 ,
168
- total_dbs
169
- ) ;
109
+ let mut handles = Vec :: new ( ) ;
110
+
111
+ let ledger_db = self . ledger_db . clone ( ) ;
112
+ let ledger_path = backup_path. join ( "ledger" ) ;
113
+ handles. push ( tokio:: spawn ( async move {
114
+ ledger_db. db_ref ( ) . create_backup ( & ledger_path) ?;
115
+ Ok :: < ( ) , anyhow:: Error > ( ( ) )
116
+ } ) ) ;
117
+
118
+ let state_db = self . state_db . clone ( ) ;
119
+ let state_path = backup_path. join ( "state" ) ;
120
+ handles. push ( tokio:: spawn ( async move {
121
+ state_db
122
+ . read ( )
123
+ . unwrap ( )
124
+ . db_ref ( )
125
+ . create_backup ( & state_path) ?;
126
+ Ok :: < ( ) , anyhow:: Error > ( ( ) )
127
+ } ) ) ;
128
+
129
+ let native_db = self . native_db . clone ( ) ;
130
+ let native_path = backup_path. join ( "native-db" ) ;
131
+ handles. push ( tokio:: spawn ( async move {
132
+ native_db
133
+ . read ( )
134
+ . unwrap ( )
135
+ . db_ref ( )
136
+ . create_backup ( & native_path) ?;
137
+ Ok :: < ( ) , anyhow:: Error > ( ( ) )
138
+ } ) ) ;
139
+
140
+ if let Some ( mmr_db) = self . mmr_db . clone ( ) {
141
+ let mmr_path = backup_path. join ( "mmr" ) ;
142
+ handles. push ( tokio:: spawn ( async move {
143
+ mmr_db. db_ref ( ) . create_backup ( & mmr_path) ?;
144
+ Ok :: < ( ) , anyhow:: Error > ( ( ) )
145
+ } ) ) ;
146
+ }
170
147
171
- let mmr_start = Instant :: now ( ) ;
172
- mmr_db. db_ref ( ) . create_backup ( backup_path. join ( "mmr" ) ) ?;
148
+ // Wait for all dbs to starting backing up under lock before releasing
149
+ drop ( _l1_lock) ;
150
+ drop ( _l2_lock) ;
173
151
174
- info ! (
175
- "MMR database backup completed in {:.2}s" ,
176
- mmr_start. elapsed( ) . as_secs_f32( )
177
- ) ;
152
+ for handle in handles {
153
+ handle. await . unwrap ( ) ?;
178
154
}
179
155
180
156
if let Err ( e) = Self :: validate_backup ( & backup_path) {
0 commit comments