Error from websocket if machine has no disks

Bug #1952216 reported by Alberto Donato
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
MAAS
Fix Released
High
Alberto Donato

Bug Description

If a machine has no disks, the node websocket raises and error as it tries to access the ID for the boot disk.

2021-11-25 10:17:23 maasserver.listener: [critical] Failure while handling notification to 'machine': 'kgpthr'
        Traceback (most recent call last):
          File "/snap/maas/x5/usr/lib/python3/dist-packages/twisted/internet/defer.py", line 501, in errback
            self._startRunCallbacks(fail)
          File "/snap/maas/x5/usr/lib/python3/dist-packages/twisted/internet/defer.py", line 568, in _startRunCallbacks
            self._runCallbacks()
          File "/snap/maas/x5/usr/lib/python3/dist-packages/twisted/internet/defer.py", line 654, in _runCallbacks
            current.result = callback(current.result, *args, **kw)
          File "/snap/maas/x5/usr/lib/python3/dist-packages/twisted/internet/defer.py", line 1475, in gotResult
            _inlineCallbacks(r, g, status)
        --- <exception caught here> ---
          File "/snap/maas/x5/usr/lib/python3/dist-packages/twisted/internet/defer.py", line 1416, in _inlineCallbacks
            result = result.throwExceptionIntoGenerator(g)
          File "/snap/maas/x5/usr/lib/python3/dist-packages/twisted/python/failure.py", line 491, in throwExceptionIntoGenerator
            return g.throw(self.type, self.value, self.tb)
          File "/snap/maas/x5/lib/python3.8/site-packages/maasserver/websockets/protocol.py", line 454, in onNotify
            data = yield deferToDatabase(
          File "/snap/maas/x5/usr/lib/python3/dist-packages/twisted/python/threadpool.py", line 250, in inContext
            result = inContext.theWork()
          File "/snap/maas/x5/usr/lib/python3/dist-packages/twisted/python/threadpool.py", line 266, in <lambda>
            inContext.theWork = lambda: context.call(ctx, func, *args, **kw)
          File "/snap/maas/x5/usr/lib/python3/dist-packages/twisted/python/context.py", line 122, in callWithContext
            return self.currentContext().callWithContext(ctx, func, *args, **kw)
          File "/snap/maas/x5/usr/lib/python3/dist-packages/twisted/python/context.py", line 85, in callWithContext
            return func(*args,**kw)
          File "/snap/maas/x5/lib/python3.8/site-packages/provisioningserver/utils/twisted.py", line 870, in callInContext
            return func(*args, **kwargs)
          File "/snap/maas/x5/lib/python3.8/site-packages/provisioningserver/utils/twisted.py", line 202, in wrapper
            result = func(*args, **kwargs)
          File "/snap/maas/x5/lib/python3.8/site-packages/maasserver/utils/orm.py", line 756, in call_within_transaction
            return func_outside_txn(*args, **kwargs)
          File "/snap/maas/x5/lib/python3.8/site-packages/maasserver/utils/orm.py", line 559, in retrier
            return func(*args, **kwargs)
          File "/usr/lib/python3.8/contextlib.py", line 75, in inner
            return func(*args, **kwds)
          File "/snap/maas/x5/lib/python3.8/site-packages/maasserver/websockets/protocol.py", line 463, in processNotify
            return handler.on_listen(channel, action, obj_id)
          File "/snap/maas/x5/lib/python3.8/site-packages/maasserver/websockets/base.py", line 630, in on_listen
            return self.on_listen_for_active_pk(action, pk, obj)
          File "/snap/maas/x5/lib/python3.8/site-packages/maasserver/websockets/handlers/node.py", line 531, in on_listen_for_active_pk
            return super().on_listen_for_active_pk(action, pk, obj)
          File "/snap/maas/x5/lib/python3.8/site-packages/maasserver/websockets/base.py", line 653, in on_listen_for_active_pk
            self.full_dehydrate(obj, for_list=False),
          File "/snap/maas/x5/lib/python3.8/site-packages/maasserver/websockets/base.py", line 231, in full_dehydrate
            return self.dehydrate(obj, data, for_list=for_list)
          File "/snap/maas/x5/lib/python3.8/site-packages/maasserver/websockets/handlers/machine.py", line 267, in dehydrate
            data = super().dehydrate(obj, data, for_list=for_list)
          File "/snap/maas/x5/lib/python3.8/site-packages/maasserver/websockets/handlers/node.py", line 354, in dehydrate
            data["disks"] = sorted(
          File "/snap/maas/x5/lib/python3.8/site-packages/maasserver/websockets/handlers/node.py", line 357, in <genexpr>
            self.dehydrate_blockdevice(blockdevice, obj)
          File "/snap/maas/x5/lib/python3.8/site-packages/maasserver/websockets/handlers/node.py", line 548, in dehydrate_blockdevice
            is_boot = blockdevice.id == obj.get_boot_disk().id
        builtins.AttributeError: 'NoneType' object has no attribute 'id'

Related branches

Alberto Donato (ack)
Changed in maas:
status: New → Triaged
importance: Undecided → Medium
milestone: none → next
summary: - Erorr from websocket if machine has no disks
+ Error from websocket if machine has no disks
Changed in maas:
importance: Medium → High
milestone: next → 3.2.0
Alberto Donato (ack)
Changed in maas:
status: Triaged → In Progress
assignee: nobody → Alberto Donato (ack)
Changed in maas:
status: In Progress → Fix Committed
Changed in maas:
milestone: 3.2.0 → 3.2.0-beta5
status: Fix Committed → Fix Released
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.