From cd7676f3e6c96dae29415aa9e6e8ef13dc773e22 Mon Sep 17 00:00:00 2001 From: Fiona Ebner Date: Tue, 9 Jan 2024 15:10:00 +0100 Subject: [PATCH] backup: avoid bubbling up first ECANCELED error With pvebackup_propagate_error(), the first error wins. When one job in the transaction fails, it is expected that later jobs get the ECANCELED error. Those are not interesting and by skipping them a more interesting error, which is likely the actual root cause, can win. Signed-off-by: Fiona Ebner --- ...E-Backup-Proxmox-backup-patches-for-QEMU.patch | 15 ++++++++++----- ...VE-Migrate-dirty-bitmap-state-via-savevm.patch | 4 ++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/debian/patches/pve/0030-PVE-Backup-Proxmox-backup-patches-for-QEMU.patch b/debian/patches/pve/0030-PVE-Backup-Proxmox-backup-patches-for-QEMU.patch index 55b5bcd..054e31c 100644 --- a/debian/patches/pve/0030-PVE-Backup-Proxmox-backup-patches-for-QEMU.patch +++ b/debian/patches/pve/0030-PVE-Backup-Proxmox-backup-patches-for-QEMU.patch @@ -94,11 +94,11 @@ Signed-off-by: Fiona Ebner monitor/hmp-cmds.c | 72 +++ proxmox-backup-client.c | 146 +++++ proxmox-backup-client.h | 60 ++ - pve-backup.c | 1067 ++++++++++++++++++++++++++++++++ + pve-backup.c | 1072 ++++++++++++++++++++++++++++++++ qapi/block-core.json | 229 +++++++ qapi/common.json | 14 + qapi/machine.json | 16 +- - 14 files changed, 1682 insertions(+), 14 deletions(-) + 14 files changed, 1687 insertions(+), 14 deletions(-) create mode 100644 proxmox-backup-client.c create mode 100644 proxmox-backup-client.h create mode 100644 pve-backup.c @@ -586,10 +586,10 @@ index 0000000000..8cbf645b2c +#endif /* PROXMOX_BACKUP_CLIENT_H */ diff --git a/pve-backup.c b/pve-backup.c new file mode 100644 -index 0000000000..d84d807654 +index 0000000000..5ed3c6a310 --- /dev/null +++ b/pve-backup.c -@@ -0,0 +1,1067 @@ +@@ -0,0 +1,1072 @@ +#include "proxmox-backup-client.h" +#include "vma.h" + @@ -899,7 +899,12 @@ index 0000000000..d84d807654 + + qemu_co_mutex_lock(&backup_state.backup_mutex); + -+ if (ret < 0) { ++ /* ++ * All jobs in the transaction will be canceled when one receives an error. ++ * The first error wins, so only set it for ECANCELED if it was the last ++ * job. This allows more interesting errors from other jobs to win. ++ */ ++ if (ret < 0 && (ret != -ECANCELED || !g_list_nth(backup_state.di_list, 1))) { + Error *local_err = NULL; + error_setg(&local_err, "job failed with err %d - %s", ret, strerror(-ret)); + pvebackup_propagate_error(local_err); diff --git a/debian/patches/pve/0034-PVE-Migrate-dirty-bitmap-state-via-savevm.patch b/debian/patches/pve/0034-PVE-Migrate-dirty-bitmap-state-via-savevm.patch index 09c42e5..dffe12c 100644 --- a/debian/patches/pve/0034-PVE-Migrate-dirty-bitmap-state-via-savevm.patch +++ b/debian/patches/pve/0034-PVE-Migrate-dirty-bitmap-state-via-savevm.patch @@ -174,10 +174,10 @@ index 0000000000..887e998b9e + NULL); +} diff --git a/pve-backup.c b/pve-backup.c -index d84d807654..9c8b88d075 100644 +index 5ed3c6a310..6720e985bc 100644 --- a/pve-backup.c +++ b/pve-backup.c -@@ -1060,6 +1060,7 @@ ProxmoxSupportStatus *qmp_query_proxmox_support(Error **errp) +@@ -1065,6 +1065,7 @@ ProxmoxSupportStatus *qmp_query_proxmox_support(Error **errp) ret->pbs_library_version = g_strdup(proxmox_backup_qemu_version()); ret->pbs_dirty_bitmap = true; ret->pbs_dirty_bitmap_savevm = true;