[libvirt] [PATCH v4 0/9] Selective block device migration implementation
Michal Privoznik
mprivozn at redhat.com
Tue Jun 16 15:47:35 UTC 2015
On 16.06.2015 00:42, Pavel Boldin wrote:
> Behold of the fourth re-roll of the selective block device migration patch.
> In this patch we don't only fix the issue with NBD migration format auto-
> detection but also introduce the patches that do enhance the NBD migration
> triggered by `drive-mirror` QEMU command with ability for the user to select
> what disks are to be migrated based on the target name.
>
> First two patches fix some nitpicks, third one fixes the issue with NBD format
> auto-detection.
>
> Middle ones introduce a necessary API to keep a list of block devices to
> migrate in the virTypedParameter array and to work with this list.
>
> Of the two last patches first introduces the `migrate_disks' qemuMigration*
> parameter and pushes it down the call stack making the code to consult it when
> there is a decision to be made whether the block device is to be migrated to
> the new host. When there is no `migrate_disks' parameter given then the old
> scheme is used: only non-shared non-readonly disks with a source are migrated.
>
> The last patch promotes this ability up to the virsh utility and documents
> it as appropriate.
>
> Michal Privoznik (3):
> virDomainDiskGetSource: Mark passed disk as 'const'
> qemuMigrationBeginPhase: Fix function header indentation
> qemuMigrationDriveMirror: Force raw format for NBD
>
> Pavel Boldin (6):
> util: multi-value virTypedParameter
> util: multi-value parameters in virTypedParamsAdd*
> util: virTypedParams{Filter,GetAllStrings}
> util: add virTypedParamsAddStringList
> qemu: migration: selective block device migration
> virsh: selective block device migration
>
> include/libvirt/libvirt-domain.h | 9 ++
> include/libvirt/libvirt-host.h | 11 ++
> src/conf/domain_conf.c | 2 +-
> src/conf/domain_conf.h | 2 +-
> src/libvirt_public.syms | 6 +
> src/qemu/qemu_driver.c | 78 ++++++++---
> src/qemu/qemu_migration.c | 264 +++++++++++++++++++++++++----------
> src/qemu/qemu_migration.h | 24 ++--
> src/util/virtypedparam.c | 259 +++++++++++++++++++++++++++-------
> src/util/virtypedparam.h | 19 +++
> tests/Makefile.am | 6 +
> tests/virtypedparamtest.c | 295 +++++++++++++++++++++++++++++++++++++++
> tools/virsh-domain.c | 23 +++
> tools/virsh.pod | 21 +--
> 14 files changed, 854 insertions(+), 165 deletions(-)
> create mode 100644 tests/virtypedparamtest.c
>
Basically, this is the diff of the all nits I've pointed out:
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index f7373af..6c41e89 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2272,6 +2272,8 @@ virTypedParameterTypeFromString;
virTypedParameterTypeToString;
virTypedParamsCheck;
virTypedParamsCopy;
+virTypedParamsFilter;
+virTypedParamsGetAllStrings;
virTypedParamsReplaceString;
virTypedParamsValidate;
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
index ccc7532..59d8c12 100644
--- a/src/libvirt_public.syms
+++ b/src/libvirt_public.syms
@@ -717,7 +717,6 @@ LIBVIRT_1.2.16 {
LIBVIRT_1.3.0 {
global:
- virTypedParamsGetAllStrings;
virTypedParamsAddStringList;
} LIBVIRT_1.2.16;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index d56579b..4c6b530 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -12351,7 +12351,7 @@ qemuDomainMigrateBegin3(virDomainPtr domain,
}
return qemuMigrationBegin(domain->conn, vm, xmlin, dname,
- cookieout, cookieoutlen, flags, 0, NULL);
+ cookieout, cookieoutlen, 0, NULL, flags);
}
static char *
@@ -12381,9 +12381,9 @@ qemuDomainMigrateBegin3Params(virDomainPtr domain,
&dname) < 0)
goto cleanup;
- nmigrate_disks = virTypedParamsGetAllStrings(
- params, nparams, VIR_MIGRATE_PARAM_MIGRATE_DISKS,
- &migrate_disks);
+ nmigrate_disks = virTypedParamsGetAllStrings(params, nparams,
+ VIR_MIGRATE_PARAM_MIGRATE_DISKS,
+ &migrate_disks);
if (nmigrate_disks < 0)
goto cleanup;
@@ -12397,8 +12397,8 @@ qemuDomainMigrateBegin3Params(virDomainPtr domain,
}
ret = qemuMigrationBegin(domain->conn, vm, xmlin, dname,
- cookieout, cookieoutlen, flags,
- nmigrate_disks, migrate_disks);
+ cookieout, cookieoutlen,
+ nmigrate_disks, migrate_disks, flags);
cleanup:
VIR_FREE(migrate_disks);
@@ -12495,9 +12495,9 @@ qemuDomainMigratePrepare3Params(virConnectPtr dconn,
&listenAddress) < 0)
goto cleanup;
- nmigrate_disks = virTypedParamsGetAllStrings(
- params, nparams, VIR_MIGRATE_PARAM_MIGRATE_DISKS,
- &migrate_disks);
+ nmigrate_disks = virTypedParamsGetAllStrings(params, nparams,
+ VIR_MIGRATE_PARAM_MIGRATE_DISKS,
+ &migrate_disks);
if (nmigrate_disks < 0)
goto cleanup;
@@ -12688,7 +12688,7 @@ qemuDomainMigratePerform3Params(virDomainPtr dom,
virCheckFlags(QEMU_MIGRATION_FLAGS, -1);
if (virTypedParamsValidate(params, nparams, QEMU_MIGRATION_PARAMETERS) < 0)
- return -1;
+ return ret;
if (virTypedParamsGetString(params, nparams,
VIR_MIGRATE_PARAM_DEST_XML,
@@ -12710,9 +12710,9 @@ qemuDomainMigratePerform3Params(virDomainPtr dom,
&listenAddress) < 0)
goto cleanup;
- nmigrate_disks = virTypedParamsGetAllStrings(
- params, nparams, VIR_MIGRATE_PARAM_MIGRATE_DISKS,
- &migrate_disks);
+ nmigrate_disks = virTypedParamsGetAllStrings(params, nparams,
+ VIR_MIGRATE_PARAM_MIGRATE_DISKS,
+ &migrate_disks);
if (nmigrate_disks < 0)
goto cleanup;
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 275d416..7fae75b 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -1584,6 +1584,7 @@ qemuMigrateDisk(virDomainDiskDef const *disk,
size_t nmigrate_disks, const char **migrate_disks)
{
size_t i;
+
/* Check if the disk alias is in the list */
if (nmigrate_disks) {
for (i = 0; i < nmigrate_disks; i++) {
@@ -2871,9 +2872,9 @@ qemuMigrationBegin(virConnectPtr conn,
const char *dname,
char **cookieout,
int *cookieoutlen,
- unsigned long flags,
size_t nmigrate_disks,
- const char **migrate_disks)
+ const char **migrate_disks,
+ unsigned long flags)
{
virQEMUDriverPtr driver = conn->privateData;
char *xml = NULL;
diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h
index 2a942c0..030b32f 100644
--- a/src/qemu/qemu_migration.h
+++ b/src/qemu/qemu_migration.h
@@ -101,9 +101,9 @@ char *qemuMigrationBegin(virConnectPtr conn,
const char *dname,
char **cookieout,
int *cookieoutlen,
- unsigned long flags,
size_t nmigrate_disks,
- const char **migrate_disks);
+ const char **migrate_disks,
+ unsigned long flags);
virDomainDefPtr qemuMigrationPrepareDef(virQEMUDriverPtr driver,
const char *dom_xml,
diff --git a/src/util/virtypedparam.h b/src/util/virtypedparam.h
index ac7f3a1..bc84096 100644
--- a/src/util/virtypedparam.h
+++ b/src/util/virtypedparam.h
@@ -29,7 +29,7 @@
/**
* VIR_TYPED_PARAM_MULTIPLE:
*
- * Flag indiciating that the params has multiple occurences of the parameter.
+ * Flag indicating that the params has multiple occurrences of the parameter.
* Only used as a flag for @type argument of the virTypedParamsValidate.
*/
# define VIR_TYPED_PARAM_MULTIPLE (1 << 31)
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 5d10999..77de8c0 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1236,7 +1236,7 @@ objecteventtest_LDADD = $(LDADDS)
virtypedparamtest_SOURCES = \
virtypedparamtest.c testutils.h testutils.c
-virtypedparamtest_LDADD = $(LDADDS) ../src/libvirt_util.la $(GNULIB_LIBS)
+virtypedparamtest_LDADD = $(LDADDS)
if WITH_LINUX
diff --git a/tests/virtypedparamtest.c b/tests/virtypedparamtest.c
index 2869535..b362b9b 100644
--- a/tests/virtypedparamtest.c
+++ b/tests/virtypedparamtest.c
@@ -153,7 +153,8 @@ testTypedParamsAddStringList(const void *opaque ATTRIBUTE_UNUSED)
static int
testTypedParamsGetAllStrings(const void *opaque ATTRIBUTE_UNUSED)
{
- int i, picked;
+ size_t i;
+ int picked;
int rv = -1;
char l = '1';
const char **strings = NULL;
I have it squashed into the corresponding commits. So with this - you have my ACK, although it feels a bit weird to ACK my own patches. Therefore, I'm giving others some time before merging this to express their feelings.
Michal
More information about the libvir-list
mailing list