)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"366b86fe5819edaab6075cd732a50bd36404bfbb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ea38dce1_fa05bcd3","updated":"2025-08-14 09:07:47.000000000","message":"@Clay I agree re bringing Swift s3api in line with this change. I\u0027ve written up https://bugs.launchpad.net/swift/+bug/2120622\n\nI consider that beyond the scope of this patch. My immediate need to is to have the compat tests pass.","commit_id":"e547545d8128be4755cb1c760d5d4fc3a523d70b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b6cd613e86449d6552900e12612ccad6e6e4607f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a06550fc_35541576","updated":"2025-08-16 02:22:20.000000000","message":"One little concern, but I\u0027m not sure how much I care.","commit_id":"46f0cb0794daecd857077b7d175d98cbe9c8d9ba"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"40338063e687db819d9cfb60adbe6ef8bd4f4633","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8b131c8b_e090dd6f","updated":"2025-08-22 15:46:52.000000000","message":"LGTM!\n\nAFAIK it\u0027s a \"known issue\" that test_service is essentially incompatible with most people\u0027s use of the cross-compat suite when talking to their AWS buckets:\n\n```\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d short test summary info \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nSKIPPED [9] ../../usr/local/lib/python3.12/dist-packages/_pytest/unittest.py:385: botocore cannot crc32c (run `pip install awscrt`)\nSKIPPED [9] ../../usr/local/lib/python3.12/dist-packages/_pytest/unittest.py:385: botocore cannot crc64nvme (run `pip install awscrt`)\nSKIPPED [4] swift/test/s3api/test_service.py:36: must supply [s3api_test]access_key3\nSKIPPED [4] swift/test/s3api/test_service.py:67: must supply [s3api_test]access_key2\nSKIPPED [4] swift/test/s3api/test_service.py:80: must supply [s3api_test]access_key3\nFAILED swift/test/s3api/test_service.py::TestGetServiceSigV4::test_empty_service - AssertionError: Lists differ: [] !\u003d [{\u0027Name\u0027: \u00271space-data-mover-demo-export\u0027,[7855 chars]())}]\nFAILED swift/test/s3api/test_service.py::TestGetServiceSigV4::test_service_with_buckets - AssertionError: Lists differ: [\u0027s3api-test-bucket0-e9237eccd62c43138bad23[227 chars]276\u0027] !\u003d [\u00271space-data-mover-demo-export\u0027, \u00271space-d[1745 chars]ash\u0027]\nFAILED swift/test/s3api/test_service.py::TestGetServiceSigV2::test_empty_service - AssertionError: Lists differ: [] !\u003d [{\u0027Name\u0027: \u00271space-data-mover-demo-export\u0027,[7855 chars]())}]\nFAILED swift/test/s3api/test_service.py::TestGetServiceSigV2::test_service_with_buckets - AssertionError: Lists differ: [\u0027s3api-test-bucket0-280c8bbab56347bfb1f1bd[227 chars]4b4\u0027] !\u003d [\u00271space-data-mover-demo-export\u0027, \u00271space-d[1745 chars]ash\u0027]\nFAILED swift/test/s3api/test_service.py::TestGetServicePresignedV2::test_empty_service - AssertionError: Lists differ: [] !\u003d [{\u0027Name\u0027: \u00271space-data-mover-demo-export\u0027,[7855 chars]())}]\nFAILED swift/test/s3api/test_service.py::TestGetServicePresignedV2::test_service_with_buckets - AssertionError: Lists differ: [\u0027s3api-test-bucket0-ffe0058edb9d4fd9aa6c5f[227 chars]f6c\u0027] !\u003d [\u00271space-data-mover-demo-export\u0027, \u00271space-d[1745 chars]ash\u0027]\nFAILED swift/test/s3api/test_service.py::TestGetServicePresignedV4::test_empty_service - AssertionError: Lists differ: [] !\u003d [{\u0027Name\u0027: \u00271space-data-mover-demo-export\u0027,[7855 chars]())}]\nFAILED swift/test/s3api/test_service.py::TestGetServicePresignedV4::test_service_with_buckets - AssertionError: Lists differ: [\u0027s3api-test-bucket0-1d9cdfd97e7c4b1a809d03[227 chars]ba6\u0027] !\u003d [\u00271space-data-mover-demo-export\u0027, \u00271space-d[1745 chars]ash\u0027]\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d 8 failed, 495 passed, 30 skipped, 28 warnings in 902.80s (0:15:02) \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n```\n\n958291: s3api: fix test_service with pre-existing buckets | https://review.opendev.org/c/openstack/swift/+/958291","commit_id":"c4cc83c5e7083cad04f8fb9f620b03b5b73e3087"}],"test/s3api/test_service.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5aa6af60d58a1746c271bdd4e7c5cc26ed7d29a7","unresolved":true,"context_lines":[{"line_number":27,"context_line":"        self.assertIn(\u0027x-amz-request-id\u0027,"},{"line_number":28,"context_line":"                      resp[\u0027ResponseMetadata\u0027][\u0027HTTPHeaders\u0027])"},{"line_number":29,"context_line":"        self.check_owner(resp[\u0027Owner\u0027])"},{"line_number":30,"context_line":"        self.assertIn(\u0027ID\u0027, resp[\u0027Owner\u0027])"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_empty_service(self):"},{"line_number":33,"context_line":"        client1 \u003d self.get_s3_client(1)"}],"source_content_type":"text/x-python","patch_set":3,"id":"d3f5ec7a_a9ed8303","line":30,"updated":"2025-08-22 15:12:43.000000000","message":"Redundant now, but w/e","commit_id":"c4cc83c5e7083cad04f8fb9f620b03b5b73e3087"}],"test/s3api/test_versioning.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"065c95f9eec8eb57388a86c5e5a505b1369fce45","unresolved":true,"context_lines":[{"line_number":672,"context_line":"            owner \u003d obj.pop(\u0027Owner\u0027)"},{"line_number":673,"context_line":"            self._sanitize_obj_listing(obj)"},{"line_number":674,"context_line":"            # one difference seems to be the Owner key"},{"line_number":675,"context_line":"            self.assertEqual({\u0027DisplayName\u0027, \u0027ID\u0027}, set(owner.keys()))"},{"line_number":676,"context_line":"        self.assertEqual(expected, objs)"},{"line_number":677,"context_line":"        resp \u003d self.client.list_objects_v2(Bucket\u003dself.bucket_name)"},{"line_number":678,"context_line":"        objs \u003d resp.get(\u0027Contents\u0027, [])"}],"source_content_type":"text/x-python","patch_set":1,"id":"b39ada9b_a1a53185","side":"PARENT","line":675,"updated":"2025-08-13 17:09:02.000000000","message":"because of https://docs.aws.amazon.com/AmazonS3/latest/API/API_Owner.html I think it would also be helpful if we remove DisplayName from the swift responses.","commit_id":"bdb052b59b6b36ac57792248a637e81cd973bf95"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b6cd613e86449d6552900e12612ccad6e6e4607f","unresolved":true,"context_lines":[{"line_number":672,"context_line":"            owner \u003d obj.pop(\u0027Owner\u0027)"},{"line_number":673,"context_line":"            self._sanitize_obj_listing(obj)"},{"line_number":674,"context_line":"            # one difference seems to be the Owner key"},{"line_number":675,"context_line":"            self.assertTrue(\u0027ID\u0027 in owner.keys())"},{"line_number":676,"context_line":"        self.assertEqual(expected, objs)"},{"line_number":677,"context_line":"        resp \u003d self.client.list_objects_v2(Bucket\u003dself.bucket_name)"},{"line_number":678,"context_line":"        objs \u003d resp.get(\u0027Contents\u0027, [])"}],"source_content_type":"text/x-python","patch_set":2,"id":"54da593a_7e536675","line":675,"updated":"2025-08-16 02:22:20.000000000","message":"So we\u0027ve weakened this in more than one way -- we used to check that `owner.keys()` had *exactly* `DisplayName`, `ID` and now not only is `DisplayName` allowed to be absent but any *other* key is allowed to be *present*...\n\nOTOH, `test_service.py` was *never* guarding against extra keys...","commit_id":"46f0cb0794daecd857077b7d175d98cbe9c8d9ba"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5aa6af60d58a1746c271bdd4e7c5cc26ed7d29a7","unresolved":false,"context_lines":[{"line_number":672,"context_line":"            owner \u003d obj.pop(\u0027Owner\u0027)"},{"line_number":673,"context_line":"            self._sanitize_obj_listing(obj)"},{"line_number":674,"context_line":"            # one difference seems to be the Owner key"},{"line_number":675,"context_line":"            self.assertTrue(\u0027ID\u0027 in owner.keys())"},{"line_number":676,"context_line":"        self.assertEqual(expected, objs)"},{"line_number":677,"context_line":"        resp \u003d self.client.list_objects_v2(Bucket\u003dself.bucket_name)"},{"line_number":678,"context_line":"        objs \u003d resp.get(\u0027Contents\u0027, [])"}],"source_content_type":"text/x-python","patch_set":2,"id":"54b3cf2f_dab9d6a2","line":675,"in_reply_to":"54da593a_7e536675","updated":"2025-08-22 15:12:43.000000000","message":"Done","commit_id":"46f0cb0794daecd857077b7d175d98cbe9c8d9ba"}]}
