From 9fc270363866d24e8d58af4c280c2dced31675b1 Mon Sep 17 00:00:00 2001 From: Phil Krylov Date: Thu, 17 Jun 2021 12:38:16 +0300 Subject: [PATCH] Always call post-snapshot-cmd to clean up faster on snapshot failure --- zfs_autobackup/ZfsNode.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/zfs_autobackup/ZfsNode.py b/zfs_autobackup/ZfsNode.py index 51210ad..31ca4d7 100644 --- a/zfs_autobackup/ZfsNode.py +++ b/zfs_autobackup/ZfsNode.py @@ -192,22 +192,24 @@ class ZfsNode(ExecuteNode): self.verbose("No changes anywhere: not creating snapshots.") return - for cmd in pre_snapshot_cmd: - self.verbose("Running pre-snapshot-cmd") - self.run(cmd=shlex.split(cmd), readonly=False) + try: + for cmd in pre_snapshot_cmd: + self.verbose("Running pre-snapshot-cmd") + self.run(cmd=shlex.split(cmd), readonly=False) - # create consistent snapshot per pool - for (pool_name, snapshots) in pools.items(): - cmd = ["zfs", "snapshot"] + # create consistent snapshot per pool + for (pool_name, snapshots) in pools.items(): + cmd = ["zfs", "snapshot"] - cmd.extend(map(lambda snapshot_: str(snapshot_), snapshots)) + cmd.extend(map(lambda snapshot_: str(snapshot_), snapshots)) - self.verbose("Creating snapshots {} in pool {}".format(snapshot_name, pool_name)) - self.run(cmd, readonly=False) + self.verbose("Creating snapshots {} in pool {}".format(snapshot_name, pool_name)) + self.run(cmd, readonly=False) - for cmd in post_snapshot_cmd: - self.verbose("Running post-snapshot-cmd") - self.run(cmd=shlex.split(cmd), readonly=False) + finally: + for cmd in post_snapshot_cmd: + self.verbose("Running post-snapshot-cmd") + self.run(cmd=shlex.split(cmd), readonly=False, valid_exitcodes=[]) def selected_datasets(self, exclude_received, exclude_paths): """determine filesystems that should be backupped by looking at the special autobackup-property, systemwide