Comment 0 for bug 2015286

Revision history for this message
Kiwinote (kiwinote) wrote :

On a fairly standard installation of lunar (ie no Ubuntu Pro linked etc), the update-manager can become a non-functional window when uaclient isn't behaving. This manifests itself in a greyed-out 'checking for updates' window which doesn't respond to any clicks and can only be closed by ending the process in the system-monitor.

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/UpdateManager/backend/InstallBackendAptdaemon.py", line 529, in _on_finished
    self._action_done(
  File "/usr/lib/python3/dist-packages/UpdateManager/backend/__init__.py", line 414, in _action_done
    self.window_main.start_available()
  File "/usr/lib/python3/dist-packages/UpdateManager/UpdateManager.py", line 244, in start_available
    self.refresh_cache()
  File "/usr/lib/python3/dist-packages/UpdateManager/UpdateManager.py", line 456, in refresh_cache
    self._get_ua_security_status()
  File "/usr/lib/python3/dist-packages/UpdateManager/UpdateManager.py", line 280, in _get_ua_security_status
    update_result = updates()
                    ^^^^^^^^^
  File "/usr/lib/python3/dist-packages/uaclient/api/u/pro/packages/updates/v1.py", line 84, in updates
    return _updates(UAConfig())
           ^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/uaclient/api/u/pro/packages/updates/v1.py", line 88, in _updates
    ua_info = get_ua_info(cfg)
              ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/uaclient/security_status.py", line 195, in get_ua_info
    status_dict = status(cfg=cfg, show_all=True)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/uaclient/status.py", line 380, in status
    response = _unattached_status(cfg)
               ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/uaclient/status.py", line 246, in _unattached_status
    resources = get_available_resources(cfg)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/uaclient/contract.py", line 624, in get_available_resources
    resources = client.request_resources()
                ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/uaclient/contract.py", line 71, in request_resources
    resource_response, headers = self.request_url(
                                 ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/uaclient/serviceclient.py", line 73, in request_url
    response, headers = util.readurl(
                        ^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/uaclient/util.py", line 322, in readurl
    resp = request.urlopen(req, timeout=timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/urllib/request.py", line 216, in urlopen
    return opener.open(url, data, timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/urllib/request.py", line 519, in open
    response = self._open(req, data)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/urllib/request.py", line 536, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/urllib/request.py", line 496, in _call_chain
    result = func(*args)
             ^^^^^^^^^^^
  File "/usr/lib/python3.11/urllib/request.py", line 1391, in https_open
    return self.do_open(http.client.HTTPSConnection, req,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/urllib/request.py", line 1352, in do_open
    r = h.getresponse()
        ^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/http/client.py", line 1374, in getresponse
    response.begin()
  File "/usr/lib/python3.11/http/client.py", line 318, in begin
    version, status, reason = self._read_status()
                              ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/http/client.py", line 279, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/socket.py", line 706, in readinto
    return self._sock.recv_into(b)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/ssl.py", line 1278, in recv_into
    return self.read(nbytes, buffer)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/ssl.py", line 1134, in read
    return self._sslobj.read(len, buffer)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TimeoutError: The read operation timed out

In my opinion any misbehaving of the Ubuntu Pro integration in update-manager (in this specific case probably a 'temporary' server issue) shouldn't cause update-manager to become dysfunctional, especially to those not subscribed to Ubuntu Pro.

I have recently seen:
- update-manager unable to install updates for over a month ( LP: #2008280 )
- this issue,
- if you turn wi-fi off and open update-manager, then after clicking ok the update-manager window becomes unresponsive ( LP: #2015113 )
- and undoubtedly there are others to come as this is all without uaclient needing to do anything (ie I have no subscription and lunar is not yet released)

Please consider how you might make the integration of Ubuntu Pro into update-manager more robust, so that any issues in uaclient don't stop update-manager from functioning correctly. (ie presumably using a try/except around the uaclient call is not unreasonable - you might loose track of any errors that are occurring, but keeping update-manager working (aka allowing people to install their system updates) is a much higher priority)

Thanks