From 12283e49c2d31a06bbdb84a5b78a8c8fdb18f5be Mon Sep 17 00:00:00 2001 From: hygienic-books Date: Tue, 7 Mar 2023 01:08:55 +0100 Subject: [PATCH] refactor(script): On ZFS operations catch and use return code (#1) --- pacman-zfs-snapshot.sh | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/pacman-zfs-snapshot.sh b/pacman-zfs-snapshot.sh index 1ccc903..5f38514 100755 --- a/pacman-zfs-snapshot.sh +++ b/pacman-zfs-snapshot.sh @@ -205,18 +205,20 @@ function trim_pkg_list_oneline () { } function do_snaps () { - local snap_name + local snap_name snap_return_code for snappable_dataset in "${snappable_datasets[@]}"; do snap_name="${snappable_dataset}"'@'"${snap_name_prefix}${snap_field_separator}${date_string}${snap_field_separator}"'op:'"${conf_op_suffix}${snap_field_separator}"'sev:'"${severity}${snap_field_separator}"'pkgs:'"${trimmed_pkg_list_oneline}" if [[ "${do_dry_run}" == 'true' ]]; then pprint 'info' 'Dry-run, pretending to run zfs snapshot '"${snap_name}" else - zfs snapshot "${snap_name}" && { + zfs snapshot "${snap_name}" + snap_return_code="${?}" + if [[ "${snap_return_code}" -eq '0' ]]; then successfully_snapped_datasets+=("${snappable_dataset}") pprint 'info' 'Snapshot done: '"${snap_name}" - } || { + else pprint 'warn' 'Snapshot failed: '"${snap_name}" - } + fi fi done } @@ -231,7 +233,7 @@ function get_snaps_in_cur_sev () { } function do_retention () { - local snap_list snaps_done_by_us snaps_in_cur_sev snaps_limit oldest_snap + local snap_list snaps_done_by_us snaps_in_cur_sev snaps_limit oldest_snap snap_return_code if [[ "${do_dry_run}" == 'true' ]]; then pprint 'info' 'Dry-run, skipping potential zfs destroy operations ...' else @@ -245,6 +247,12 @@ function do_retention () { while [[ "$(get_snaps_in_cur_sev "${successfully_snapped_dataset}" | wc -l)" -gt "${snaps_limit}" ]]; do oldest_snap="$(get_snaps_in_cur_sev "${successfully_snapped_dataset}" | head -n1)" zfs destroy "${oldest_snap}" + snap_return_code="${?}" + if [[ "${snap_return_code}" -eq '0' ]]; then + pprint 'info' 'Oldest in chain '"'"'sev:'"${severity}"''"'"' destroyed: '"${oldest_snap}" + else + pprint 'warn' 'Snapshot destruction failed: '"${oldest_snap}" + fi done done fi