mirror of
https://git.proxmox.com/git/pve-qemu
synced 2025-08-18 03:57:08 +00:00

This series of patches extends our existing QEMU backup integration for PVE such that it can be used for a in-development external-backup plugin API. This includes among other things an API for backup access and teardown as well as dirty-bitmap management. See the separate patches for more details and check [v7] and [v8] of this series on the list. The former is the last revision by Fiona which was already very advanced, Wolfgang picked that up and extended/adapted it slightly to match needs that he found during implementation of a test provider and from feedback of (future) external backup provider like Bareos and Veritas. This was mainly done to get the QEMU build out for broad QA, we can still change things here as long as the rest of the series is not yet applied. [v7]: https://lore.proxmox.com/pve-devel/20250401173435.221892-1-f.ebner@proxmox.com/ [v8]: https://lore.proxmox.com/pve-devel/20250403123118.264974-1-w.bumiller@proxmox.com/ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
64 lines
2.0 KiB
Diff
64 lines
2.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Fiona Ebner <f.ebner@proxmox.com>
|
|
Date: Thu, 3 Apr 2025 14:30:44 +0200
|
|
Subject: [PATCH] PVE backup: add target ID in backup state
|
|
|
|
In preparation for allowing multiple backup providers and potentially
|
|
multiple targets for a given provider. Each backup target can then
|
|
have its own dirty bitmap and there can be additional checks that the
|
|
current backup state is actually associated to the expected target.
|
|
|
|
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
|
|
Reviewed-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
|
|
---
|
|
pve-backup.c | 15 ++++++++++++++-
|
|
1 file changed, 14 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/pve-backup.c b/pve-backup.c
|
|
index 88a981f81c..8789a0667a 100644
|
|
--- a/pve-backup.c
|
|
+++ b/pve-backup.c
|
|
@@ -70,6 +70,7 @@ static struct PVEBackupState {
|
|
JobTxn *txn;
|
|
CoMutex backup_mutex;
|
|
CoMutex dump_callback_mutex;
|
|
+ char *target_id;
|
|
} backup_state;
|
|
|
|
static void pvebackup_init(void)
|
|
@@ -865,6 +866,16 @@ static void initialize_backup_state_stat(
|
|
backup_state.stat.starting = true;
|
|
}
|
|
|
|
+/*
|
|
+ * To be called with the backup_state mutex held.
|
|
+ */
|
|
+static void backup_state_set_target_id(const char *target_id) {
|
|
+ if (backup_state.target_id) {
|
|
+ g_free(backup_state.target_id);
|
|
+ }
|
|
+ backup_state.target_id = g_strdup(target_id);
|
|
+}
|
|
+
|
|
UuidInfo coroutine_fn *qmp_backup(
|
|
const char *backup_file,
|
|
const char *password,
|
|
@@ -904,7 +915,7 @@ UuidInfo coroutine_fn *qmp_backup(
|
|
|
|
if (backup_state.di_list) {
|
|
error_set(errp, ERROR_CLASS_GENERIC_ERROR,
|
|
- "previous backup not finished");
|
|
+ "previous backup for target '%s' not finished", backup_state.target_id);
|
|
qemu_co_mutex_unlock(&backup_state.backup_mutex);
|
|
return NULL;
|
|
}
|
|
@@ -1122,6 +1133,8 @@ UuidInfo coroutine_fn *qmp_backup(
|
|
backup_state.vmaw = vmaw;
|
|
backup_state.pbs = pbs;
|
|
|
|
+ backup_state_set_target_id("Proxmox");
|
|
+
|
|
backup_state.di_list = di_list;
|
|
|
|
uuid_info = g_malloc0(sizeof(*uuid_info));
|