From ecd811310c01beb5bd16f38242141c9d04b18d55 Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Tue, 25 Jun 2013 14:38:05 +0200 Subject: [PATCH] qemu: Move common parts of Prepare phase to qemu_migration.c --- src/qemu/qemu_driver.c | 120 ++++++-------------------------------- src/qemu/qemu_migration.c | 44 ++++++++++++++ src/qemu/qemu_migration.h | 4 ++ 3 files changed, 65 insertions(+), 103 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 863923de1b..4a17b64911 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -9962,25 +9962,14 @@ qemuDomainMigratePrepareTunnel(virConnectPtr dconn, const char *dom_xml) { virQEMUDriverPtr driver = dconn->privateData; - virCapsPtr caps = NULL; virDomainDefPtr def = NULL; int ret = -1; virCheckFlags(QEMU_MIGRATION_FLAGS, -1); - if (!dom_xml) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("no domain XML passed")); - goto cleanup; - } if (!(flags & VIR_MIGRATE_TUNNELLED)) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("PrepareTunnel called but no TUNNELLED flag set")); - goto cleanup; - } - if (st == NULL) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("tunnelled migration requested but NULL stream passed")); + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("PrepareTunnel called but no TUNNELLED flag set")); goto cleanup; } @@ -9991,20 +9980,9 @@ qemuDomainMigratePrepareTunnel(virConnectPtr dconn, goto cleanup; } - if (!(caps = virQEMUDriverGetCapabilities(driver, false))) + if (!(def = qemuMigrationPrepareDef(driver, dom_xml, dname))) goto cleanup; - if (!(def = virDomainDefParseString(dom_xml, caps, driver->xmlopt, - QEMU_EXPECTED_VIRT_TYPES, - VIR_DOMAIN_XML_INACTIVE))) - goto cleanup; - - if (dname) { - VIR_FREE(def->name); - if (VIR_STRDUP(def->name, dname) < 0) - goto cleanup; - } - if (virDomainMigratePrepareTunnelEnsureACL(dconn, def) < 0) goto cleanup; @@ -10014,7 +9992,6 @@ qemuDomainMigratePrepareTunnel(virConnectPtr dconn, cleanup: virDomainDefFree(def); - virObjectUnref(caps); return ret; } @@ -10034,50 +10011,31 @@ qemuDomainMigratePrepare2(virConnectPtr dconn, const char *dom_xml) { virQEMUDriverPtr driver = dconn->privateData; - virCapsPtr caps = NULL; virDomainDefPtr def = NULL; int ret = -1; virCheckFlags(QEMU_MIGRATION_FLAGS, -1); - *uri_out = NULL; - - if (virLockManagerPluginUsesState(driver->lockManager)) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Cannot use migrate v2 protocol with lock manager %s"), - virLockManagerPluginGetName(driver->lockManager)); - goto cleanup; - } - if (flags & VIR_MIGRATE_TUNNELLED) { /* this is a logical error; we never should have gotten here with * VIR_MIGRATE_TUNNELLED set */ - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("Tunnelled migration requested but invalid RPC method called")); + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Tunnelled migration requested but invalid " + "RPC method called")); goto cleanup; } - if (!dom_xml) { + if (virLockManagerPluginUsesState(driver->lockManager)) { virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("no domain XML passed")); + _("Cannot use migrate v2 protocol with lock manager %s"), + virLockManagerPluginGetName(driver->lockManager)); goto cleanup; } - if (!(caps = virQEMUDriverGetCapabilities(driver, false))) + if (!(def = qemuMigrationPrepareDef(driver, dom_xml, dname))) goto cleanup; - if (!(def = virDomainDefParseString(dom_xml, caps, driver->xmlopt, - QEMU_EXPECTED_VIRT_TYPES, - VIR_DOMAIN_XML_INACTIVE))) - goto cleanup; - - if (dname) { - VIR_FREE(def->name); - if (VIR_STRDUP(def->name, dname) < 0) - goto cleanup; - } - if (virDomainMigratePrepare2EnsureACL(dconn, def) < 0) goto cleanup; @@ -10092,7 +10050,6 @@ qemuDomainMigratePrepare2(virConnectPtr dconn, cleanup: virDomainDefFree(def); - virObjectUnref(caps); return ret; } @@ -10230,43 +10187,24 @@ qemuDomainMigratePrepare3(virConnectPtr dconn, const char *dom_xml) { virQEMUDriverPtr driver = dconn->privateData; - virCapsPtr caps = NULL; virDomainDefPtr def = NULL; int ret = -1; virCheckFlags(QEMU_MIGRATION_FLAGS, -1); - *uri_out = NULL; - if (flags & VIR_MIGRATE_TUNNELLED) { /* this is a logical error; we never should have gotten here with * VIR_MIGRATE_TUNNELLED set */ - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("Tunnelled migration requested but invalid RPC method called")); - goto cleanup; - } - - if (!dom_xml) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("no domain XML passed")); + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Tunnelled migration requested but invalid " + "RPC method called")); goto cleanup; } - if (!(caps = virQEMUDriverGetCapabilities(driver, false))) + if (!(def = qemuMigrationPrepareDef(driver, dom_xml, dname))) goto cleanup; - if (!(def = virDomainDefParseString(dom_xml, caps, driver->xmlopt, - QEMU_EXPECTED_VIRT_TYPES, - VIR_DOMAIN_XML_INACTIVE))) - goto cleanup; - - if (dname) { - VIR_FREE(def->name); - if (VIR_STRDUP(def->name, dname) < 0) - goto cleanup; - } - if (virDomainMigratePrepare3EnsureACL(dconn, def) < 0) goto cleanup; @@ -10278,7 +10216,6 @@ qemuDomainMigratePrepare3(virConnectPtr dconn, cleanup: virDomainDefFree(def); - virObjectUnref(caps); return ret; } @@ -10296,42 +10233,20 @@ qemuDomainMigratePrepareTunnel3(virConnectPtr dconn, const char *dom_xml) { virQEMUDriverPtr driver = dconn->privateData; - virCapsPtr caps = NULL; virDomainDefPtr def = NULL; int ret = -1; virCheckFlags(QEMU_MIGRATION_FLAGS, -1); - if (!dom_xml) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("no domain XML passed")); - goto cleanup; - } if (!(flags & VIR_MIGRATE_TUNNELLED)) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("PrepareTunnel called but no TUNNELLED flag set")); - goto cleanup; - } - if (st == NULL) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("tunnelled migration requested but NULL stream passed")); + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("PrepareTunnel called but no TUNNELLED flag set")); goto cleanup; } - if (!(caps = virQEMUDriverGetCapabilities(driver, false))) - goto cleanup; - - if (!(def = virDomainDefParseString(dom_xml, caps, driver->xmlopt, - QEMU_EXPECTED_VIRT_TYPES, - VIR_DOMAIN_XML_INACTIVE))) + if (!(def = qemuMigrationPrepareDef(driver, dom_xml, dname))) goto cleanup; - if (dname) { - VIR_FREE(def->name); - if (VIR_STRDUP(def->name, dname) < 0) - goto cleanup; - } - if (virDomainMigratePrepareTunnel3EnsureACL(dconn, def) < 0) goto cleanup; @@ -10342,7 +10257,6 @@ qemuDomainMigratePrepareTunnel3(virConnectPtr dconn, cleanup: virDomainDefFree(def); - virObjectUnref(caps); return ret; } diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 9e2d04389c..5d3b3c94f7 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2442,6 +2442,12 @@ qemuMigrationPrepareTunnel(virQEMUDriverPtr driver, driver, dconn, NULLSTR(cookiein), cookieinlen, cookieout, cookieoutlen, st, *def, flags); + if (st == NULL) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("tunnelled migration requested but NULL stream passed")); + return -1; + } + ret = qemuMigrationPrepareAny(driver, dconn, cookiein, cookieinlen, cookieout, cookieoutlen, def, st, 0, flags); @@ -2476,6 +2482,8 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver, cookieout, cookieoutlen, NULLSTR(uri_in), uri_out, *def, flags); + *uri_out = NULL; + /* The URI passed in may be NULL or a string "tcp://somehostname:port". * * If the URI passed in is NULL then we allocate a port number @@ -2580,6 +2588,42 @@ cleanup: } +virDomainDefPtr +qemuMigrationPrepareDef(virQEMUDriverPtr driver, + const char *dom_xml, + const char *dname) +{ + virCapsPtr caps = NULL; + virDomainDefPtr def; + + if (!dom_xml) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("no domain XML passed")); + return NULL; + } + + if (!(caps = virQEMUDriverGetCapabilities(driver, false))) + return NULL; + + if (!(def = virDomainDefParseString(dom_xml, caps, driver->xmlopt, + QEMU_EXPECTED_VIRT_TYPES, + VIR_DOMAIN_XML_INACTIVE))) + goto cleanup; + + if (dname) { + VIR_FREE(def->name); + if (VIR_STRDUP(def->name, dname) < 0) { + virDomainDefFree(def); + def = NULL; + } + } + +cleanup: + virObjectUnref(caps); + return def; +} + + enum qemuMigrationDestinationType { MIGRATION_DEST_HOST, MIGRATION_DEST_CONNECT_HOST, diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index 09b5b1ac1d..fdca583175 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -92,6 +92,10 @@ char *qemuMigrationBegin(virConnectPtr conn, int *cookieoutlen, unsigned long flags); +virDomainDefPtr qemuMigrationPrepareDef(virQEMUDriverPtr driver, + const char *dom_xml, + const char *dname); + int qemuMigrationPrepareTunnel(virQEMUDriverPtr driver, virConnectPtr dconn, const char *cookiein, -- GitLab