)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"d0c7e54aab4e7b3329a59d8bd561dda21f5711f4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"298972cb_ddde6e27","updated":"2026-09-04 13:23:23.000000000","message":"needs release note and unit tests","commit_id":"9ea7121ab09f047ed8bca64c0a19ad7cc32a6ff0"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"735cf04486e2103cea10a00c321d3c23bca4ed3c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"550f377d_874e1a42","updated":"2026-09-04 13:23:49.000000000","message":"needs release note and unit tests","commit_id":"9ea7121ab09f047ed8bca64c0a19ad7cc32a6ff0"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"22b16e11cf6f2b2c306a7d251e80ed9131a409cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"79e89b46_abd416f5","updated":"2026-09-04 16:51:40.000000000","message":"I now like the alternative approach with just trying available IP addresses one by one better. https://review.opendev.org/c/openstack/glance/+/1004004","commit_id":"1677b44551f3f8a77337e483e1f3da3704da503e"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"0051b2a0ad272a410cf7ebbdcfbadf9d066b3d5f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7d1db59d_423c0180","updated":"2026-09-04 14:45:59.000000000","message":"there could indeed be a solution w/o new option - we could be returning not a first address that passes all the filters, but the list of all that pass, and then try them one by one.\n\nlet me know if that\u0027s what you\u0027d prefer.","commit_id":"1677b44551f3f8a77337e483e1f3da3704da503e"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"3de7dfe30575f44521268bbb3b52074bbfccdcbb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"6ec6fd1a_326752b8","in_reply_to":"09c15487_16741afb","updated":"2026-09-04 16:12:23.000000000","message":"https://review.opendev.org/c/openstack/glance/+/1004004","commit_id":"1677b44551f3f8a77337e483e1f3da3704da503e"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"7c288afae3044c4ceaf086d0f758ebb0c204af28","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a93cd795_bcfda66a","in_reply_to":"7d1db59d_423c0180","updated":"2026-09-04 14:56:50.000000000","message":"Franky I am inclined towards fixing this without having new config option, but let\u0027s see what other has to say.","commit_id":"1677b44551f3f8a77337e483e1f3da3704da503e"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"144d4de935d5d52a7629af3d20b2db569bc6c0b1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"09c15487_16741afb","in_reply_to":"a93cd795_bcfda66a","updated":"2026-09-04 15:24:21.000000000","message":"let me prep and test an alternative implementation then","commit_id":"1677b44551f3f8a77337e483e1f3da3704da503e"}],"glance/common/utils.py":[{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"9ccb9f97218ffa219d3b35d658c567048d005fe3","unresolved":true,"context_lines":[{"line_number":264,"context_line":"            testhost \u003d (normalized_host if normalized_host.endswith(\u0027.\u0027)"},{"line_number":265,"context_line":"                        else normalized_host + \u0027.\u0027)"},{"line_number":266,"context_line":"            addresses \u003d []"},{"line_number":267,"context_line":"            for result in socket.getaddrinfo(testhost, port):"},{"line_number":268,"context_line":"                ip \u003d result[4][0]"},{"line_number":269,"context_line":"                if not ip:"},{"line_number":270,"context_line":"                    raise ValueError(\u0027empty address in getaddrinfo result\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"502c87c1_a96e194f","line":267,"range":{"start_line":267,"start_character":26,"end_line":267,"end_character":60},"updated":"2026-09-04 13:32:13.000000000","message":"I was thinking on limiting the family returned here outright (with e.g. `family\u003dsocket.AF_INET6` for IPv6 only),\nbut we need to check also the normalized host from L262 above... so moved the check into generic filtering part below.","commit_id":"9ea7121ab09f047ed8bca64c0a19ad7cc32a6ff0"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"22b16e11cf6f2b2c306a7d251e80ed9131a409cd","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            testhost \u003d (normalized_host if normalized_host.endswith(\u0027.\u0027)"},{"line_number":265,"context_line":"                        else normalized_host + \u0027.\u0027)"},{"line_number":266,"context_line":"            addresses \u003d []"},{"line_number":267,"context_line":"            for result in socket.getaddrinfo(testhost, port):"},{"line_number":268,"context_line":"                ip \u003d result[4][0]"},{"line_number":269,"context_line":"                if not ip:"},{"line_number":270,"context_line":"                    raise ValueError(\u0027empty address in getaddrinfo result\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5c19a277_9a51bc30","line":267,"range":{"start_line":267,"start_character":26,"end_line":267,"end_character":60},"in_reply_to":"502c87c1_a96e194f","updated":"2026-09-04 16:51:40.000000000","message":"Done","commit_id":"9ea7121ab09f047ed8bca64c0a19ad7cc32a6ff0"}],"glance/tests/unit/common/test_utils.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f62bb185830090709adcde797eec792a0874b3de","unresolved":false,"context_lines":[{"line_number":1266,"context_line":"        self.config(allowed_ip_version\u003d\"all\","},{"line_number":1267,"context_line":"                    group\u003d\u0027import_filtering_opts\u0027)"},{"line_number":1268,"context_line":"        mock_getaddrinfo.return_value \u003d ["},{"line_number":1269,"context_line":"                (socket.AF_INET, socket.SOCK_STREAM, 6, \u0027\u0027,"},{"line_number":1270,"context_line":"                 (\u002793.184.216.34\u0027, 80)),"},{"line_number":1271,"context_line":"                (socket.AF_INET6, socket.SOCK_STREAM, 6, \u0027\u0027,"},{"line_number":1272,"context_line":"                 (\u00272607:f298:6:a014::c3e:9bd6\u0027, 80, 0, 0)),"}],"source_content_type":"text/x-python","patch_set":2,"id":"38855191_ddb762ce","line":1269,"updated":"2026-09-04 17:01:03.000000000","message":"pep8: E126 continuation line over-indented for hanging indent","commit_id":"1677b44551f3f8a77337e483e1f3da3704da503e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f62bb185830090709adcde797eec792a0874b3de","unresolved":false,"context_lines":[{"line_number":1273,"context_line":"        ]"},{"line_number":1274,"context_line":"        self.assertEqual("},{"line_number":1275,"context_line":"            \u002793.184.216.34\u0027,"},{"line_number":1276,"context_line":"             utils.resolve_pinned_address(\"example.com\", 80)"},{"line_number":1277,"context_line":"        )"},{"line_number":1278,"context_line":""},{"line_number":1279,"context_line":"        mock_getaddrinfo.return_value \u003d ["}],"source_content_type":"text/x-python","patch_set":2,"id":"7f05dd24_caf15054","line":1276,"updated":"2026-09-04 17:01:03.000000000","message":"pep8: E131 continuation line unaligned for hanging indent","commit_id":"1677b44551f3f8a77337e483e1f3da3704da503e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f62bb185830090709adcde797eec792a0874b3de","unresolved":false,"context_lines":[{"line_number":1284,"context_line":"        ]"},{"line_number":1285,"context_line":"        self.assertEqual("},{"line_number":1286,"context_line":"            \u00272607:f298:6:a014::c3e:9bd6\u0027,"},{"line_number":1287,"context_line":"             utils.resolve_pinned_address(\"example.com\", 80)"},{"line_number":1288,"context_line":"        )"},{"line_number":1289,"context_line":""},{"line_number":1290,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7c23d511_66165071","line":1287,"updated":"2026-09-04 17:01:03.000000000","message":"pep8: E131 continuation line unaligned for hanging indent","commit_id":"1677b44551f3f8a77337e483e1f3da3704da503e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f62bb185830090709adcde797eec792a0874b3de","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"        )"},{"line_number":1289,"context_line":""},{"line_number":1290,"context_line":""},{"line_number":1291,"context_line":"    @mock.patch(\"glance.common.utils.socket.getaddrinfo\")"},{"line_number":1292,"context_line":"    def test_resolve_pinned_address_ip_version_4(self, mock_getaddrinfo):"},{"line_number":1293,"context_line":"        self.config(allowed_ip_version\u003d\"IPv4\","},{"line_number":1294,"context_line":"                    group\u003d\u0027import_filtering_opts\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c28706a4_ad53a1c0","line":1291,"updated":"2026-09-04 17:01:03.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"1677b44551f3f8a77337e483e1f3da3704da503e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f62bb185830090709adcde797eec792a0874b3de","unresolved":false,"context_lines":[{"line_number":1300,"context_line":"        ]"},{"line_number":1301,"context_line":"        self.assertEqual("},{"line_number":1302,"context_line":"            \u002793.184.216.34\u0027,"},{"line_number":1303,"context_line":"             utils.resolve_pinned_address(\"example.com\", 80)"},{"line_number":1304,"context_line":"        )"},{"line_number":1305,"context_line":""},{"line_number":1306,"context_line":"    @mock.patch(\"glance.common.utils.socket.getaddrinfo\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6d200a_7359029f","line":1303,"updated":"2026-09-04 17:01:03.000000000","message":"pep8: E131 continuation line unaligned for hanging indent","commit_id":"1677b44551f3f8a77337e483e1f3da3704da503e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f62bb185830090709adcde797eec792a0874b3de","unresolved":false,"context_lines":[{"line_number":1315,"context_line":"        ]"},{"line_number":1316,"context_line":"        self.assertEqual("},{"line_number":1317,"context_line":"            \u00272607:f298:6:a014::c3e:9bd6\u0027,"},{"line_number":1318,"context_line":"             utils.resolve_pinned_address(\"example.com\", 80)"},{"line_number":1319,"context_line":"        )"},{"line_number":1320,"context_line":""},{"line_number":1321,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"86982388_8af6038f","line":1318,"updated":"2026-09-04 17:01:03.000000000","message":"pep8: E131 continuation line unaligned for hanging indent","commit_id":"1677b44551f3f8a77337e483e1f3da3704da503e"}]}
