[libvirt] [PATCH 3/4] vz: remove code duplication from LoadDomain()
Nikolay Shirokovskiy
nshirokovskiy at virtuozzo.com
Mon Jan 25 10:29:02 UTC 2016
prlsdkLoadDomain works in 2 different cases:
1. Called first time for a domain. Then it creates and
initializes it. Then updates it from sdk handle.
2. Called when domain is already in list. In this case it updates domain from sdk handle.
I think we could end up in a better series if we split
this function into 2: first is to create and initialize,
second update domain from sdk handle (load).
On 23.01.2016 11:42, Mikhail Feoktistov wrote:
> Now we create new domain by calling prlsdkNewDomain().
> In LoadDomain() we just load info from vm instance to domain object.
> So remove code to create domain from LoadDomain().
>
> ---
> src/vz/vz_sdk.c | 55 +++++++++++++++++--------------------------------------
> 1 file changed, 17 insertions(+), 38 deletions(-)
>
> diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c
> index 765f5f1..d9f2127 100644
> --- a/src/vz/vz_sdk.c
> +++ b/src/vz/vz_sdk.c
> @@ -1260,26 +1260,29 @@ prlsdkLoadDomain(vzConnPtr privconn,
> PRL_UINT32 ram;
> PRL_UINT32 envId;
> PRL_VM_AUTOSTART_OPTION autostart;
> + unsigned char uuid[VIR_UUID_BUFLEN];
> + char *name;
>
> virCheckNonNullArgGoto(privconn, error);
> virCheckNonNullArgGoto(sdkdom, error);
>
> - if (!(def = virDomainDefNew()))
> + if (prlsdkGetDomainIds(sdkdom, &name, uuid) < 0)
> goto error;
>
> if (!olddom) {
> - if (VIR_ALLOC(pdom) < 0)
> - goto error;
> + dom = prlsdkNewDomain(privconn, name, uuid);
> + def = dom->def;
> + pdom = dom->privateData;
> } else {
> + if (!(def = virDomainDefNewFull(name, uuid, -1)))
> + goto error;
> pdom = olddom->privateData;
> + if (STREQ(privconn->drivername, "vz"))
> + def->virtType = VIR_DOMAIN_VIRT_VZ;
> + else
> + def->virtType = VIR_DOMAIN_VIRT_PARALLELS;
> }
> -
> - if (STREQ(privconn->drivername, "vz"))
> - def->virtType = VIR_DOMAIN_VIRT_VZ;
> - else
> - def->virtType = VIR_DOMAIN_VIRT_PARALLELS;
> -
> - def->id = -1;
> + VIR_FREE(name);
>
> /* we will remove this field in the near future, so let's set it
> * to NULL temporarily */
> @@ -1292,9 +1295,6 @@ prlsdkLoadDomain(vzConnPtr privconn,
> goto error;
> }
>
> - if (prlsdkGetDomainIds(sdkdom, &def->name, def->uuid) < 0)
> - goto error;
> -
> def->onReboot = VIR_DOMAIN_LIFECYCLE_RESTART;
> def->onPoweroff = VIR_DOMAIN_LIFECYCLE_DESTROY;
> def->onCrash = VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY;
> @@ -1369,23 +1369,10 @@ prlsdkLoadDomain(vzConnPtr privconn,
> }
>
> if (olddom) {
> - /* assign new virDomainDef without any checks */
> - /* we can't use virDomainObjAssignDef, because it checks
> - * for state and domain name */
> dom = olddom;
> virDomainDefFree(dom->def);
> dom->def = def;
> - } else {
> - if (!(dom = virDomainObjListAdd(privconn->domains, def,
> - privconn->xmlopt,
> - 0, NULL)))
> - goto error;
> }
> - /* dom is locked here */
> -
> - dom->privateData = pdom;
> - dom->privateDataFreeFunc = prlsdkDomObjFreePrivate;
> - dom->persistent = 1;
>
> switch (autostart) {
> case PAO_VM_START_ON_LOAD:
> @@ -1411,19 +1398,11 @@ prlsdkLoadDomain(vzConnPtr privconn,
>
> return dom;
> error:
> - if (dom && !olddom) {
> - /* Domain isn't persistent means that we haven't yet set
> - * prlsdkDomObjFreePrivate and should call it manually
> - */
> - if (!dom->persistent)
> - prlsdkDomObjFreePrivate(pdom);
> -
> + VIR_FREE(name);
> + if (!olddom && dom)
> virDomainObjListRemove(privconn->domains, dom);
> - }
> - /* Delete newly allocated def only if we haven't assigned it to domain
> - * Otherwise we will end up with domain having invalid def within it
> - */
> - if (!dom)
> +
> + if (olddom && !dom)
> virDomainDefFree(def);
>
> return NULL;
>
More information about the libvir-list
mailing list