Skip to content

Commit 3d4b0e6

Browse files
committed
Release lock after spawning all backups
1 parent 7d2120d commit 3d4b0e6

File tree

1 file changed

+43
-67
lines changed

1 file changed

+43
-67
lines changed

crates/common/src/backup/manager.rs

Lines changed: 43 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -106,75 +106,51 @@ impl BackupManager {
106106
.join(format!("backup_{}_{}", l2_height, timestamp));
107107
info!("Creating backup at path {}", backup_path.display());
108108

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+
}
170147

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);
173151

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()?;
178154
}
179155

180156
if let Err(e) = Self::validate_backup(&backup_path) {

0 commit comments

Comments
 (0)