From: Dietmar Maurer Date: Wed, 2 Jan 2013 08:27:14 +0000 (+0100) Subject: use BackupFormat enum X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=3055eeb42bd2b9fa5c516268138d6a80baf0ac66;p=pve-qemu-kvm.git use BackupFormat enum --- diff --git a/debian/patches/0001-RFC-Efficient-VM-backup-for-qemu.patch b/debian/patches/0001-RFC-Efficient-VM-backup-for-qemu.patch index 69439e6..e56c700 100644 --- a/debian/patches/0001-RFC-Efficient-VM-backup-for-qemu.patch +++ b/debian/patches/0001-RFC-Efficient-VM-backup-for-qemu.patch @@ -1,4 +1,4 @@ -From 95b9266b030a4962284a0b9eebf9849291809fee Mon Sep 17 00:00:00 2001 +From 793525f2a3b92fdc0ce27e48c3421171b87c367c Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Tue, 13 Nov 2012 09:24:50 +0100 Subject: [PATCH v3 1/6] RFC: Efficient VM backup for qemu @@ -24,6 +24,8 @@ Changes since v1: Changes since v2: * BackupDriver: remove cancel_cb +* use enum for BackupFormat +* vma: use bdrv_open instead of bdrv_file_open Signed-off-by: Dietmar Maurer --- diff --git a/debian/patches/0002-add-basic-backup-support-to-block-driver.patch b/debian/patches/0002-add-basic-backup-support-to-block-driver.patch index a08a834..f3a2bf9 100644 --- a/debian/patches/0002-add-basic-backup-support-to-block-driver.patch +++ b/debian/patches/0002-add-basic-backup-support-to-block-driver.patch @@ -1,4 +1,4 @@ -From 290368c30f966c3e74d6cd926c0d044f7ba2a3ea Mon Sep 17 00:00:00 2001 +From 11bf5a3156abfd98d13cc5f03cd5f57e6dac06f3 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Tue, 13 Nov 2012 10:03:52 +0100 Subject: [PATCH v3 2/6] add basic backup support to block driver diff --git a/debian/patches/0003-add-backup-related-monitor-commands.patch b/debian/patches/0003-add-backup-related-monitor-commands.patch index 84f053d..79f5e32 100644 --- a/debian/patches/0003-add-backup-related-monitor-commands.patch +++ b/debian/patches/0003-add-backup-related-monitor-commands.patch @@ -1,4 +1,4 @@ -From 262dc0d9c9f729dd5f74fc8772738207a4c1359d Mon Sep 17 00:00:00 2001 +From d97630338d62186229192d0724fae489fc500acc Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Tue, 13 Nov 2012 11:27:56 +0100 Subject: [PATCH v3 3/6] add backup related monitor commands @@ -13,14 +13,14 @@ could move the whole archive format related code out of qemu. Signed-off-by: Dietmar Maurer --- backup.h | 13 ++ - blockdev.c | 376 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + blockdev.c | 375 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ hmp-commands.hx | 31 +++++ hmp.c | 63 +++++++++ hmp.h | 3 + monitor.c | 7 + - qapi-schema.json | 81 ++++++++++++ + qapi-schema.json | 91 +++++++++++++ qmp-commands.hx | 27 ++++ - 8 files changed, 601 insertions(+), 0 deletions(-) + 8 files changed, 610 insertions(+), 0 deletions(-) diff --git a/backup.h b/backup.h index e1f0290..ae4aa8c 100644 @@ -45,7 +45,7 @@ index e1f0290..ae4aa8c 100644 + #endif /* QEMU_BACKUP_H */ diff --git a/blockdev.c b/blockdev.c -index e73fd6e..e89aa14 100644 +index e73fd6e..08ac7ad 100644 --- a/blockdev.c +++ b/blockdev.c @@ -20,6 +20,7 @@ @@ -56,7 +56,7 @@ index e73fd6e..e89aa14 100644 static QTAILQ_HEAD(drivelist, DriveInfo) drives = QTAILQ_HEAD_INITIALIZER(drives); -@@ -1321,6 +1322,381 @@ void qmp_drive_mirror(const char *device, const char *target, +@@ -1321,6 +1322,380 @@ void qmp_drive_mirror(const char *device, const char *target, drive_get_ref(drive_get_by_blockdev(bs)); } @@ -206,7 +206,7 @@ index e73fd6e..e89aa14 100644 + } +} + -+char *qmp_backup(const char *backupfile, bool has_format, const char *format, ++char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format, + bool has_config_filename, const char *config_filename, + bool has_devlist, const char *devlist, + bool has_speed, int64_t speed, Error **errp) @@ -219,14 +219,13 @@ index e73fd6e..e89aa14 100644 + GList *bcblist = NULL; + + /* Todo: try to auto-detect format based on file name */ -+ format = has_format ? format : "vma"; ++ format = has_format ? format : BACKUP_FORMAT_VMA; + + /* fixme: find driver for specifued format */ + const BackupDriver *driver = NULL; + + if (!driver) { -+ error_set(errp, ERROR_CLASS_GENERIC_ERROR, -+ "no backup driver for format '%s'", format); ++ error_set(errp, ERROR_CLASS_GENERIC_ERROR, "unknown backup format"); + return NULL; + } + @@ -488,7 +487,7 @@ index 010b8c9..57be357 100644 show current migration capabilities @item info migrate_cache_size diff --git a/hmp.c b/hmp.c -index 180ba2b..600792f 100644 +index 180ba2b..77076fa 100644 --- a/hmp.c +++ b/hmp.c @@ -130,6 +130,38 @@ void hmp_info_mice(Monitor *mon) @@ -555,8 +554,8 @@ index 180ba2b..600792f 100644 + + Error *errp = NULL; + -+ qmp_backup(backupfile, false, NULL, false, NULL, !!devlist, devlist, -+ qdict_haskey(qdict, "speed"), speed, &errp); ++ qmp_backup(backupfile, true, BACKUP_FORMAT_VMA, false, NULL, !!devlist, ++ devlist, qdict_haskey(qdict, "speed"), speed, &errp); + + if (error_is_set(&errp)) { + monitor_printf(mon, "%s\n", error_get_pretty(errp)); @@ -608,7 +607,7 @@ index c0e32d6..85cf47e 100644 .args_type = "", .params = "", diff --git a/qapi-schema.json b/qapi-schema.json -index 5dfa052..bcc70b1 100644 +index 5dfa052..2d3699b 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -358,6 +358,39 @@ @@ -651,10 +650,20 @@ index 5dfa052..bcc70b1 100644 # @query-events: # # Return a list of supported QMP events by this server -@@ -1764,6 +1797,54 @@ +@@ -1764,6 +1797,64 @@ 'data': { 'path': 'str' }, 'returns': [ 'ObjectPropertyInfo' ] } ++ ++## ++# @BackupFormat ++# ++# An enumeration of supported backup formats. ++# ++# @vma: Proxmox vma backup format ++## ++{ 'enum': 'BackupFormat', ++ 'data': [ 'vma' ] } + +## +# @backup: @@ -674,7 +683,7 @@ index 5dfa052..bcc70b1 100644 +# +# Since: 1.4.0 +## -+{ 'command': 'backup', 'data': { 'backupfile': 'str', '*format': 'str', ++{ 'command': 'backup', 'data': { 'backupfile': 'str', '*format': 'BackupFormat', + '*config-filename': 'str', + '*devlist': 'str', '*speed': 'int' }, + 'returns': 'str' } diff --git a/debian/patches/0004-introduce-new-vma-archive-format.patch b/debian/patches/0004-introduce-new-vma-archive-format.patch index 4133ce0..2c24f26 100644 --- a/debian/patches/0004-introduce-new-vma-archive-format.patch +++ b/debian/patches/0004-introduce-new-vma-archive-format.patch @@ -1,4 +1,4 @@ -From 9fb6fd584178db5b5a9f0b59f78c30b3c3066f73 Mon Sep 17 00:00:00 2001 +From 5fbe9dc9bb921a1ee4814028d42c4fc46b04e172 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Tue, 13 Nov 2012 11:11:38 +0100 Subject: [PATCH v3 4/6] introduce new vma archive format @@ -57,7 +57,7 @@ index cb46be5..b5732e2 100644 block-obj-$(CONFIG_POSIX) += event_notifier-posix.o aio-posix.o block-obj-$(CONFIG_WIN32) += event_notifier-win32.o aio-win32.o diff --git a/blockdev.c b/blockdev.c -index e89aa14..6764e73 100644 +index 08ac7ad..e16091f 100644 --- a/blockdev.c +++ b/blockdev.c @@ -21,6 +21,7 @@ @@ -68,20 +68,20 @@ index e89aa14..6764e73 100644 static QTAILQ_HEAD(drivelist, DriveInfo) drives = QTAILQ_HEAD_INITIALIZER(drives); -@@ -1483,10 +1484,11 @@ char *qmp_backup(const char *backupfile, bool has_format, const char *format, +@@ -1483,10 +1484,11 @@ char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format, /* Todo: try to auto-detect format based on file name */ - format = has_format ? format : "vma"; + format = has_format ? format : BACKUP_FORMAT_VMA; - /* fixme: find driver for specifued format */ const BackupDriver *driver = NULL; - if (!driver) { -+ if (strcmp(format, "vma") == 0) { ++ if (format == BACKUP_FORMAT_VMA) { + driver = &backup_vma_driver; + } else { - error_set(errp, ERROR_CLASS_GENERIC_ERROR, - "no backup driver for format '%s'", format); + error_set(errp, ERROR_CLASS_GENERIC_ERROR, "unknown backup format"); return NULL; + } diff --git a/docs/specs/vma_spec.txt b/docs/specs/vma_spec.txt new file mode 100644 index 0000000..052c629 diff --git a/debian/patches/0005-add-regression-tests-for-backup.patch b/debian/patches/0005-add-regression-tests-for-backup.patch index e79e247..0e52839 100644 --- a/debian/patches/0005-add-regression-tests-for-backup.patch +++ b/debian/patches/0005-add-regression-tests-for-backup.patch @@ -1,4 +1,4 @@ -From da1ef0e71e40f35bc2274201fb28a58b09d53456 Mon Sep 17 00:00:00 2001 +From 6a409b2401390d672b7f2a105d8446475fa5bee2 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Wed, 14 Nov 2012 09:57:04 +0100 Subject: [PATCH v3 5/6] add regression tests for backup diff --git a/debian/patches/0006-add-vm-state-to-backups.patch b/debian/patches/0006-add-vm-state-to-backups.patch index 89a17a9..9bf11a4 100644 --- a/debian/patches/0006-add-vm-state-to-backups.patch +++ b/debian/patches/0006-add-vm-state-to-backups.patch @@ -1,4 +1,4 @@ -From ca0d410ca44dcb666c6eecf8d8f2f4a18355950f Mon Sep 17 00:00:00 2001 +From ea2827e070e10b515be9b05628e372d281fcf868 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Thu, 29 Nov 2012 10:46:49 +0100 Subject: [PATCH v3 6/6] add vm state to backups @@ -7,12 +7,12 @@ Subject: [PATCH v3 6/6] add vm state to backups Signed-off-by: Dietmar Maurer --- blockdev.c | 196 +++++++++++++++++++++++++++++++++++++++++++++++++++++- - hmp.c | 2 +- + hmp.c | 5 +- qapi-schema.json | 6 +- - 3 files changed, 199 insertions(+), 5 deletions(-) + 3 files changed, 201 insertions(+), 6 deletions(-) diff --git a/blockdev.c b/blockdev.c -index 6764e73..4f7e38b 100644 +index e16091f..a5e2058 100644 --- a/blockdev.c +++ b/blockdev.c @@ -22,6 +22,8 @@ @@ -198,7 +198,7 @@ index 6764e73..4f7e38b 100644 + goto out; +} + - char *qmp_backup(const char *backupfile, bool has_format, const char *format, + char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format, bool has_config_filename, const char *config_filename, bool has_devlist, const char *devlist, - bool has_speed, int64_t speed, Error **errp) @@ -207,16 +207,16 @@ index 6764e73..4f7e38b 100644 { BlockDriverState *bs; Error *local_err = NULL; -@@ -1481,6 +1647,8 @@ char *qmp_backup(const char *backupfile, bool has_format, const char *format, +@@ -1481,6 +1647,8 @@ char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format, gchar **devs = NULL; GList *bcblist = NULL; + bool save_state = has_state ? state : false; + /* Todo: try to auto-detect format based on file name */ - format = has_format ? format : "vma"; + format = has_format ? format : BACKUP_FORMAT_VMA; -@@ -1562,6 +1730,22 @@ char *qmp_backup(const char *backupfile, bool has_format, const char *format, +@@ -1561,6 +1729,22 @@ char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format, size_t total = 0; /* register all devices for vma writer */ @@ -239,7 +239,7 @@ index 6764e73..4f7e38b 100644 l = bcblist; while (l) { BackupCB *bcb = l->data; -@@ -1625,8 +1809,16 @@ char *qmp_backup(const char *backupfile, bool has_format, const char *format, +@@ -1624,8 +1808,16 @@ char *qmp_backup(const char *backupfile, bool has_format, BackupFormat format, backup_state.total = total; backup_state.transferred = 0; backup_state.zero_bytes = 0; @@ -258,23 +258,26 @@ index 6764e73..4f7e38b 100644 return g_strdup(backup_state.uuid_str); diff --git a/hmp.c b/hmp.c -index 600792f..e92bba9 100644 +index 77076fa..61ba5c3 100644 --- a/hmp.c +++ b/hmp.c -@@ -1031,7 +1031,7 @@ void hmp_backup(Monitor *mon, const QDict *qdict) +@@ -1031,8 +1031,9 @@ void hmp_backup(Monitor *mon, const QDict *qdict) Error *errp = NULL; - qmp_backup(backupfile, false, NULL, false, NULL, !!devlist, devlist, -- qdict_haskey(qdict, "speed"), speed, &errp); -+ qdict_haskey(qdict, "speed"), speed, false, false, &errp); - + qmp_backup(backupfile, true, BACKUP_FORMAT_VMA, false, NULL, !!devlist, +- devlist, qdict_haskey(qdict, "speed"), speed, &errp); +- ++ devlist, qdict_haskey(qdict, "speed"), speed, false, false, ++ &errp); ++ if (error_is_set(&errp)) { monitor_printf(mon, "%s\n", error_get_pretty(errp)); + error_free(errp); diff --git a/qapi-schema.json b/qapi-schema.json -index bcc70b1..2af4359 100644 +index 2d3699b..3f4889e 100644 --- a/qapi-schema.json +++ b/qapi-schema.json -@@ -1812,13 +1812,15 @@ +@@ -1822,13 +1822,15 @@ # # @speed: #optional the maximum speed, in bytes per second # @@ -284,7 +287,7 @@ index bcc70b1..2af4359 100644 # # Since: 1.4.0 ## - { 'command': 'backup', 'data': { 'backupfile': 'str', '*format': 'str', + { 'command': 'backup', 'data': { 'backupfile': 'str', '*format': 'BackupFormat', - '*config-filename': 'str', - '*devlist': 'str', '*speed': 'int' }, + '*config-filename': 'str', '*devlist': 'str',