)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"4cdd541fc56ffb1f277f66d1ba148b01e73ec895","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Delete network namespace on last port deletion"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A recent change broke network namespace deletion, it"},{"line_number":10,"context_line":"currently will not happen until all DHCP ports an agent"},{"line_number":11,"context_line":"is hosting are deleted. Since an agent can handle multiple"},{"line_number":12,"context_line":"networks that correspond to a unique namespace, track"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"6da73f2e_4922ff86","line":9,"updated":"2023-04-11 08:56:44.000000000","message":"Adding small comment on how you fix the bug help reviewer :-)","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"165a9879a297978c3d9a33bd9b8f916b37ce1994","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Delete network namespace on last port deletion"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A recent change broke network namespace deletion, it"},{"line_number":10,"context_line":"currently will not happen until all DHCP ports an agent"},{"line_number":11,"context_line":"is hosting are deleted. Since an agent can handle multiple"},{"line_number":12,"context_line":"networks that correspond to a unique namespace, track"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7416ca59_059475c3","line":9,"in_reply_to":"2731a543_131c5211","updated":"2023-04-12 08:01:12.000000000","message":"I think we should describe the bug a bit and explain how you fix it. Just suggestion :-)\n\nThe change should be backported as-well","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3c5fcc70cd818cb3864dcebfec326186b6f6905d","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Delete network namespace on last port deletion"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A recent change broke network namespace deletion, it"},{"line_number":10,"context_line":"currently will not happen until all DHCP ports an agent"},{"line_number":11,"context_line":"is hosting are deleted. Since an agent can handle multiple"},{"line_number":12,"context_line":"networks that correspond to a unique namespace, track"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"2731a543_131c5211","line":9,"in_reply_to":"6da73f2e_4922ff86","updated":"2023-04-11 18:20:28.000000000","message":"I thought I did in the next sentence? I can change the order I guess.","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e06aecd7328cd2d5fb4fff3764c3eeb43dac6ae8","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Delete network namespace on last port deletion"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A recent change broke network namespace deletion, it"},{"line_number":10,"context_line":"currently will not happen until all DHCP ports an agent"},{"line_number":11,"context_line":"is hosting are deleted. Since an agent can handle multiple"},{"line_number":12,"context_line":"networks that correspond to a unique namespace, track"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3e0435ba_de1c063c","line":9,"in_reply_to":"7416ca59_059475c3","updated":"2023-04-12 14:21:38.000000000","message":"Done","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"4cdd541fc56ffb1f277f66d1ba148b01e73ec895","unresolved":true,"context_lines":[{"line_number":14,"context_line":"last port on that network is removed."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Broken by"},{"line_number":17,"context_line":"https://review.opendev.org/c/openstack/neutron/+/840421"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Closes-bug: #2015388"},{"line_number":20,"context_line":"Change-Id: I36991328cabcbd6fa473b8d1d140ba88c774fb23"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"41aa8bf3_513b0417","line":17,"updated":"2023-04-11 08:56:44.000000000","message":"I think it\u0027s better to avoid using web reference and use commit id when possible. That helps when working locally.\n\n(commit: d1c2d2c4fee0844f1081ff501a43939cc988c943)","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3c5fcc70cd818cb3864dcebfec326186b6f6905d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"last port on that network is removed."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Broken by"},{"line_number":17,"context_line":"https://review.opendev.org/c/openstack/neutron/+/840421"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Closes-bug: #2015388"},{"line_number":20,"context_line":"Change-Id: I36991328cabcbd6fa473b8d1d140ba88c774fb23"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"038d445e_d2586a9c","line":17,"in_reply_to":"41aa8bf3_513b0417","updated":"2023-04-11 18:20:28.000000000","message":"Either one should work, gerrit turns the commit ID into a hyperlink too, and since we prefer things like Depends-on to use a link and not commit ID I\u0027ll leave this alone.","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"4cdd541fc56ffb1f277f66d1ba148b01e73ec895","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4f5aff40_9aae0aaa","updated":"2023-04-11 08:56:44.000000000","message":"Thanks a lot Brian for your work I\u0027m with you considering that change that you shared is probably the cause of the bug reported.\n\nBut I get your fix, now you will remove namespace even if a network still need it.","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"165a9879a297978c3d9a33bd9b8f916b37ce1994","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4f42165b_f2fe8620","updated":"2023-04-12 08:01:12.000000000","message":"Thanks a lot for the fix ++","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e06aecd7328cd2d5fb4fff3764c3eeb43dac6ae8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"6810fdb2_487d5b48","updated":"2023-04-12 14:21:38.000000000","message":"This needs to go to 2023.1 as that seems to be the only place the related change landed.","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"066602e3422cc069eb29e543f63981d60bdee4cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"d908c123_596643e1","updated":"2023-06-01 09:46:51.000000000","message":"Thanks, looks and works ok","commit_id":"ce7c73337de2ae7c44c88eda659f221370632727"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e8faf4fcf6b39e4a8f805f5b9a592d1d2a35797e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"e936873f_f86e7c07","updated":"2023-04-12 17:59:31.000000000","message":"recheck mirror issue","commit_id":"ce7c73337de2ae7c44c88eda659f221370632727"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"73a559605a8d96ed03dc31b4a6b5d7916a2e5b6d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4c50df90_08236e12","updated":"2023-06-22 19:27:56.000000000","message":"recheck TIMED_OUT","commit_id":"dfe29e676002da04d46314ec1aa22054664ad2b4"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c9a946145cfc3f209cba41be3d4496b0e13f29d6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b8fdc345_7f19d115","updated":"2023-06-28 02:34:26.000000000","message":"recheck post failure","commit_id":"dfe29e676002da04d46314ec1aa22054664ad2b4"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"38afaa81d46bc2935bbecf10cf4fb15cf28b0228","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"bde6df3b_e734bedb","updated":"2023-06-27 14:42:26.000000000","message":"recheck unrelated failure","commit_id":"dfe29e676002da04d46314ec1aa22054664ad2b4"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"46a25dbc7c57914e5189f829021edab15324ee06","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1455a549_cd20468a","updated":"2023-06-27 19:54:57.000000000","message":"recheck unrelated test_get_all_devices failure","commit_id":"dfe29e676002da04d46314ec1aa22054664ad2b4"}],"neutron/agent/linux/dhcp.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"4cdd541fc56ffb1f277f66d1ba148b01e73ec895","unresolved":true,"context_lines":[{"line_number":244,"context_line":"class DhcpLocalProcess(DhcpBase, metaclass\u003dabc.ABCMeta):"},{"line_number":245,"context_line":"    PORTS \u003d []"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    # Track running interfaces, indexed by network ID."},{"line_number":248,"context_line":"    _interfaces \u003d {}"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def __init__(self, conf, network, process_monitor, version\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"11807441_d5df9002","line":247,"updated":"2023-04-11 08:56:44.000000000","message":"You switched from a simple set to a structure {net-id: set(), ...} Can you update the comment to add reference of that new data-structure?","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3c5fcc70cd818cb3864dcebfec326186b6f6905d","unresolved":true,"context_lines":[{"line_number":244,"context_line":"class DhcpLocalProcess(DhcpBase, metaclass\u003dabc.ABCMeta):"},{"line_number":245,"context_line":"    PORTS \u003d []"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    # Track running interfaces, indexed by network ID."},{"line_number":248,"context_line":"    _interfaces \u003d {}"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def __init__(self, conf, network, process_monitor, version\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"6725d2b0_19620eb9","line":247,"in_reply_to":"11807441_d5df9002","updated":"2023-04-11 18:20:28.000000000","message":"I will once we decide this is the best way to fix this :)","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e06aecd7328cd2d5fb4fff3764c3eeb43dac6ae8","unresolved":false,"context_lines":[{"line_number":244,"context_line":"class DhcpLocalProcess(DhcpBase, metaclass\u003dabc.ABCMeta):"},{"line_number":245,"context_line":"    PORTS \u003d []"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    # Track running interfaces, indexed by network ID."},{"line_number":248,"context_line":"    _interfaces \u003d {}"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def __init__(self, conf, network, process_monitor, version\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"2c543194_fbcd80ff","line":247,"in_reply_to":"6725d2b0_19620eb9","updated":"2023-04-12 14:21:38.000000000","message":"Done","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"4cdd541fc56ffb1f277f66d1ba148b01e73ec895","unresolved":true,"context_lines":[{"line_number":384,"context_line":"                        self.interface_name)"},{"line_number":385,"context_line":"        # Delete namespace only if there are no running interfaces in it,"},{"line_number":386,"context_line":"        # which covers the case where a network has multiple segmentation ids."},{"line_number":387,"context_line":"        if not self._has_running_interfaces(self.network.id):"},{"line_number":388,"context_line":"            try:"},{"line_number":389,"context_line":"                ip_lib.delete_network_namespace(self.network.namespace)"},{"line_number":390,"context_line":"            except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"0d869f2f_cd52dfd6","line":387,"updated":"2023-04-11 08:56:44.000000000","message":"Hum... So with multisegements we have more than one networks per namespace,if you do that you will will be in that situation to remove a namespace that is used by an other network, I do I\u0027m missing something?","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3c5fcc70cd818cb3864dcebfec326186b6f6905d","unresolved":true,"context_lines":[{"line_number":384,"context_line":"                        self.interface_name)"},{"line_number":385,"context_line":"        # Delete namespace only if there are no running interfaces in it,"},{"line_number":386,"context_line":"        # which covers the case where a network has multiple segmentation ids."},{"line_number":387,"context_line":"        if not self._has_running_interfaces(self.network.id):"},{"line_number":388,"context_line":"            try:"},{"line_number":389,"context_line":"                ip_lib.delete_network_namespace(self.network.namespace)"},{"line_number":390,"context_line":"            except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ce621fc5_67516fe0","line":387,"in_reply_to":"0d869f2f_cd52dfd6","updated":"2023-04-11 18:20:28.000000000","message":"So I could have this wrong, maybe you can explain more what to expect with a multi-segment setup? For example what info would be passed here or in enable()?\n\nSince the namespace name is constructed based on the network ID, what does this look like with multi-segment? From what I could tell, in DeviceManager.setup() the segment ID isn\u0027t used for the namespace, just network.namespace.\n\nJust to describe the issue I was seeing, with just a single list for interface names, the dhcp-agent had all in a single list, so deleting the only one in a namespace still left some in the list, so the namespace never gets removed.","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"165a9879a297978c3d9a33bd9b8f916b37ce1994","unresolved":true,"context_lines":[{"line_number":384,"context_line":"                        self.interface_name)"},{"line_number":385,"context_line":"        # Delete namespace only if there are no running interfaces in it,"},{"line_number":386,"context_line":"        # which covers the case where a network has multiple segmentation ids."},{"line_number":387,"context_line":"        if not self._has_running_interfaces(self.network.id):"},{"line_number":388,"context_line":"            try:"},{"line_number":389,"context_line":"                ip_lib.delete_network_namespace(self.network.namespace)"},{"line_number":390,"context_line":"            except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"e4734a1c_bd98adc9","line":387,"in_reply_to":"ce621fc5_67516fe0","updated":"2023-04-12 08:01:12.000000000","message":"You are right it\u0027s my mistake, we have one network and multiple segments. One namespace. I think  I got confused with the change on the structure of _interfaces which now consider there are multiple networks.\n\nRe-thinking it again, I think your change is good. The bug was that, since _interfaces is a class attribute in a situation where they are more that one networks we could expect having the interface of the other network still in its. grouping per networks in the right fix.","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e06aecd7328cd2d5fb4fff3764c3eeb43dac6ae8","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                        self.interface_name)"},{"line_number":385,"context_line":"        # Delete namespace only if there are no running interfaces in it,"},{"line_number":386,"context_line":"        # which covers the case where a network has multiple segmentation ids."},{"line_number":387,"context_line":"        if not self._has_running_interfaces(self.network.id):"},{"line_number":388,"context_line":"            try:"},{"line_number":389,"context_line":"                ip_lib.delete_network_namespace(self.network.namespace)"},{"line_number":390,"context_line":"            except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb2bfd6_51bcf189","line":387,"in_reply_to":"e4734a1c_bd98adc9","updated":"2023-04-12 14:21:38.000000000","message":"Done","commit_id":"fe2031e22520f9e30cdccc1f4b517c6b89e24382"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"fd645fa2cee9705b26875d46641d2c367ad94640","unresolved":true,"context_lines":[{"line_number":270,"context_line":"    def _add_running_interface(cls, interface, network_id):"},{"line_number":271,"context_line":"        \"\"\"Safe method that adds a given interface\"\"\""},{"line_number":272,"context_line":"        if not cls._interfaces.get(network_id):"},{"line_number":273,"context_line":"            cls._interfaces[network_id] \u003d set()"},{"line_number":274,"context_line":"        cls._interfaces[network_id].add(interface)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"5b376f58_795d0b90","line":273,"updated":"2023-06-22 14:47:27.000000000","message":"if You would use https://docs.python.org/3/library/collections.html#collections.defaultdict then this \"if\" wouldn\u0027t be needed here","commit_id":"ce7c73337de2ae7c44c88eda659f221370632727"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8ae56c5ddf7c302451442fb43651cceedbdf707e","unresolved":true,"context_lines":[{"line_number":270,"context_line":"    def _add_running_interface(cls, interface, network_id):"},{"line_number":271,"context_line":"        \"\"\"Safe method that adds a given interface\"\"\""},{"line_number":272,"context_line":"        if not cls._interfaces.get(network_id):"},{"line_number":273,"context_line":"            cls._interfaces[network_id] \u003d set()"},{"line_number":274,"context_line":"        cls._interfaces[network_id].add(interface)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"d1da92cd_520318f0","line":273,"in_reply_to":"5b376f58_795d0b90","updated":"2023-06-22 15:55:10.000000000","message":"Ack, will update. I\u0027ll leave the \u0027del\u0027 on L284.","commit_id":"ce7c73337de2ae7c44c88eda659f221370632727"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2ff1abb4b27ce0eaff05b2e3ff3b2350ec1c4325","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    def _add_running_interface(cls, interface, network_id):"},{"line_number":271,"context_line":"        \"\"\"Safe method that adds a given interface\"\"\""},{"line_number":272,"context_line":"        if not cls._interfaces.get(network_id):"},{"line_number":273,"context_line":"            cls._interfaces[network_id] \u003d set()"},{"line_number":274,"context_line":"        cls._interfaces[network_id].add(interface)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"1866b46f_1881b304","line":273,"in_reply_to":"d1da92cd_520318f0","updated":"2023-06-22 17:43:37.000000000","message":"Done","commit_id":"ce7c73337de2ae7c44c88eda659f221370632727"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6519d6e569e20bc98534837d53972bb4a8e20f1b","unresolved":true,"context_lines":[{"line_number":275,"context_line":"    @classmethod"},{"line_number":276,"context_line":"    def _del_running_interface(cls, interface, network_id):"},{"line_number":277,"context_line":"        \"\"\"Safe method that removes a given interface\"\"\""},{"line_number":278,"context_line":"        if cls._interfaces.get(network_id):"},{"line_number":279,"context_line":"            if interface in cls._interfaces[network_id]:"},{"line_number":280,"context_line":"                cls._interfaces[network_id].remove(interface)"},{"line_number":281,"context_line":"            # no entries, cleanup"}],"source_content_type":"text/x-python","patch_set":4,"id":"0dd474cb_af84ec79","line":278,"range":{"start_line":278,"start_character":8,"end_line":278,"end_character":43},"updated":"2023-06-27 09:53:53.000000000","message":"nit:\n```\n   if not network_id in cls._interfaces:\n       return\n```","commit_id":"dfe29e676002da04d46314ec1aa22054664ad2b4"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"38afaa81d46bc2935bbecf10cf4fb15cf28b0228","unresolved":true,"context_lines":[{"line_number":275,"context_line":"    @classmethod"},{"line_number":276,"context_line":"    def _del_running_interface(cls, interface, network_id):"},{"line_number":277,"context_line":"        \"\"\"Safe method that removes a given interface\"\"\""},{"line_number":278,"context_line":"        if cls._interfaces.get(network_id):"},{"line_number":279,"context_line":"            if interface in cls._interfaces[network_id]:"},{"line_number":280,"context_line":"                cls._interfaces[network_id].remove(interface)"},{"line_number":281,"context_line":"            # no entries, cleanup"}],"source_content_type":"text/x-python","patch_set":4,"id":"dd64041a_f8c70fd4","line":278,"range":{"start_line":278,"start_character":8,"end_line":278,"end_character":43},"in_reply_to":"0dd474cb_af84ec79","updated":"2023-06-27 14:42:26.000000000","message":"I would have changed it, but since I see the backport I\u0027ll just leave alone.","commit_id":"dfe29e676002da04d46314ec1aa22054664ad2b4"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6519d6e569e20bc98534837d53972bb4a8e20f1b","unresolved":true,"context_lines":[{"line_number":285,"context_line":"    @classmethod"},{"line_number":286,"context_line":"    def _has_running_interfaces(cls, network_id):"},{"line_number":287,"context_line":"        \"\"\"Safe method that checks for interfaces\"\"\""},{"line_number":288,"context_line":"        bool(cls._interfaces.get(network_id))"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    @staticmethod"},{"line_number":291,"context_line":"    def get_confs_dir(conf):"}],"source_content_type":"text/x-python","patch_set":4,"id":"8b929232_d94f444c","line":288,"range":{"start_line":288,"start_character":8,"end_line":288,"end_character":45},"updated":"2023-06-27 09:53:53.000000000","message":"nit:\n```\n    network_id in cls._interfaces\n```","commit_id":"dfe29e676002da04d46314ec1aa22054664ad2b4"}]}
