[libvirt] status on review comments

Sharadha Prabhakar (3P) sharadha.prabhakar at citrix.com
Wed Mar 3 14:41:59 UTC 2010


I've sent a patch containing most of the changes you'd suggested, except the
Following ones. My comments inline.

> diff -Nur ./libvirt_org/src/xenapi/xenapi_driver.c ./libvirt/src/xenapi/xenapi_driver.c
> --- ./libvirt_org/src/xenapi/xenapi_driver.c    1970-01-01 01:00:00.000000000 +0100
> +++ ./libvirt/src/xenapi/xenapi_driver.c        2010-02-26 15:27:00.000000000 +0000
> @@ -0,0 +1,1564 @@
> +
> +/*
> + * xenapi_driver.c: Xen API driver.
> + * Copyright (C) 2009 Citrix Ltd.
> + * Sharadha Prabhakar <sharadha.prabhakar at citrix.com>
> +*/
> +


> +
> +char *url=NULL;

>You should move this into the xenapiPrivate struct, otherwise you'll
>have trouble using multiple XenAPI connections at the same time,
>because multiple calls to xenapiOpen will overwrite the pointer an
>leak the previous value.

url is passed to call_func() which is used by curl to talk to the server.
Call_func() doesn't have access to 'conn', hence it can't be embedded there.
I'll figure out a way to do this. The recent patch also has a SSL_verfiy flag
which is global and used by call_func that should also be embedded similarly.

> +*
> +* Returns OS version on success or NULL in case of error
> +*/
> +static char *
> +xenapiDomainGetOSType (virDomainPtr dom)
> +{
> +    /* vm.get_os-version */
> +    int i;
> +    xen_vm vm;
> +    char *os_version=NULL;
> +    xen_vm_record *record;
> +    xen_string_string_map *result;
> +    char uuid[VIR_UUID_STRING_BUFLEN];
> +    xen_session *session = ((struct _xenapiPrivate *)(dom->conn->privateData))->session;
> +    virUUIDFormat(dom->uuid,uuid);
> +    if (xen_vm_get_by_uuid(session, &vm, uuid)) {
> +        xen_vm_get_record(session, &record, vm);
> +        if (record) {
> +            xen_vm_guest_metrics_get_os_version(session, &result, record->guest_metrics->u.handle);
> +            if (result) {
> +               for (i=0; i<(result->size); i++) {
> +                   if (STREQ(result->contents[i].key, "distro")) {
> +                       if (STREQ(result->contents[i].val, "windows")) {

>Is distro != windows a good indicator for paravirtualization mode? How
>do you detect the case when you have a non-windows system in HVM mode?

As of now, the hypervisor supports only windows in HVM. 

> diff -Nur ./libvirt_org/src/xenapi/xenapi_utils.c ./libvirt/src/xenapi/xenapi_utils.c
> --- ./libvirt_org/src/xenapi/xenapi_utils.c     1970-01-01 01:00:00.000000000 +0100
> +++ ./libvirt/src/xenapi/xenapi_utils.c 2010-02-26 15:49:24.000000000 +0000
> @@ -0,0 +1,433 @@
> +/*
> + * xenapi_utils.c: Xen API driver -- utils parts.
> + * Copyright (C) 2009 Citrix Ltd.
> + * Sharadha Prabhakar <sharadha.prabhakar at citrix.com>
> + */
> +

> +
> +/* converts bitmap to string of the form '1,2...' */
> +char *
> +mapDomainPinVcpu(unsigned int vcpu, unsigned char *cpumap, int maplen)
> +{
> +    char buf[VIR_UUID_BUFLEN], mapstr[sizeof(cpumap_t) * 64];
> +    char *ret=NULL;
> +    int i, j;
> +    mapstr[0] = 0;
> +    for (i = 0; i < maplen; i++) {
> +        for (j = 0; j < 8; j++) {
> +            if (cpumap[i] & (1 << j)) {
> +                snprintf(buf, sizeof(buf), "%d,", (8 * i) + j);
> +                strcat(mapstr, buf);

>Use the virBuffer API instea of snprintf and strcat.

> +           }
> +        }
> +    }
> +    mapstr[strlen(mapstr) - 1] = 0;
> +    snprintf(buf, sizeof(buf), "%d", vcpu);
> +    ret = strdup(mapstr);

>Use virAsprintf instead of snprintf and strdup.

> +    return ret;
> +}
> +

I couldn't find a way to match virBuffer APIs to do the exact operations as
Above. Is there a strcat substitute in virBuffer APIs?


Regards,
Sharadha






More information about the libvir-list mailing list