Re: [libvirt] [PATCH 3/4] vz: remove code duplication from LoadDomain()

2016-01-25 Thread Nikolay Shirokovskiy
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, , 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, >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;
> 

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH 3/4] vz: remove code duplication from LoadDomain()

2016-01-23 Thread Mikhail Feoktistov
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, , 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, >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;
-- 
1.8.3.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list