xenapi: stop hang during glance download

It seems there are cases when the server gets stuck in a building state
because the download from glance fails, but the nova-compute doesn't
find out.

After some code inspect, a likely cause seems to related to having no
socket timeout inside urllib2 when we download the image from glance. A
workaround for this issue is to configure the default socket timeout as
described here:
http://docs.python.org/3.1/howto/urllib2.html#sockets-and-layers

Fixes bug 1251650
Change-Id: I8b34d95d3524f3825b28e61cbbb59290653d3711
This commit is contained in:
John Garbutt 2013-11-15 14:46:38 +00:00
parent db86ec9237
commit 89b0d540d5
1 changed files with 8 additions and 0 deletions

View File

@ -22,6 +22,7 @@
import httplib
import md5
import socket
import urllib2
import utils
@ -33,12 +34,19 @@ pluginlib_nova.configure_logging('glance')
logging = pluginlib_nova.logging
PluginError = pluginlib_nova.PluginError
DEFAULT_SOCKET_TIMEOUT_SECONDS = 60
class RetryableError(Exception):
pass
def _download_tarball_and_verify(request, staging_path):
# NOTE(johngarbutt) to ensure the script does not hang
# if we lose connection to glance we add a default socket
# The default is to never timeout.
socket.setdefaulttimeout(DEFAULT_SOCKET_TIMEOUT_SECONDS)
try:
response = urllib2.urlopen(request)
except urllib2.HTTPError, error: