Skip to content

Commit f57a83b

Browse files
committed
Update lock logic dstack-backup.py
1 parent 30bbfa0 commit f57a83b

File tree

1 file changed

+35
-24
lines changed

1 file changed

+35
-24
lines changed

scripts/dstack-backup.py

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -201,18 +201,6 @@ def perform_backup(self, vm_id: str, vm_name: str, backup_type: str, hd: str) ->
201201
# Create or update latest symlink
202202
latest_dir = backup_dir / "latest"
203203

204-
if backup_level == "full":
205-
# Create timestamped directory for this backup
206-
timestamp = datetime.now().strftime("%Y%m%dT%H%M%S")
207-
backup_timestamp_dir = backup_dir / f"{timestamp}"
208-
logger.info(f"Creating backup directory: {backup_timestamp_dir}")
209-
backup_timestamp_dir.mkdir(parents=True, exist_ok=True)
210-
try:
211-
latest_dir.unlink()
212-
except FileNotFoundError:
213-
pass
214-
latest_dir.symlink_to(timestamp)
215-
216204
def do_backup():
217205
# For full backups, clear bitmaps first
218206
if backup_level == "full":
@@ -250,7 +238,6 @@ def do_backup():
250238
f"Running: qmpbackup --socket {abs_qmp_socket} backup -i {hd} --no-subdir -t {abs_latest_dir} -l {backup_level}")
251239
if qmp_socket.exists():
252240
try:
253-
backup_lock.touch(exist_ok=False)
254241
# Use Popen for real-time output
255242
process = subprocess.Popen(
256243
[
@@ -285,24 +272,48 @@ def do_backup():
285272
except Exception as e:
286273
logger.error(f"Error performing backup: {e}")
287274
return False
288-
finally:
289-
backup_lock.unlink()
290275
else:
291276
logger.error(f"QMP socket not found at {qmp_socket}")
292277
return False
278+
279+
if backup_level == "full":
280+
# Create timestamped directory for this backup
281+
timestamp = datetime.now().strftime("%Y%m%dT%H%M%S")
282+
backup_timestamp_dir = backup_dir / f"{timestamp}"
283+
logger.info(f"Creating backup directory: {backup_timestamp_dir}")
284+
backup_timestamp_dir.mkdir(parents=True, exist_ok=True)
285+
try:
286+
latest_dir.unlink()
287+
except FileNotFoundError:
288+
pass
289+
latest_dir.symlink_to(timestamp)
290+
293291
try:
294-
suc = do_backup()
292+
backup_lock.touch(exist_ok=False)
293+
locked = True
295294
except Exception as e:
296-
logger.error(f"Error performing backup: {e}")
297-
suc = False
298-
if not suc and backup_type == "full":
299-
# Remove the latest backup dir suc = self.perform_backup(vm_id, vm_name, "incremental", hd)
300-
logger.info(
301-
f"Removing {os.path.basename(backup_timestamp_dir)}")
295+
logger.error(f"Error creating backup lock: {e}")
296+
locked = False
297+
if locked:
302298
try:
303-
shutil.rmtree(backup_timestamp_dir)
299+
suc = do_backup()
304300
except Exception as e:
305-
logger.error(f"Error removing old backup: {e}")
301+
logger.error(f"Error performing backup: {e}")
302+
suc = False
303+
finally:
304+
backup_lock.unlink()
305+
else:
306+
suc = False
307+
if backup_type == "full":
308+
if not suc:
309+
logger.info(
310+
f"Removing {os.path.basename(backup_timestamp_dir)}")
311+
try:
312+
shutil.rmtree(backup_timestamp_dir)
313+
except Exception as e:
314+
logger.error(f"Error removing old backup: {e}")
315+
else:
316+
pass
306317

307318
return suc
308319

0 commit comments

Comments
 (0)