[libvirt] [PATCH] vz: fix SDK event dispatching

Dmitry Guryanov dguryanov at odin.com
Tue Jun 30 11:09:21 UTC 2015


On 06/25/2015 11:56 AM, nshirokovskiy at virtuozzo.com wrote:
> From: Nikolay Shirokovskiy <nshirokovskiy at virtuozzo.com>
>
> Current version of SDK event dispatcing is incorrect. For most VM events (add,
> delete etc) issuer type is PIE_DISPATCHER. Actually analyzing issuer type
> doesn't have any benifints so this patch get rid of it. All dispatching is done
> only on event type.

ACK, I'll push it after the freeze.

> Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy at virtuozzo.com>
> ---
>   src/vz/vz_sdk.c |   58 +++++++++++++++---------------------------------------
>   1 files changed, 16 insertions(+), 42 deletions(-)
>
> diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c
> index 98f7a57..2ca74c4 100644
> --- a/src/vz/vz_sdk.c
> +++ b/src/vz/vz_sdk.c
> @@ -1697,21 +1697,33 @@ prlsdkHandlePerfEvent(vzConnPtr privconn,
>       return PRL_ERR_SUCCESS;
>   }
>   
> -static void
> -prlsdkHandleVmEvent(vzConnPtr privconn, PRL_HANDLE prlEvent)
> +static PRL_RESULT
> +prlsdkEventsHandler(PRL_HANDLE prlEvent, PRL_VOID_PTR opaque)
>   {
> +    vzConnPtr privconn = opaque;
>       PRL_RESULT pret = PRL_ERR_FAILURE;
> +    PRL_HANDLE_TYPE handleType;
>       char uuidstr[VIR_UUID_STRING_BUFLEN + 2];
>       unsigned char uuid[VIR_UUID_BUFLEN];
>       PRL_UINT32 bufsize = ARRAY_CARDINALITY(uuidstr);
>       PRL_EVENT_TYPE prlEventType;
>   
> -    pret = PrlEvent_GetType(prlEvent, &prlEventType);
> +    pret = PrlHandle_GetType(prlEvent, &handleType);
>       prlsdkCheckRetGoto(pret, cleanup);
>   
> +    /* Currently, there is no need to handle anything but events */
> +    if (handleType != PHT_EVENT)
> +        goto cleanup;
> +
> +    if (privconn == NULL)
> +        goto cleanup;
> +
>       pret = PrlEvent_GetIssuerId(prlEvent, uuidstr, &bufsize);
>       prlsdkCheckRetGoto(pret, cleanup);
>   
> +    pret = PrlEvent_GetType(prlEvent, &prlEventType);
> +    prlsdkCheckRetGoto(pret, cleanup);
> +
>       if (prlsdkUUIDParse(uuidstr, uuid) < 0)
>           goto cleanup;
>   
> @@ -1736,44 +1748,7 @@ prlsdkHandleVmEvent(vzConnPtr privconn, PRL_HANDLE prlEvent)
>               prlEvent = PRL_INVALID_HANDLE;
>               break;
>           default:
> -            virReportError(VIR_ERR_INTERNAL_ERROR,
> -                       _("Can't handle event of type %d"), prlEventType);
> -    }
> -
> - cleanup:
> -    PrlHandle_Free(prlEvent);
> -    return;
> -}
> -
> -static PRL_RESULT
> -prlsdkEventsHandler(PRL_HANDLE prlEvent, PRL_VOID_PTR opaque)
> -{
> -    vzConnPtr privconn = opaque;
> -    PRL_RESULT pret = PRL_ERR_FAILURE;
> -    PRL_HANDLE_TYPE handleType;
> -    PRL_EVENT_ISSUER_TYPE prlIssuerType = PIE_UNKNOWN;
> -
> -    pret = PrlHandle_GetType(prlEvent, &handleType);
> -    prlsdkCheckRetGoto(pret, cleanup);
> -
> -    /* Currently, there is no need to handle anything but events */
> -    if (handleType != PHT_EVENT)
> -        goto cleanup;
> -
> -    if (privconn == NULL)
> -        goto cleanup;
> -
> -    PrlEvent_GetIssuerType(prlEvent, &prlIssuerType);
> -    prlsdkCheckRetGoto(pret, cleanup);
> -
> -    switch (prlIssuerType) {
> -        case PIE_VIRTUAL_MACHINE:
> -            prlsdkHandleVmEvent(privconn, prlEvent);
> -            // above function takes own of event
> -            prlEvent = PRL_INVALID_HANDLE;
> -            break;
> -        default:
> -            VIR_DEBUG("Skipping event of issuer type %d", prlIssuerType);
> +            VIR_DEBUG("Skipping event of type %d", prlEventType);
>       }
>   
>    cleanup:
> @@ -1781,7 +1756,6 @@ prlsdkEventsHandler(PRL_HANDLE prlEvent, PRL_VOID_PTR opaque)
>       return PRL_ERR_SUCCESS;
>   }
>   
> -
>   int prlsdkSubscribeToPCSEvents(vzConnPtr privconn)
>   {
>       PRL_RESULT pret = PRL_ERR_UNINITIALIZED;


-- 
Dmitry Guryanov




More information about the libvir-list mailing list