Ensure snapshots are removed if none succeed

Avoids having lingering automirror snapshots that will never be cleaned
up.
This commit is contained in:
Joshua Boniface 2024-11-15 12:00:31 -05:00
parent ba4349d289
commit 109000c17c
1 changed files with 11 additions and 0 deletions

View File

@ -389,6 +389,7 @@ def worker_cluster_automirror(
continue continue
remote_marked_for_deletion = dict() remote_marked_for_deletion = dict()
all_results = list()
for destination in vm_destinations: for destination in vm_destinations:
mirror_start = datetime.now() mirror_start = datetime.now()
result, ret = run_vm_mirror( result, ret = run_vm_mirror(
@ -401,6 +402,7 @@ def worker_cluster_automirror(
) )
mirror_end = datetime.now() mirror_end = datetime.now()
runtime_secs = (mirror_end - mirror_start).seconds runtime_secs = (mirror_end - mirror_start).seconds
all_results.append(result)
if result: if result:
remote_marked_for_deletion[destination] = ret remote_marked_for_deletion[destination] = ret
@ -421,6 +423,15 @@ def worker_cluster_automirror(
"result_message": ret, "result_message": ret,
} }
# If all sends failed, remove the snapshot we created as it will never be needed or automatically cleaned up later
if all(not b for b in all_results):
vm.vm_worker_remove_snapshot(
zkhandler,
None,
vm_detail["name"],
snapshot_name,
)
# Find all local snapshots that were present in all remote snapshot deletions, # Find all local snapshots that were present in all remote snapshot deletions,
# then remove them # then remove them
# If one of the sends fails, this should result in nothing being removed # If one of the sends fails, this should result in nothing being removed