[libvirt] libvirt will wait 20 minutes or hang when the network interface down

Michal Privoznik mprivozn at redhat.com
Mon Dec 24 08:56:41 UTC 2012


On 22.12.2012 09:59, Benjamin Wang (gendwang) wrote:
> Hi,
> 
>   I find that when the network interface is down. In most scenarios, the
> libvirt will wait 20 minutes and report the exception. In seldom
> scenarios, the polling
> 
> thread will hang even if the network is recovered.
> 
> The following is the formal description from libcurl website:
> 
> http://curl.haxx.se/docs/faq.html  (Section “4.19 Why doesn't cURL
> return an error when the network cable is unplugged?”)
> 
> The following is the similar case about thread hand:
> 
> http://curl.haxx.se/mail/lib-2010-07/0108.html
> 
>  
> 
> For “wait 20 minutes”, although this is the TCP normal mechanism, but if
> a server manages tons of thousands of devices by libvirt. When 1000
> devices are down,
> 
> This could cause thread leak for a long period.
> 
> For thread hang, this could cause thread leak forever.
> 
>  
> 
> I tried to add the following codes in esx_vi.c. It seems that these code
> can avoid the above issues. Would you give your comments?
> 
>  
> 
>     *if*(curl->headers == NULL) {
> 
>         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> 
>                        _("Could not build CURL header list"));
> 
>         *return*-1;
> 
>     }
> 
>  
> 
> +    curl_easy_setopt(curl->handle, CURLOPT_LOW_SPEED_LIMIT, 10);
> 
> +    curl_easy_setopt(curl->handle, CURLOPT_LOW_SPEED_TIME, 120);
> 
>  
> 
>     curl_easy_setopt(curl->handle, CURLOPT_USERAGENT, "_libvirt_-_esx_");
> 
>     curl_easy_setopt(curl->handle, CURLOPT_HEADER, 0);
> 
>     curl_easy_setopt(curl->handle, CURLOPT_FOLLOWLOCATION, 0);
> 
> curl_easy_setopt(curl->handle, CURLOPT_SSL_VERIFYPEER,
> 
>  
> 
>  
> 
> B.R.
> 
> Benjamin Wang
> 

I wonder if this isn't a curl bug actually since it (must) know
interface's down. That is, i think curl_easy_perform() which is wrapped
in esxVI_CURL_Perform() should have returned an error.

Michal




More information about the libvir-list mailing list