)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c7f9d685009636814c018a4ef13f9be8fbe32fef","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add caching for immutable metadata responses."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Implements: blueprint neutron-metadata-caching"},{"line_number":10,"context_line":"Change-Id: I80729c8f69cca6ba13c6fb4623fca5555905d43c"},{"line_number":11,"context_line":"Signed-off-by: sam.clippinger@garmin.com"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5ec3ed76_32c26c9d","line":9,"updated":"2025-08-13 14:27:06.000000000","message":"Neutron hasn\u0027t used the blueprint mechanism for a while, you should enter either a bug (if it\u0027s just a bug) or an RFE (also a bug but tagged differently) so the team can approve it at our weekly meeting. More information available at [0] and [1], or reach-out on the #openstack-neutron irc channel and someone will try and answer.\n\nThanks, -Brian\n\n[0] https://docs.openstack.org/neutron/latest/contributor/contributing.html#new-feature-planning\n[1] https://docs.openstack.org/neutron/latest/contributor/policies/blueprints.html#rfe-submission-guidelines","commit_id":"59ff408f4a934be79e6d6bea77bc5565d5d052ae"},{"author":{"_account_id":37798,"name":"Sam Clippinger","display_name":"samatwork","email":"sam.clippinger@garmin.com","username":"samatwork","status":"Garmin International"},"change_message_id":"3052d459e79a88acc747430f1b7795cc757593f9","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add caching for immutable metadata responses."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Implements: blueprint neutron-metadata-caching"},{"line_number":10,"context_line":"Change-Id: I80729c8f69cca6ba13c6fb4623fca5555905d43c"},{"line_number":11,"context_line":"Signed-off-by: sam.clippinger@garmin.com"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"81894197_83ff5f2f","line":9,"in_reply_to":"5ec3ed76_32c26c9d","updated":"2025-08-26 02:44:52.000000000","message":"I didn\u0027t realize Neutron used a different process, I\u0027m sorry about that!  Thanks for the links, those are very helpful.\n\nI\u0027ve opened RFE 2120732 and updated the commit message on this patch to match.  Please let me know what else I should do to get this feature added.","commit_id":"59ff408f4a934be79e6d6bea77bc5565d5d052ae"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ddf5f25da523393203ee4c979b54ad545e76415","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8f7e962a_e1bafed7","updated":"2025-08-17 18:05:11.000000000","message":"You should also add a test to cover the cached case","commit_id":"4a09893d33d06698c09961fcb5fde0b54fa130eb"},{"author":{"_account_id":37798,"name":"Sam Clippinger","display_name":"samatwork","email":"sam.clippinger@garmin.com","username":"samatwork","status":"Garmin International"},"change_message_id":"3052d459e79a88acc747430f1b7795cc757593f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"0fc36b1c_e2e7a6d0","in_reply_to":"8f7e962a_e1bafed7","updated":"2025-08-26 02:44:52.000000000","message":"Yes, yes I should!  I just didn\u0027t want to invest the time until I was sure the idea was acceptable to the team (and Zuul approved, of course).","commit_id":"4a09893d33d06698c09961fcb5fde0b54fa130eb"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"9f923a30dda6a49e4b6e4464a25a5fd5953c3648","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"453c2af2_8b88145c","updated":"2025-09-29 08:00:48.000000000","message":"seems like OVN based deployments are failing, see the logs here for example: \nhttps://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_823/openstack/823a999079a04ddf89e6e5efb8be6cb6/controller/logs/screen-q-ovn-agent.txt\n\nSep 19 04:00:53.596706 npa08e5ef050b74 neutron-ovn-agent[67389]: ERROR neutron.common.metadata Traceback (most recent call last):\nSep 19 04:00:53.596706 npa08e5ef050b74 neutron-ovn-agent[67389]: ERROR neutron.common.metadata   File \"/opt/stack/neutron/neutron/common/metadata.py\", line 310, in handle\nSep 19 04:00:53.596706 npa08e5ef050b74 neutron-ovn-agent[67389]: ERROR neutron.common.metadata     res \u003d self._proxy_request(instance_id, project_id, req)\nSep 19 04:00:53.596706 npa08e5ef050b74 neutron-ovn-agent[67389]: ERROR neutron.common.metadata           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nSep 19 04:00:53.596706 npa08e5ef050b74 neutron-ovn-agent[67389]: ERROR neutron.common.metadata   File \"/opt/stack/neutron/neutron/common/metadata.py\", line 256, in _proxy_request\nSep 19 04:00:53.596706 npa08e5ef050b74 neutron-ovn-agent[67389]: ERROR neutron.common.metadata     resp \u003d self._get_response(method\u003dreq.method, url\u003durl,\nSep 19 04:00:53.596706 npa08e5ef050b74 neutron-ovn-agent[67389]: ERROR neutron.common.metadata            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nSep 19 04:00:53.596706 npa08e5ef050b74 neutron-ovn-agent[67389]: ERROR neutron.common.metadata   File \"/opt/stack/neutron/neutron/common/cache_utils.py\", line 106, in __call__\nSep 19 04:00:53.596706 npa08e5ef050b74 neutron-ovn-agent[67389]: ERROR neutron.common.metadata     raise NotImplementedError(\nSep 19 04:00:53.596706 npa08e5ef050b74 neutron-ovn-agent[67389]: ERROR neutron.common.metadata NotImplementedError: Instance of class neutron.agent.ovn.metadata.server_socket.MetadataProxyHandler must contain _cache attribute\nSep 19 04:00:53.596706 npa08e5ef050b74 neutron-ovn-agent[67389]: ERROR neutron.common.metadata","commit_id":"ce4e28ea8e194ff84e9ba867745cd62e0270ae9f"}],"neutron/agent/metadata/agent.py":[{"author":{"_account_id":37798,"name":"Sam Clippinger","display_name":"samatwork","email":"sam.clippinger@garmin.com","username":"samatwork","status":"Garmin International"},"change_message_id":"3052d459e79a88acc747430f1b7795cc757593f9","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                self._get_instance_and_tenant_id(req, skip_cache\u003dTrue)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            if instance_id:"},{"line_number":87,"context_line":"                res \u003d self._proxy_request(instance_id, project_id, req)"},{"line_number":88,"context_line":"                self.wfile.write(res)"},{"line_number":89,"context_line":"                return"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"39a186c4_e41e442f","line":87,"in_reply_to":"7f51e773_6eecb5db","updated":"2025-08-26 02:44:52.000000000","message":"\u003e pep8: F821 Undefined name `project_id`\n\nPlease fix.","commit_id":"59ff408f4a934be79e6d6bea77bc5565d5d052ae"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ddf5f25da523393203ee4c979b54ad545e76415","unresolved":true,"context_lines":[{"line_number":81,"context_line":"            # results when the port is moved to a new instance or when an"},{"line_number":82,"context_line":"            # IP address is reused."},{"line_number":83,"context_line":"            instance_id, project_id \u003d \\"},{"line_number":84,"context_line":"                self._get_instance_and_tenant_id(req, skip_cache\u003dTrue)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            if instance_id:"},{"line_number":87,"context_line":"                res \u003d self._proxy_request(instance_id, project_id, req)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ed2f3dfa_7d8c5914","line":84,"updated":"2025-08-17 18:05:11.000000000","message":"Can you change this to not use the backslash? It\u0027s my kryptonite :) and we try not the add them if possible","commit_id":"4a09893d33d06698c09961fcb5fde0b54fa130eb"},{"author":{"_account_id":37798,"name":"Sam Clippinger","display_name":"samatwork","email":"sam.clippinger@garmin.com","username":"samatwork","status":"Garmin International"},"change_message_id":"3052d459e79a88acc747430f1b7795cc757593f9","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            # results when the port is moved to a new instance or when an"},{"line_number":82,"context_line":"            # IP address is reused."},{"line_number":83,"context_line":"            instance_id, project_id \u003d \\"},{"line_number":84,"context_line":"                self._get_instance_and_tenant_id(req, skip_cache\u003dTrue)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            if instance_id:"},{"line_number":87,"context_line":"                res \u003d self._proxy_request(instance_id, project_id, req)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ee356693_bfbd475c","line":84,"in_reply_to":"ed2f3dfa_7d8c5914","updated":"2025-08-26 02:44:52.000000000","message":"Done!","commit_id":"4a09893d33d06698c09961fcb5fde0b54fa130eb"}],"neutron/common/metadata.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ddf5f25da523393203ee4c979b54ad545e76415","unresolved":true,"context_lines":[{"line_number":228,"context_line":"            # lifetime of the instance -- don\u0027t cache them."},{"line_number":229,"context_line":"            if (\"/block-device-mapping\" in url or \"/events\" in url or"},{"line_number":230,"context_line":"                    \"/local-ipv4\" in url or \"/public-ipv4\" in url or"},{"line_number":231,"context_line":"                    \"/openstack\" in url):"},{"line_number":232,"context_line":"                skip_cache \u003d True"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"            LOG.debug(\"Fetching metadata for %s %s: %s\", instance_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"14f5cc90_be75ea4e","line":231,"updated":"2025-08-17 18:05:11.000000000","message":"nit: you should define a set or list of strings that we don\u0027t want to cache and use any():\n\nif any(ep in url for ep in endpoints):\n\nthat way we can just update the constant without updating the code if others are necessary.","commit_id":"4a09893d33d06698c09961fcb5fde0b54fa130eb"},{"author":{"_account_id":37798,"name":"Sam Clippinger","display_name":"samatwork","email":"sam.clippinger@garmin.com","username":"samatwork","status":"Garmin International"},"change_message_id":"3052d459e79a88acc747430f1b7795cc757593f9","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            # lifetime of the instance -- don\u0027t cache them."},{"line_number":229,"context_line":"            if (\"/block-device-mapping\" in url or \"/events\" in url or"},{"line_number":230,"context_line":"                    \"/local-ipv4\" in url or \"/public-ipv4\" in url or"},{"line_number":231,"context_line":"                    \"/openstack\" in url):"},{"line_number":232,"context_line":"                skip_cache \u003d True"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"            LOG.debug(\"Fetching metadata for %s %s: %s\", instance_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"96631a5a_bc6e68ca","line":231,"in_reply_to":"14f5cc90_be75ea4e","updated":"2025-08-26 02:44:52.000000000","message":"Done!  FWIW I\u0027m sorry about that, this patch was based on a quick-n-dirty in-house patch.","commit_id":"4a09893d33d06698c09961fcb5fde0b54fa130eb"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1ac3f8892e43c60a25d09215ed52fa78010a19ea","unresolved":true,"context_lines":[{"line_number":35,"context_line":"PROXY_SERVICE_CMD \u003d \u0027haproxy\u0027"},{"line_number":36,"context_line":"# The responses from these endpoints could change during the"},{"line_number":37,"context_line":"# lifetime of the instance -- don\u0027t cache them."},{"line_number":38,"context_line":"UNCACHABLE_ENDPOINTS \u003d ["},{"line_number":39,"context_line":"    \"/block-device-mapping\","},{"line_number":40,"context_line":"    \"/events\","},{"line_number":41,"context_line":"    \"/local-ipv4\","}],"source_content_type":"text/x-python","patch_set":5,"id":"260f1b30_e8620dbf","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":20},"updated":"2025-09-10 08:26:21.000000000","message":"Why these values and not \"hostname\" or \"placement\", for example?","commit_id":"d0d31b33f8bd02bbd780bda6d2c3c4bca7fcc2da"},{"author":{"_account_id":37798,"name":"Sam Clippinger","display_name":"samatwork","email":"sam.clippinger@garmin.com","username":"samatwork","status":"Garmin International"},"change_message_id":"60ddc6b6836ba0e127d440ec52b6a1b12d097da9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"PROXY_SERVICE_CMD \u003d \u0027haproxy\u0027"},{"line_number":36,"context_line":"# The responses from these endpoints could change during the"},{"line_number":37,"context_line":"# lifetime of the instance -- don\u0027t cache them."},{"line_number":38,"context_line":"UNCACHABLE_ENDPOINTS \u003d ["},{"line_number":39,"context_line":"    \"/block-device-mapping\","},{"line_number":40,"context_line":"    \"/events\","},{"line_number":41,"context_line":"    \"/local-ipv4\","}],"source_content_type":"text/x-python","patch_set":5,"id":"783d2b8b_e9c721ef","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":20},"in_reply_to":"260f1b30_e8620dbf","updated":"2025-09-19 02:44:31.000000000","message":"Good point!  I added a few more endpoints.","commit_id":"d0d31b33f8bd02bbd780bda6d2c3c4bca7fcc2da"},{"author":{"_account_id":37798,"name":"Sam Clippinger","display_name":"samatwork","email":"sam.clippinger@garmin.com","username":"samatwork","status":"Garmin International"},"change_message_id":"60ddc6b6836ba0e127d440ec52b6a1b12d097da9","unresolved":false,"context_lines":[{"line_number":233,"context_line":"                           self.conf.nova_client_priv_key)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        try:"},{"line_number":236,"context_line":"            if (any([x in url for x in UNCACHABLE_ENDPOINTS])):"},{"line_number":237,"context_line":"                skip_cache \u003d True"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"            LOG.debug(\"Fetching metadata for %s %s: %s\", instance_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"334bf39d_b0ca4d5e","line":236,"in_reply_to":"6112a72f_28a8c61a","updated":"2025-09-19 02:44:31.000000000","message":"\u003e pep8: R1729: Use a generator instead \u0027any(x in url for x in UNCACHABLE_ENDPOINTS)\u0027 (use-a-generator)\n\nPlease fix.","commit_id":"d0d31b33f8bd02bbd780bda6d2c3c4bca7fcc2da"}]}
