if (!(dom = vzDomObjFromDomain(domain)))
goto cleanup;
- /* session uuid is for backward compat */
+ /* session uuid, domain uuid and domain name are for backward compat */
if (vzBakeCookie(privconn->driver, dom, cookieout, cookieoutlen,
VZ_MIGRATION_COOKIE_SESSION_UUID
| VZ_MIGRATION_COOKIE_DOMAIN_UUID
vzDomainMigratePrepare3Params(virConnectPtr conn,
virTypedParameterPtr params,
int nparams,
- const char *cookiein,
- int cookieinlen,
+ const char *cookiein ATTRIBUTE_UNUSED,
+ int cookieinlen ATTRIBUTE_UNUSED,
char **cookieout,
int *cookieoutlen,
char **uri_out,
vzConnPtr privconn = conn->privateData;
const char *miguri = NULL;
const char *dname = NULL;
- virDomainObjPtr dom = NULL;
- vzMigrationCookiePtr mig = NULL;
int ret = -1;
virCheckFlags(VZ_MIGRATION_FLAGS, -1);
if (!miguri && !(*uri_out = vzMigrationCreateURI()))
goto cleanup;
- if (!(mig = vzEatCookie(cookiein, cookieinlen,
- VZ_MIGRATION_COOKIE_DOMAIN_UUID
- | VZ_MIGRATION_COOKIE_DOMAIN_NAME)))
- goto cleanup;
-
/* domain uuid and domain name are for backward compat */
if (vzBakeCookie(privconn->driver, NULL,
cookieout, cookieoutlen,
| VZ_MIGRATION_COOKIE_DOMAIN_NAME) < 0)
goto cleanup;
- virObjectLock(privconn->driver);
- dom = virDomainObjListFindByUUID(privconn->driver->domains, mig->uuid);
- if (dom) {
- char uuidstr[VIR_UUID_STRING_BUFLEN];
- virUUIDFormat(mig->uuid, uuidstr);
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("A domain with uuid '%s' already exists"),
- uuidstr);
- goto unlock;
- }
-
- if (!(dom = vzNewDomain(privconn->driver,
- dname ? dname : mig->name, mig->uuid)))
- goto unlock;
-
ret = 0;
- unlock:
- virObjectUnlock(privconn->driver);
-
cleanup:
- vzMigrationCookieFree(mig);
- if (dom)
- virObjectUnlock(dom);
return ret;
}
vzConnPtr privconn = dconn->privateData;
vzDriverPtr driver = privconn->driver;
const char *name = NULL;
+ PRL_HANDLE sdkdom = PRL_INVALID_HANDLE;
virCheckFlags(VZ_MIGRATION_FLAGS, NULL);
if (virTypedParamsValidate(params, nparams, VZ_MIGRATION_PARAMETERS) < 0)
- goto cleanup;
+ return NULL;
+
+ if (cancelled)
+ return NULL;
if (virTypedParamsGetString(params, nparams,
VIR_MIGRATE_PARAM_DEST_NAME, &name) < 0)
- goto cleanup;
-
- if (!(dom = virDomainObjListFindByName(driver->domains, name))) {
- virReportError(VIR_ERR_NO_DOMAIN,
- _("no domain with matching name '%s'"), name);
- goto cleanup;
- }
+ return NULL;
- if (cancelled) {
- virDomainObjListRemove(driver->domains, dom);
- dom = NULL;
+ sdkdom = prlsdkSdkDomainLookupByName(driver, name);
+ if (sdkdom == PRL_INVALID_HANDLE)
goto cleanup;
- }
- if (prlsdkLoadDomain(driver, dom))
+ if (!(dom = prlsdkNewDomainByHandle(driver, sdkdom)))
goto cleanup;
domain = virGetDomain(dconn, dom->def->name, dom->def->uuid);
cleanup:
/* In this situation we have to restore domain on source. But the migration
* is already finished. */
- if (!cancelled && !domain)
+ if (!domain)
VIR_WARN("Can't provide domain '%s' after successfull migration.", name);
- virDomainObjEndAPI(&dom);
+ if (dom)
+ virObjectUnlock(dom);
+ PrlHandle_Free(sdkdom);
return domain;
}
return sdkdom;
}
+PRL_HANDLE
+prlsdkSdkDomainLookupByName(vzDriverPtr driver, const char *name)
+{
+ PRL_HANDLE sdkdom = PRL_INVALID_HANDLE;
+
+ if (prlsdkSdkDomainLookup(driver, name,
+ PGVC_SEARCH_BY_NAME, &sdkdom) < 0) {
+ virReportError(VIR_ERR_NO_DOMAIN,
+ _("no domain with matching name '%s'"), name);
+ return PRL_INVALID_HANDLE;
+ }
+
+ return sdkdom;
+}
+
static int
prlsdkUUIDParse(const char *uuidstr, unsigned char *uuid)
{
return -1;
}
-static virDomainObjPtr
+virDomainObjPtr
prlsdkNewDomainByHandle(vzDriverPtr driver, PRL_HANDLE sdkdom)
{
virDomainObjPtr dom = NULL;