Unable to delete old (unused) network interface

Description

When trying to delete an old network interface I get the following error.


Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/middlewared/main.py", line 208, in call_method
result = await self.middleware.call_with_audit(message['method'], serviceobj, methodobj, params, self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1526, in call_with_audit
result = await self._call(method, serviceobj, methodobj, params, app=app,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1457, in _call
return await methodobj(*prepared_call.args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/service/crud_service.py", line 250, in delete
return await self.middleware._call(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1457, in _call
return await methodobj(*prepared_call.args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/service/crud_service.py", line 261, in nf
rv = await func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/schema/processor.py", line 179, in nf
return await func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/schema/processor.py", line 49, in nf
res = await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/plugins/network.py", line 1438, in do_delete
await self.delete_network_interface(oid)
File "/usr/lib/python3/dist-packages/middlewared/plugins/network.py", line 1450, in delete_network_interface
await self.delete_network_interface(lagg_member['lagg_physnic'])
File "/usr/lib/python3/dist-packages/middlewared/plugins/network.py", line 1450, in delete_network_interface
await self.delete_network_interface(lagg_member['lagg_physnic'])
File "/usr/lib/python3/dist-packages/middlewared/plugins/network.py", line 1450, in delete_network_interface
await self.delete_network_interface(lagg_member['lagg_physnic'])
[Previous line repeated 949 more times]
File "/usr/lib/python3/dist-packages/middlewared/plugins/network.py", line 1447, in delete_network_interface
for lagg_member in await self.middleware.call(
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1626, in call
return await self._call(
^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1457, in _call
return await methodobj(*prepared_call.args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/schema/processor.py", line 179, in nf
return await func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/plugins/datastore/read.py", line 98, in query
aliases = self._get_queryset_joins(table)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/plugins/datastore/read.py", line 185, in _get_queryset_joins
result.update(self._get_queryset_joins(alias))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/plugins/datastore/read.py", line 175, in _get_queryset_joins
for column in table.c:
^^^^^^^
File "/usr/lib/python3/dist-packages/sqlalchemy/util/langhelpers.py", line 1113, in get
obj.dict[self.name] = result = self.fget(obj)
^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sqlalchemy/sql/selectable.py", line 737, in columns
self._populate_column_collection()
File "/usr/lib/python3/dist-packages/sqlalchemy/sql/selectable.py", line 1643, in _populate_column_collection
self.element._generate_fromclause_column_proxies(self)
File "/usr/lib/python3/dist-packages/sqlalchemy/sql/selectable.py", line 694, in _generate_fromclause_column_proxies
fromclause._columns._populate_separate_keys(
File "/usr/lib/python3/dist-packages/sqlalchemy/sql/base.py", line 1294, in populate_separate_keys
cols = list(iter)
^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sqlalchemy/sql/selectable.py", line 695, in <genexpr>
col._make_proxy(fromclause) for col in self.c
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sqlalchemy/sql/schema.py", line 2086, in _make_proxy
c = self._constructor(
^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/sqlalchemy.py", line 36, in init
super().init(*args, **kwargs)
File "/usr/lib/python3/dist-packages/sqlalchemy/sql/schema.py", line 1767, in init
self._init_items(*args)
File "/usr/lib/python3/dist-packages/sqlalchemy/sql/schema.py", line 144, in _init_items
spwd(self, **kw)
File "/usr/lib/python3/dist-packages/sqlalchemy/sql/base.py", line 1047, in _set_parent_with_dispatch
self._set_parent(parent, **kw)
File "/usr/lib/python3/dist-packages/sqlalchemy/sql/schema.py", line 2577, in _set_parent
self.parent._on_table_attach(self._set_table)
File "/usr/lib/python3/dist-packages/sqlalchemy/sql/schema.py", line 1987, in _on_table_attach
event.listen(self, "after_parent_attach", fn)
File "/usr/lib/python3/dist-packages/sqlalchemy/event/api.py", line 115, in listen
_event_key(target, identifier, fn).listen(*args, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sqlalchemy/event/api.py", line 25, in _event_key
tgt = evt_cls._accept_with(target)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sqlalchemy/event/base.py", line 245, in _accept_with
if hasattr(target, "dispatch"):
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sqlalchemy/event/base.py", line 321, in get
disp = self.dispatch._for_instance(obj)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sqlalchemy/event/base.py", line 127, in _for_instance
return self._for_class(instance_cls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sqlalchemy/event/base.py", line 123, in _for_class
return self.class(self, instance_cls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/sqlalchemy/event/base.py", line 89, in init
self._empty_listeners = self._empty_listener_reg[instance_cls]
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
File "/usr/lib/python3.11/weakref.py", line 415, in getitem
return self.data[ref(key)]
~~~~~~~~~^^^^^^^^^^
RecursionError: maximum recursion depth exceeded in comparison

Steps to Reproduce

Delete NIC from WebUI

Expected Result

None

Actual Result

None

Environment

None

Hardware Health

None

Error Message (if applicable)

Activity

Show:

Bug Clerk December 4, 2024 at 12:40 PM

This issue has now been closed. Comments made after this point may not be viewed by the TrueNAS Teams. Please open a new issue if you have found a problem or need to re-engage with the TrueNAS Engineering Teams.

Bug Clerk December 4, 2024 at 12:39 PM

Bug Clerk December 4, 2024 at 12:36 PM

Bug Clerk December 4, 2024 at 11:33 AM

Bonnie Follweiler November 18, 2024 at 7:04 PM

Good Afternoon .

I have moved this ticket into our queue to review now.
An engineering representative will update with any further questions or details in the near future.

Complete
Pinned fields
Click on the next to a field label to start pinning.

Assignee

Vladimir Vinogradenko

Reporter

Time remaining

0m

Original estimate

Components

Priority

Created November 16, 2024 at 11:14 PM
Updated December 4, 2024 at 12:40 PM
Resolved December 4, 2024 at 12:40 PM