Thanks Daniel for the info.

 

But I still have a question, since we already make the call qemudDomainCreate synced, why do we need to introduce a bitmap to resolve the problem of getting VNC port conflict error? If qemudDomainCreate is synced, then there should not any problem with VNC port.

 

Looking forward to your reply.

 

static virDomainPtr qemudDomainCreate(virConnectPtr conn, const char *xml,

                                      unsigned int flags) {

    struct qemud_driver *driver = conn->privateData;

    virDomainDefPtr def;

    virDomainObjPtr vm = NULL;

    virDomainPtr dom = NULL;

    virDomainEventPtr event = NULL;

 

    virCheckFlags(VIR_DOMAIN_START_PAUSED, NULL);

 

    qemuDriverLock(driver); <==

 

Thanks,

 

Guangya

 

-----Original Message-----
From: Daniel P. Berrange [mailto:berrange@redhat.com]
Sent: Tuesday, November 09, 2010 9:47 PM
To: Guangya Liu
Cc: libvir-list@redhat.com
Subject: Re: [libvirt] race condtion in getting VNC port for libvirt

 

On Sun, Nov 07, 2010 at 08:53:32PM +0800, Guangya Liu wrote:

> Hi,

>

>

> We are encountering a problem of race conditions for getting VNC port

> when VM start up.

>

>

> In a very powerful hypervisor, if we try to start up more than 1 VM

> concurrently, then there might be some VMs failed to start up due to VNC

> port confilict.

>

>

> We searched libvirt bugs and found that some one report the problem and

> we have give a fix, but the fix can not resolve the problem.

>

>

> http://osdir.com/ml/libvir-list/2010-05/msg00530.html

> https://build.opensuse.org/package/view_file?file=vnc-race-3.patch&packa

> ge=libvirt&project=Virtualization:openSUSE11.3

 

This patch is already merged in current GIT repos.

 

> The bitmap test-and-set operation is not atomic, so that there still is

> a time-window in which a VNC port could be reserved for two caller.

 

The virBitmap APIs for getting & setting don't need to be atomic, because

they are only called when the QEMU driver mutex is held, which ensures

serialization of VM startup.

 

Regards,

Daniel

--

|: Red Hat, Engineering, London    -o-   http://people.redhat.com/berrange/ :|

|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :|

|: http://autobuild.org        -o-         http://search.cpan.org/~danberr/ :|

|: GnuPG: 7D3B9505  -o-   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|