unhandled exceptions in virtualization test when unable to download cloud image

Bug #1306763 reported by Jeff Lane 
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Checkbox Provider - Base
Fix Released
High
Daniel Manrique

Bug Description

Tester did not have a local cloud image copy, and did not specify one in the config file. When the virtualization test ran, the results were tracebacks and unhandled exception errors:

Executing KVM Test
WARNING:root:Invalid or Empty timeout in config file. Falling back to default
DEBUG:root:Starting KVM Test
DEBUG:root:No image specified, downloading one now.
DEBUG:root:Downloading trusty-server-cloudimg-i386-disk1.img, from http://cloud-images.ubuntu.com
Traceback (most recent call last):
  File "/usr/lib/python3.4/urllib/request.py", line 1235, in do_open
    h.request(req.get_method(), req.selector, req.data, headers)
  File "/usr/lib/python3.4/http/client.py", line 1066, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python3.4/http/client.py", line 1104, in _send_request
    self.endheaders(body)
  File "/usr/lib/python3.4/http/client.py", line 1062, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python3.4/http/client.py", line 907, in _send_output
    self.send(msg)
  File "/usr/lib/python3.4/http/client.py", line 842, in send
    self.connect()
  File "/usr/lib/python3.4/http/client.py", line 820, in connect
    self.timeout, self.source_address)
  File "/usr/lib/python3.4/socket.py", line 509, in create_connection
    raise err
  File "/usr/lib/python3.4/socket.py", line 500, in create_connection
    sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/share/checkbox/scripts/virtualization", line 340, in <module>
    main()
  File "/usr/share/checkbox/scripts/virtualization", line 337, in main
    args.func(args)
  File "/usr/share/checkbox/scripts/virtualization", line 298, in test_kvm
    result = kvm_test.start()
  File "/usr/share/checkbox/scripts/virtualization", line 210, in start
    self.image = self.download_image()
  File "/usr/share/checkbox/scripts/virtualization", line 84, in download_image
    resp = urllib.request.urlretrieve(image_url, cloud_iso)
  File "/usr/lib/python3.4/urllib/request.py", line 178, in urlretrieve
    with contextlib.closing(urlopen(url, data)) as fp:
  File "/usr/lib/python3.4/urllib/request.py", line 153, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib/python3.4/urllib/request.py", line 455, in open
    response = self._open(req, data)
  File "/usr/lib/python3.4/urllib/request.py", line 473, in _open
    '_open', req)
  File "/usr/lib/python3.4/urllib/request.py", line 433, in _call_chain
    result = func(*args)
  File "/usr/lib/python3.4/urllib/request.py", line 1261, in http_open
    return self.do_open(http.client.HTTPConnection, req)
  File "/usr/lib/python3.4/urllib/request.py", line 1238, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 110] Connection timed out>
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 68, in apport_excepthook
    binary = os.path.realpath(os.path.join(os.getcwd(), sys.argv[0]))
FileNotFoundError: [Errno 2] No such file or directory

Original exception was:
Traceback (most recent call last):
  File "/usr/lib/python3.4/urllib/request.py", line 1235, in do_open
    h.request(req.get_method(), req.selector, req.data, headers)
  File "/usr/lib/python3.4/http/client.py", line 1066, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python3.4/http/client.py", line 1104, in _send_request
    self.endheaders(body)
  File "/usr/lib/python3.4/http/client.py", line 1062, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python3.4/http/client.py", line 907, in _send_output
    self.send(msg)
  File "/usr/lib/python3.4/http/client.py", line 842, in send
    self.connect()
  File "/usr/lib/python3.4/http/client.py", line 820, in connect
    self.timeout, self.source_address)
  File "/usr/lib/python3.4/socket.py", line 509, in create_connection
    raise err
  File "/usr/lib/python3.4/socket.py", line 500, in create_connection
    sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/share/checkbox/scripts/virtualization", line 340, in <module>
    main()
  File "/usr/share/checkbox/scripts/virtualization", line 337, in main
    args.func(args)
  File "/usr/share/checkbox/scripts/virtualization", line 298, in test_kvm
    result = kvm_test.start()
  File "/usr/share/checkbox/scripts/virtualization", line 210, in start
    self.image = self.download_image()
  File "/usr/share/checkbox/scripts/virtualization", line 84, in download_image
    resp = urllib.request.urlretrieve(image_url, cloud_iso)
  File "/usr/lib/python3.4/urllib/request.py", line 178, in urlretrieve
    with contextlib.closing(urlopen(url, data)) as fp:
  File "/usr/lib/python3.4/urllib/request.py", line 153, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib/python3.4/urllib/request.py", line 455, in open
    response = self._open(req, data)
  File "/usr/lib/python3.4/urllib/request.py", line 473, in _open
    '_open', req)
  File "/usr/lib/python3.4/urllib/request.py", line 433, in _call_chain
    result = func(*args)
  File "/usr/lib/python3.4/urllib/request.py", line 1261, in http_open
    return self.do_open(http.client.HTTPConnection, req)
  File "/usr/lib/python3.4/urllib/request.py", line 1238, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 110] Connection timed out>

Related branches

Revision history for this message
Daniel Manrique (roadmr) wrote :

This is probably caused by connection wonkiness; the script is trying to download a cloudimage but running into a timeout:

urllib.error.URLError: <urlopen error [Errno 110] Connection timed out>

The root cause of this is the connection trouble; I suggest the user try to download the given URL manually to diagnose things:

trusty-server-cloudimg-i386-disk1.img, from http://cloud-images.ubuntu.com

Of course, the traces are ugly and make users unhappy :( in our code, the problem is that we're not catching the URLError exception that urlretrieve can raise. We can add that exception to the list in line 85 of the script to at least result in a friendly error message and clean failure, rather than end-of-the-world as it is now.

Changed in plainbox-provider-checkbox:
status: New → Triaged
importance: Undecided → High
Changed in checkbox:
status: New → Triaged
importance: Undecided → High
Daniel Manrique (roadmr)
Changed in plainbox-provider-checkbox:
status: Triaged → In Progress
assignee: nobody → Daniel Manrique (roadmr)
Zygmunt Krynicki (zyga)
Changed in plainbox-provider-checkbox:
status: In Progress → Fix Committed
no longer affects: checkbox
Daniel Manrique (roadmr)
Changed in plainbox-provider-checkbox:
status: Fix Committed → Fix Released
milestone: none → 0.5
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.