)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b82ffc5b060972a0b0d11f3bfb113c1c60d80e62","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"87313ff0_1a7e468d","updated":"2025-07-21 15:01:40.000000000","message":"Beep Boop, Ironic would like to see this merge. Thanks!","commit_id":"397f48d3101ede51fcc9e7ec7f7460d84328932f"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"fb9d5969b91faeec99500a182ded3faefc042568","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"6db5b0bc_521fa60f","updated":"2025-06-12 14:03:41.000000000","message":"recheck","commit_id":"397f48d3101ede51fcc9e7ec7f7460d84328932f"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"c857104f9efb337793354c41a9f8581c82fe79ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"b5e489c4_1929807b","updated":"2025-06-12 10:16:25.000000000","message":"recheck\n\nopenstack-tox-cover https://zuul.opendev.org/t/openstack/build/a715c5c58301457e8c3687b0f30c0c42 : POST_FAILURE in 46m 51s","commit_id":"397f48d3101ede51fcc9e7ec7f7460d84328932f"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"d3dc5b4fabb181f1f7ef2fcb85644beac9b01294","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"5cef2f21_d623fa09","updated":"2025-06-12 07:21:18.000000000","message":"recheck\n\ntest_reprocess_port_when_ovs_restarts timeout looks unrelated to this change.","commit_id":"397f48d3101ede51fcc9e7ec7f7460d84328932f"}],"neutron/agent/rpc.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b986928b179538da0537b44956a97a795e816913","unresolved":true,"context_lines":[{"line_number":102,"context_line":"            \u0027time\u0027: timeutils.utcnow().strftime(constants.ISO8601_TIME_FORMAT),"},{"line_number":103,"context_line":"        }"},{"line_number":104,"context_line":"        method \u003d cctxt.call if use_call else cctxt.cast"},{"line_number":105,"context_line":"        return method(context, \u0027report_state\u0027, **kwargs)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def get_agents(self, context, **filters):"},{"line_number":108,"context_line":"        cctxt \u003d self.client.prepare(timeout\u003dself.timeout)"}],"source_content_type":"text/x-python","patch_set":8,"id":"8fa3f738_5273cad0","line":105,"updated":"2025-07-25 13:30:45.000000000","message":"So this seems to have broken ironic\u0027s grenade job:\n\nSpecicifically it looks like neutron\u0027s rpc handling doesn\u0027t give any sort of grace here which means the code should have been written a bit more defensively to handle the upgrade step to 1.4.\n\n\nOf course, there was likely no way for the submitter to know that. 😭\n\n\nJul 24 19:21:08.807631 np7c7d473ef1624 neutron-l3-agent[194588]: [\u0027Traceback (most recent call last):\\n\u0027, \u0027  File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_messaging/rpc/server.py\", line 174, in _process_incoming\\n    res \u003d self.dispatcher.dispatch(message)\\n\u0027, \u0027  File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_messaging/rpc/dispatcher.py\", line 320, in dispatch\\n    raise UnsupportedVersion(version, method\u003dmethod)\\n\u0027, \u0027oslo_messaging.rpc.dispatcher.UnsupportedVersion: Endpoint does not support RPC version 1.4. Attempted method: report_state\\n\u0027].\nJul 24 19:21:08.807631 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent Traceback (most recent call last):\nJul 24 19:21:08.807631 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent   File \"/opt/stack/new/neutron/neutron/agent/l3/agent.py\", line 964, in _report_state\nJul 24 19:21:08.807631 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent     agent_status \u003d self.state_rpc.report_state(self.context,\nJul 24 19:21:08.807631 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent   File \"/opt/stack/new/neutron/neutron/agent/rpc.py\", line 105, in report_state\nJul 24 19:21:08.807631 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent     return method(context, \u0027report_state\u0027, **kwargs)\nJul 24 19:21:08.807631 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent   File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_messaging/rpc/client.py\", line 180, in call\nJul 24 19:21:08.807631 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent     result \u003d self.transport._send(\nJul 24 19:21:08.807631 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent   File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_messaging/transport.py\", line 123, in _send\nJul 24 19:21:08.807631 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent     return self._driver.send(target, ctxt, message,\nJul 24 19:21:08.807631 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent   File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_messaging/_drivers/amqpdriver.py\", line 794, in send\nJul 24 19:21:08.807631 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent     return self._send(target, ctxt, message, wait_for_reply, timeout,\nJul 24 19:21:08.808308 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent   File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_messaging/_drivers/amqpdriver.py\", line 786, in _send\nJul 24 19:21:08.808308 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent     raise result\nJul 24 19:21:08.808308 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent oslo_messaging.rpc.client.RemoteError: Remote error: UnsupportedVersion Endpoint does not support RPC version 1.4. Attempted method: report_state\nJul 24 19:21:08.808308 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent [\u0027Traceback (most recent call last):\\n\u0027, \u0027  File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_messaging/rpc/server.py\", line 174, in _process_incoming\\n    res \u003d self.dispatcher.dispatch(message)\\n\u0027, \u0027  File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_messaging/rpc/dispatcher.py\", line 320, in dispatch\\n    raise UnsupportedVersion(version, method\u003dmethod)\\n\u0027, \u0027oslo_messaging.rpc.dispatcher.UnsupportedVersion: Endpoint does not support RPC version 1.4. Attempted method: report_state\\n\u0027].\nJul 24 19:21:08.808308 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent \nJul 24 19:21:08.808308 np7c7d473ef1624 neutron-l3-agent[194588]: DEBUG oslo.service.backend.threading.loopingcall [-] Fixed interval looping call \u0027neutron.agent.l3.agent.L3NATAgentWithStateReport._report_state\u0027 sleeping for 29.50 seconds {{(pid\u003d194588) _run_loop /opt/stack/data/venv/lib/python3.10/site-packages/oslo_service/backend/threading/loopingcall.py:165}}\nJul 24 19:21:08.832484 np7c7d473ef1624 neutron-l3-agent[194588]: ERROR neutron.agent.l3.agent [-] Failed reporting state!: oslo_messaging.rpc.client.RemoteError: Remote error: UnsupportedVersion Endpoint does not support RPC version 1.4. Attempted method: report_state","commit_id":"397f48d3101ede51fcc9e7ec7f7460d84328932f"}],"neutron/db/agents_db.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"360377b34e54e5a381904bd4b8e4d2d7b630dc74","unresolved":true,"context_lines":[{"line_number":469,"context_line":"        1.1 - report_state now returns agent state."},{"line_number":470,"context_line":"        1.2 - add method has_alive_neutron_server."},{"line_number":471,"context_line":"        1.3 - has_alive_neutron_server tests db connection."},{"line_number":472,"context_line":"        1.4 - add get_agents method, report_state may delete agent"},{"line_number":473,"context_line":"    \"\"\""},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"    target \u003d oslo_messaging.Target(version\u003d\u00271.4\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"c59bf167_2fcab329","line":472,"range":{"start_line":472,"start_character":18,"end_line":472,"end_character":28},"updated":"2025-05-22 15:03:20.000000000","message":"I have some questions related to this method and [1]:\n* Why should we send information of any other agent?\n* Why the ironic agent is updating (deleting) the information of other agents? That belongs to the API, a maintenance method or a periodic task.\n\n[1]https://review.opendev.org/c/openstack/networking-baremetal/+/945500/2/networking_baremetal/agent/ironic_neutron_agent.py","commit_id":"53b68ffab90615fc5ded0a0d10857789bf4144c8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9a86fe2d11c5e7e1db632b562c6c134e7c74e303","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        1.1 - report_state now returns agent state."},{"line_number":470,"context_line":"        1.2 - add method has_alive_neutron_server."},{"line_number":471,"context_line":"        1.3 - has_alive_neutron_server tests db connection."},{"line_number":472,"context_line":"        1.4 - add get_agents method, report_state may delete agent"},{"line_number":473,"context_line":"    \"\"\""},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"    target \u003d oslo_messaging.Target(version\u003d\u00271.4\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"dd87de88_93394f94","line":472,"range":{"start_line":472,"start_character":18,"end_line":472,"end_character":28},"in_reply_to":"28d5a773_e915b4a8","updated":"2025-05-29 14:20:11.000000000","message":"Ok, now I see better the architecture. I didn\u0027t know that there is actually one single agent reporting not the state of the current host but the baremetal nodes. In that case it makes sense.","commit_id":"53b68ffab90615fc5ded0a0d10857789bf4144c8"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"2c07fc3c7c523c6d1353a1e02e9138d0af292bc1","unresolved":true,"context_lines":[{"line_number":469,"context_line":"        1.1 - report_state now returns agent state."},{"line_number":470,"context_line":"        1.2 - add method has_alive_neutron_server."},{"line_number":471,"context_line":"        1.3 - has_alive_neutron_server tests db connection."},{"line_number":472,"context_line":"        1.4 - add get_agents method, report_state may delete agent"},{"line_number":473,"context_line":"    \"\"\""},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"    target \u003d oslo_messaging.Target(version\u003d\u00271.4\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"28d5a773_e915b4a8","line":472,"range":{"start_line":472,"start_character":18,"end_line":472,"end_character":28},"in_reply_to":"c59bf167_2fcab329","updated":"2025-05-22 17:41:58.000000000","message":"The agent for ironic is a little different. With ironic we don\u0027t run agents on each baremetal node, because what i running on the baremetal node is a tenant workload e.g. \"nova instance\". The ironic_neutron_agent run\u0027s as a service and it is responsible for create/report_state of all nodes enrolled in ironic. Each node enrolled in ironic is/has an agent on the neutron side. All these agents are managed by one process/service: ironic_neutron_agent.py. It is not updating/deleting \"other\" agents, it is doing updated/delete on one of many agents being managed by a single process/service.","commit_id":"53b68ffab90615fc5ded0a0d10857789bf4144c8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9a86fe2d11c5e7e1db632b562c6c134e7c74e303","unresolved":true,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        Returns - agent\u0027s status: AGENT_NEW, AGENT_REVIVED, AGENT_ALIVE"},{"line_number":512,"context_line":"        \"\"\""},{"line_number":513,"context_line":"        agent_state \u003d kwargs[\u0027agent_state\u0027][\u0027agent_state\u0027]"},{"line_number":514,"context_line":"        action \u003d agent_state.pop(\u0027action\u0027, \u0027update\u0027)"},{"line_number":515,"context_line":"        if action \u003d\u003d \u0027delete\u0027:"},{"line_number":516,"context_line":"            agent \u003d agent_obj.Agent.get_object("},{"line_number":517,"context_line":"                context, host\u003dagent_state[\u0027host\u0027],"},{"line_number":518,"context_line":"                agent_type\u003dagent_state[\u0027agent_type\u0027])"},{"line_number":519,"context_line":"            if not agent:"},{"line_number":520,"context_line":"                LOG.debug(\"Agent with %s type for %s host was already removed\","},{"line_number":521,"context_line":"                          kwargs[\u0027agent_type\u0027], kwargs[\u0027host\u0027])"},{"line_number":522,"context_line":"                return"},{"line_number":523,"context_line":"            agent.delete()"},{"line_number":524,"context_line":"            return"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"        time \u003d kwargs[\u0027time\u0027]"},{"line_number":527,"context_line":"        time \u003d timeutils.parse_strtime(time)"}],"source_content_type":"text/x-python","patch_set":3,"id":"efaafe0b_4f0a3ba8","line":524,"range":{"start_line":513,"start_character":8,"end_line":524,"end_character":18},"updated":"2025-05-29 14:20:11.000000000","message":"You are updating the RPC API in this patch. Now you are going to need to bump both the server and the agent, instead of overloading the usage of \"report_state\", I would implement a \"delete_agent\" method.\n\nThe RPC actions should be auto-descriptive; deleting an agent in a \"report_state\" call is weird.","commit_id":"53b68ffab90615fc5ded0a0d10857789bf4144c8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f139b3ed53a0d8dd3d223441ed2948000afe53d0","unresolved":false,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        Returns - agent\u0027s status: AGENT_NEW, AGENT_REVIVED, AGENT_ALIVE"},{"line_number":512,"context_line":"        \"\"\""},{"line_number":513,"context_line":"        agent_state \u003d kwargs[\u0027agent_state\u0027][\u0027agent_state\u0027]"},{"line_number":514,"context_line":"        action \u003d agent_state.pop(\u0027action\u0027, \u0027update\u0027)"},{"line_number":515,"context_line":"        if action \u003d\u003d \u0027delete\u0027:"},{"line_number":516,"context_line":"            agent \u003d agent_obj.Agent.get_object("},{"line_number":517,"context_line":"                context, host\u003dagent_state[\u0027host\u0027],"},{"line_number":518,"context_line":"                agent_type\u003dagent_state[\u0027agent_type\u0027])"},{"line_number":519,"context_line":"            if not agent:"},{"line_number":520,"context_line":"                LOG.debug(\"Agent with %s type for %s host was already removed\","},{"line_number":521,"context_line":"                          kwargs[\u0027agent_type\u0027], kwargs[\u0027host\u0027])"},{"line_number":522,"context_line":"                return"},{"line_number":523,"context_line":"            agent.delete()"},{"line_number":524,"context_line":"            return"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"        time \u003d kwargs[\u0027time\u0027]"},{"line_number":527,"context_line":"        time \u003d timeutils.parse_strtime(time)"}],"source_content_type":"text/x-python","patch_set":3,"id":"43221d6f_13901a05","line":524,"range":{"start_line":513,"start_character":8,"end_line":524,"end_character":18},"in_reply_to":"d8e8b281_a4f3f4de","updated":"2025-07-22 14:10:18.000000000","message":"Done","commit_id":"53b68ffab90615fc5ded0a0d10857789bf4144c8"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"204f8819e79d481cdc4ab65339be48cf8ccc2632","unresolved":true,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        Returns - agent\u0027s status: AGENT_NEW, AGENT_REVIVED, AGENT_ALIVE"},{"line_number":512,"context_line":"        \"\"\""},{"line_number":513,"context_line":"        agent_state \u003d kwargs[\u0027agent_state\u0027][\u0027agent_state\u0027]"},{"line_number":514,"context_line":"        action \u003d agent_state.pop(\u0027action\u0027, \u0027update\u0027)"},{"line_number":515,"context_line":"        if action \u003d\u003d \u0027delete\u0027:"},{"line_number":516,"context_line":"            agent \u003d agent_obj.Agent.get_object("},{"line_number":517,"context_line":"                context, host\u003dagent_state[\u0027host\u0027],"},{"line_number":518,"context_line":"                agent_type\u003dagent_state[\u0027agent_type\u0027])"},{"line_number":519,"context_line":"            if not agent:"},{"line_number":520,"context_line":"                LOG.debug(\"Agent with %s type for %s host was already removed\","},{"line_number":521,"context_line":"                          kwargs[\u0027agent_type\u0027], kwargs[\u0027host\u0027])"},{"line_number":522,"context_line":"                return"},{"line_number":523,"context_line":"            agent.delete()"},{"line_number":524,"context_line":"            return"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"        time \u003d kwargs[\u0027time\u0027]"},{"line_number":527,"context_line":"        time \u003d timeutils.parse_strtime(time)"}],"source_content_type":"text/x-python","patch_set":3,"id":"d8e8b281_a4f3f4de","line":524,"range":{"start_line":513,"start_character":8,"end_line":524,"end_character":18},"in_reply_to":"efaafe0b_4f0a3ba8","updated":"2025-06-11 17:51:25.000000000","message":"Since there has been no update from the original author I decided to co-author and implement the suggested `delete_agent` method.","commit_id":"53b68ffab90615fc5ded0a0d10857789bf4144c8"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"cedc18eb07fb6fea3ab6abcbf4bcaf4dc85c841a","unresolved":true,"context_lines":[{"line_number":547,"context_line":""},{"line_number":548,"context_line":"        Returns list of agents"},{"line_number":549,"context_line":"        \"\"\""},{"line_number":550,"context_line":"        is_active \u003d filters.pop(\u0027is_active\u0027, None)"},{"line_number":551,"context_line":"        agents \u003d agent_obj.Agent.get_objects(context, **filters)"},{"line_number":552,"context_line":"        if is_active is not None:"},{"line_number":553,"context_line":"            is_active \u003d converters.convert_to_boolean(is_active)"},{"line_number":554,"context_line":"            agents \u003d [a for a in agents if a.is_active \u003d\u003d is_active]"},{"line_number":555,"context_line":"        return agents"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"    def _update_local_agent_resource_versions(self, context, agent_state):"},{"line_number":558,"context_line":"        resource_versions_dict \u003d agent_state.get(\u0027resource_versions\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7914a520_02c2ba39","line":555,"range":{"start_line":550,"start_character":0,"end_line":555,"end_character":21},"updated":"2025-04-07 13:22:14.000000000","message":"it seems that this is the cheapest method to fetch the active/alive agents","commit_id":"53b68ffab90615fc5ded0a0d10857789bf4144c8"}]}
