Sunday, 12 December 2021

software-properties SRU stopped due to odd bug

Hi all,

I have a software-properties SRU [1] in bionic that has phasing stopped due to an error [2].

The stack trace is showing the following (new) code is failing:

    di = distro_info.UbuntuDistroInfo()
    releases = di.get_all(result="object")

with the error:

    AttributeError: 'UbuntuDistroInfo' object has no attribute 'get_all'

This is very confusing, since the code from this (from the distro-info library) is essentially:

    class DistroInfo:
        def get_all(self, result="codename"):
            ...

    class UbuntuDistroInfo(DistroInfo):
        def __init__(self):
            super().__init__("Ubuntu")

i.e. I can't see any reason why the `di` object would not have a get_all() method. Running software-properties and various test scripts on a bionic VM I haven't been able to reproduce any such issues.

Theories that have been proposed:
- The user is actually running an older version of disto-info that was from before this method was added (in distro-info 0.15).
  - Seems unlikely since there are error cases in which the install was done with a bionic image.
- The user has a locally installed version of distro-info.
  - Stacktraces shows the system installed version, the appropriate version of the binary installed, no PYTHONPATH set.
- A .pyc is being used that doesn't match the source.
  - Since installs have been from bionic media, it seems impossible that an older .pyc could be created.
- Other code has removed this method.
  - Method is being accessed immediately, no other code seen in source that could do this.
- Memory corruption.
 - Too many cases for error to be random, not seeing other similar issues.

Does anyone have any ideas about what might be going on?

--Robert