[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