)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"981157d8141e6438a9d716b83aa8fd86d1e788b4","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Shreeya Deshpande \u003cshreeyad@nvidia.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2024-08-22 16:04:29 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"s3api: test xml escape chars"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I4ff77ca6a94a6b9613d93082cd36a23929c94236"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9ce4e359_62d0b374","line":7,"updated":"2024-08-23 16:19:00.000000000","message":"is the intention for this change to include a test AND a fix?   or is it still just a test?","commit_id":"44f7b0770d999655f001a66bbc6551f208171201"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"3c163588b90910b7b117b3e51eded6c3d0ee3513","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Shreeya Deshpande \u003cshreeyad@nvidia.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2024-08-22 16:04:29 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"s3api: test xml escape chars"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I4ff77ca6a94a6b9613d93082cd36a23929c94236"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"c64b0d70_6ef9e43c","line":7,"in_reply_to":"9ce4e359_62d0b374","updated":"2024-08-23 19:24:14.000000000","message":"I am hoping it\u0027s a test and a fix both in one patch","commit_id":"44f7b0770d999655f001a66bbc6551f208171201"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"981157d8141e6438a9d716b83aa8fd86d1e788b4","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"s3api: test xml escape chars"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I4ff77ca6a94a6b9613d93082cd36a23929c94236"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"30aa6fbe_804ed6ec","line":9,"updated":"2024-08-23 16:19:00.000000000","message":"we should add a co-author line for Shreeya","commit_id":"44f7b0770d999655f001a66bbc6551f208171201"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"3c163588b90910b7b117b3e51eded6c3d0ee3513","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"s3api: test xml escape chars"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I4ff77ca6a94a6b9613d93082cd36a23929c94236"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"e8a850d4_334017d0","line":9,"in_reply_to":"30aa6fbe_804ed6ec","updated":"2024-08-23 19:24:14.000000000","message":"Acknowledged","commit_id":"44f7b0770d999655f001a66bbc6551f208171201"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f34225d8fd274d352ca617c89362d2a8581b5452","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"8888183f_4063a274","updated":"2024-08-02 00:08:54.000000000","message":"hopefully someone can checkout this change and think about maybe actually fixing the traceback in the logs if \"just\" run\n\n    pytest swift/test/s3api/test_object_listing.py::TestListObjects::test_list_bell_character\n    \n```\nE           botocore.exceptions.ClientError: An error occurred (InternalError) when calling the ListObjects operation (reached max retries: 4): We encountered an internal error. Please try again.\n```\n\n```\nAug  2 00:05:18 saio proxy-server: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters: \nTraceback (most recent call last):\n  File \"/vagrant/swift/swift/common/middleware/s3api/s3api.py\", line 350, in __call__\n    resp \u003d self.handle_request(req)\n  File \"/vagrant/swift/swift/common/middleware/s3api/s3api.py\", line 391, in handle_request\n    res \u003d handler(req)\n  File \"/vagrant/swift/swift/common/middleware/s3api/controllers/bucket.py\", line 364, in GET\n    self._add_objects_to_result(\n  File \"/vagrant/swift/swift/common/middleware/s3api/controllers/bucket.py\", line 329, in _add_objects_to_result\n    self._add_object(req, elem, o, encoding_type, listing_type,\n  File \"/vagrant/swift/swift/common/middleware/s3api/controllers/bucket.py\", line 293, in _add_object\n    SubElement(contents, \u0027Key\u0027).text \u003d name\n  File \"/vagrant/swift/swift/common/middleware/s3api/etree.py\", line 145, in text\n    lxml.etree.ElementBase.text.__set__(self, utf8decode(value))\n  File \"src/lxml/etree.pyx\", line 1048, in lxml.etree._Element.text.__set__\n  File \"src/lxml/apihelpers.pxi\", line 749, in lxml.etree._setNodeText\n  File \"src/lxml/apihelpers.pxi\", line 737, in lxml.etree._createTextNode\n  File \"src/lxml/apihelpers.pxi\", line 1530, in lxml.etree._utf8\nValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters (txn: tx8472cca7d30748e18eab0-0066ac22be) (client_ip: 127.0.0.1)\n\n```\n\nalso TIL you can type `--key ding^v^gdong` on the command line if you want to send the charter via aws cli (N.B. not a *literal* carrot-v-carrot-g, you hold control and press v then hold control and press g, in my termial it displays as `ding^Gdong`)","commit_id":"7a5448ab85f6f508547adbadd37fde15b55f07ec"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"05c2a48cd179af365a40ea3de7db8b167a8a4e69","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5ce271f7_aea99fac","updated":"2024-08-19 15:37:05.000000000","message":"I think you should now be able to add the encode_type\u003durl unittests\n\nI\u0027m excited to see what else you can tell us about the difference (?) between the bytes in the xml body of the successful/s3api-equivilent AWS s3 response when a client sends encode_type\u003durl vs the \"successful\" (but unparsable) response from AWS when a client requests the same listing w/o sending the encode_type\u003durl query string (our cross-compat-s3api shows the AWS response is 200 but then boto blows up trying to parse the xml body returned by AWS).\n\nAnother line of inquery might involve testing the AWS API with the old version of rclone using the provider\u003dOther config that we discovered won\u0027t send the encode_type\u003durl qs (and therefore triggers the error in s3api)... Does that rclone config result in an error when presented with the (invalid?) xml from real AWS just like boto?  Or is the rclone parser somehow able to make sense of the (unescaped?) control character in the 200 AWS response?\n\nIf the invalid XML response doesn\u0027t appear to ever be useful to any client (and we\u0027d \"just\" be trading a server side erorr for a client side error) we MAY be able to justify catching the ValueError and translating the 503 to a 400 BadRequest (i.e. \"client must send encode_type\u003durl\") rather than being \"bug for bug compatible\"\n\n... but I would consider that a \"last resort\".  If it\u0027s at all possible to \"just\" return the exact same XML that AWS returns given the particular client request - that should the primary goal; even if strict/modern clients like boto (or rclone) would throw an error when presented with the compatible AWS response.  That\u0027s what \"bug for bug compatibility\" means.  GL!","commit_id":"e0e3b3d6738e377f39deed87f3b43569436414b8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"981157d8141e6438a9d716b83aa8fd86d1e788b4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"ec1ac9dd_1a7b99e8","updated":"2024-08-23 16:19:00.000000000","message":"I\u0027m not sure I understand the strategy here - it makes me feel like Shreeya and I have a different understanding of the problem and goals.\n\nMaybe update try to update the commit message to describe in detail what is broken and what you\u0027re fixing.","commit_id":"44f7b0770d999655f001a66bbc6551f208171201"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"f1f66aed4a90100fcece414d2c6a2e3a0d5133c5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"4152b81f_445586a1","updated":"2024-08-22 21:58:55.000000000","message":"In PY2, swift/test/unit/common/middleware/s3api/test_bucket.py::TestS3ApiBucketNoACL::test_bucket_GET_with_nonascii_queries, \n(Pdb) req.params\n{\u0027marker\u0027: \u0027\\xef\\xbc\\xa2\u0027, \u0027delimiter\u0027: \u0027\\xef\\xbc\\xa1\u0027, \u0027prefix\u0027: \u0027\\xef\\xbc\\xa3\u0027, \u0027encoding-type\u0027: \u0027url\u0027}\n\nwhile in PY3,\n(Pdb) req.params\n{\u0027delimiter\u0027: \u0027ï¼¡\u0027, \u0027marker\u0027: \u0027ï¼¢\u0027, \u0027prefix\u0027: \u0027ï¼£\u0027, \u0027encoding-type\u0027: \u0027url\u0027}\n\nHence the PY2 error and not in PY3. Do we still need to support this in PY2?","commit_id":"44f7b0770d999655f001a66bbc6551f208171201"}],"swift/common/middleware/s3api/controllers/bucket.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54b5c31a4ee256af4bf7be9f9113f82afef519e7","unresolved":true,"context_lines":[{"line_number":29,"context_line":"from swift.common.registry import get_swift_info"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from swift.common.middleware.s3api.controllers.base import Controller"},{"line_number":32,"context_line":"from swift.common.middleware.s3api.etree import Element, SubElement, \\"},{"line_number":33,"context_line":"    tostring, fromstring, XMLSyntaxError, DocumentInvalid"},{"line_number":34,"context_line":"from swift.common.middleware.s3api.s3response import \\"},{"line_number":35,"context_line":"    HTTPOk, S3NotImplemented, InvalidArgument, \\"},{"line_number":36,"context_line":"    MalformedXML, InvalidLocationConstraint, NoSuchBucket, \\"}],"source_content_type":"text/x-python","patch_set":7,"id":"321cd77c_c30171d5","line":33,"range":{"start_line":32,"start_character":48,"end_line":33,"end_character":12},"updated":"2024-08-21 23:44:13.000000000","message":"I think you\u0027re going to need something other than `lxml` for these... [stdlib](https://docs.python.org/3/library/xml.etree.elementtree.html) might be enough for generating responses?","commit_id":"d25062d3beb84477f4b224d6eab078bd646d18d0"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"b7b6e63ce0acabcbea12c7ccb97d94e9be7636f2","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from swift.common.registry import get_swift_info"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from swift.common.middleware.s3api.controllers.base import Controller"},{"line_number":32,"context_line":"from swift.common.middleware.s3api.etree import Element, SubElement, \\"},{"line_number":33,"context_line":"    tostring, fromstring, XMLSyntaxError, DocumentInvalid"},{"line_number":34,"context_line":"from swift.common.middleware.s3api.s3response import \\"},{"line_number":35,"context_line":"    HTTPOk, S3NotImplemented, InvalidArgument, \\"},{"line_number":36,"context_line":"    MalformedXML, InvalidLocationConstraint, NoSuchBucket, \\"}],"source_content_type":"text/x-python","patch_set":7,"id":"6ed6197f_a318d727","line":33,"range":{"start_line":32,"start_character":48,"end_line":33,"end_character":12},"in_reply_to":"321cd77c_c30171d5","updated":"2024-08-22 20:23:55.000000000","message":"Acknowledged","commit_id":"d25062d3beb84477f4b224d6eab078bd646d18d0"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"4642ca4de8ba78c32dc0b85aeb582fce4540e7f8","unresolved":true,"context_lines":[{"line_number":109,"context_line":"        if encoding_type is not None and encoding_type !\u003d \u0027url\u0027:"},{"line_number":110,"context_line":"            err_msg \u003d \u0027Invalid Encoding Method specified in Request\u0027"},{"line_number":111,"context_line":"            raise InvalidArgument(\u0027encoding-type\u0027, encoding_type, err_msg)"},{"line_number":112,"context_line":"        if encoding_type \u003d\u003d \u0027url\u0027:"},{"line_number":113,"context_line":"            req.container_name \u003d re.sub(b\u0027[\\x00-\\x1f]\u0027, ("},{"line_number":114,"context_line":"                lambda x: b\u0027\u0026#x%x;\u0027 % ord(x[0])),"},{"line_number":115,"context_line":"                                        req.container_name.encode(\u0027UTF-8\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"aa4d84c2_0a8ce2dc","line":112,"range":{"start_line":112,"start_character":0,"end_line":112,"end_character":34},"updated":"2024-08-21 20:20:57.000000000","message":"This still gives a 500 status error. I need to check if this would work or I need to get in the lxml tree and then use regex on it.","commit_id":"d25062d3beb84477f4b224d6eab078bd646d18d0"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"3c163588b90910b7b117b3e51eded6c3d0ee3513","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        if encoding_type is not None and encoding_type !\u003d \u0027url\u0027:"},{"line_number":110,"context_line":"            err_msg \u003d \u0027Invalid Encoding Method specified in Request\u0027"},{"line_number":111,"context_line":"            raise InvalidArgument(\u0027encoding-type\u0027, encoding_type, err_msg)"},{"line_number":112,"context_line":"        if encoding_type \u003d\u003d \u0027url\u0027:"},{"line_number":113,"context_line":"            req.container_name \u003d re.sub(b\u0027[\\x00-\\x1f]\u0027, ("},{"line_number":114,"context_line":"                lambda x: b\u0027\u0026#x%x;\u0027 % ord(x[0])),"},{"line_number":115,"context_line":"                                        req.container_name.encode(\u0027UTF-8\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"3356bf0a_9fcf5561","line":112,"range":{"start_line":112,"start_character":0,"end_line":112,"end_character":34},"in_reply_to":"aa4d84c2_0a8ce2dc","updated":"2024-08-23 19:24:14.000000000","message":"Done","commit_id":"d25062d3beb84477f4b224d6eab078bd646d18d0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54b5c31a4ee256af4bf7be9f9113f82afef519e7","unresolved":true,"context_lines":[{"line_number":110,"context_line":"            err_msg \u003d \u0027Invalid Encoding Method specified in Request\u0027"},{"line_number":111,"context_line":"            raise InvalidArgument(\u0027encoding-type\u0027, encoding_type, err_msg)"},{"line_number":112,"context_line":"        if encoding_type \u003d\u003d \u0027url\u0027:"},{"line_number":113,"context_line":"            req.container_name \u003d re.sub(b\u0027[\\x00-\\x1f]\u0027, ("},{"line_number":114,"context_line":"                lambda x: b\u0027\u0026#x%x;\u0027 % ord(x[0])),"},{"line_number":115,"context_line":"                                        req.container_name.encode(\u0027UTF-8\u0027))"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5fb38459_cde3c91d","line":113,"range":{"start_line":113,"start_character":33,"end_line":113,"end_character":55},"updated":"2024-08-21 23:44:13.000000000","message":"I suspect you\u0027ll have to do any substitution *after* calling `tostring` to build the document. Also, a heads-up: I\u0027m pretty sure my regex was overly aggressive -- I don\u0027t think we want to go changing `\"\\r\\n\"`s to `\"\u0026#xd;\u0026#xa;\"`s, say.","commit_id":"d25062d3beb84477f4b224d6eab078bd646d18d0"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"b7b6e63ce0acabcbea12c7ccb97d94e9be7636f2","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            err_msg \u003d \u0027Invalid Encoding Method specified in Request\u0027"},{"line_number":111,"context_line":"            raise InvalidArgument(\u0027encoding-type\u0027, encoding_type, err_msg)"},{"line_number":112,"context_line":"        if encoding_type \u003d\u003d \u0027url\u0027:"},{"line_number":113,"context_line":"            req.container_name \u003d re.sub(b\u0027[\\x00-\\x1f]\u0027, ("},{"line_number":114,"context_line":"                lambda x: b\u0027\u0026#x%x;\u0027 % ord(x[0])),"},{"line_number":115,"context_line":"                                        req.container_name.encode(\u0027UTF-8\u0027))"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"f800e713_e726bfb8","line":113,"range":{"start_line":113,"start_character":33,"end_line":113,"end_character":55},"in_reply_to":"5fb38459_cde3c91d","updated":"2024-08-22 20:23:55.000000000","message":"Acknowledged","commit_id":"d25062d3beb84477f4b224d6eab078bd646d18d0"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"b7b6e63ce0acabcbea12c7ccb97d94e9be7636f2","unresolved":true,"context_lines":[{"line_number":109,"context_line":"        if encoding_type is not None and encoding_type !\u003d \u0027url\u0027:"},{"line_number":110,"context_line":"            err_msg \u003d \u0027Invalid Encoding Method specified in Request\u0027"},{"line_number":111,"context_line":"            raise InvalidArgument(\u0027encoding-type\u0027, encoding_type, err_msg)"},{"line_number":112,"context_line":"        if six.PY3 and encoding_type \u003d\u003d \u0027url\u0027:"},{"line_number":113,"context_line":"            req.container_name \u003d re.sub(b\u0027[\\x00-\\x1f]\u0027, ("},{"line_number":114,"context_line":"                lambda x: b\u0027\u0026#x%x;\u0027 % ord(x[0])),"},{"line_number":115,"context_line":"                                        req.container_name.encode()).decode()"}],"source_content_type":"text/x-python","patch_set":8,"id":"281f1846_7bb95563","line":112,"range":{"start_line":112,"start_character":11,"end_line":112,"end_character":18},"updated":"2024-08-22 20:23:55.000000000","message":"PY2 throws a Unicode error here. Do we need this on PY2 as well?","commit_id":"44f7b0770d999655f001a66bbc6551f208171201"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"981157d8141e6438a9d716b83aa8fd86d1e788b4","unresolved":true,"context_lines":[{"line_number":109,"context_line":"        if encoding_type is not None and encoding_type !\u003d \u0027url\u0027:"},{"line_number":110,"context_line":"            err_msg \u003d \u0027Invalid Encoding Method specified in Request\u0027"},{"line_number":111,"context_line":"            raise InvalidArgument(\u0027encoding-type\u0027, encoding_type, err_msg)"},{"line_number":112,"context_line":"        if six.PY3 and encoding_type \u003d\u003d \u0027url\u0027:"},{"line_number":113,"context_line":"            req.container_name \u003d re.sub(b\u0027[\\x00-\\x1f]\u0027, ("},{"line_number":114,"context_line":"                lambda x: b\u0027\u0026#x%x;\u0027 % ord(x[0])),"},{"line_number":115,"context_line":"                                        req.container_name.encode()).decode()"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f74430b_c9659768","line":112,"range":{"start_line":112,"start_character":11,"end_line":112,"end_character":18},"in_reply_to":"281f1846_7bb95563","updated":"2024-08-23 16:19:00.000000000","message":"I\u0027m surprised to see a change here given the traceback:\n\n```\n  File \"/vagrant/swift/swift/common/middleware/s3api/controllers/bucket.py\", line 293, in _add_object\n    SubElement(contents, \u0027Key\u0027).text \u003d name\n```\n\ndoes your test fail when you revert this change?","commit_id":"44f7b0770d999655f001a66bbc6551f208171201"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"3c163588b90910b7b117b3e51eded6c3d0ee3513","unresolved":true,"context_lines":[{"line_number":109,"context_line":"        if encoding_type is not None and encoding_type !\u003d \u0027url\u0027:"},{"line_number":110,"context_line":"            err_msg \u003d \u0027Invalid Encoding Method specified in Request\u0027"},{"line_number":111,"context_line":"            raise InvalidArgument(\u0027encoding-type\u0027, encoding_type, err_msg)"},{"line_number":112,"context_line":"        if six.PY3 and encoding_type \u003d\u003d \u0027url\u0027:"},{"line_number":113,"context_line":"            req.container_name \u003d re.sub(b\u0027[\\x00-\\x1f]\u0027, ("},{"line_number":114,"context_line":"                lambda x: b\u0027\u0026#x%x;\u0027 % ord(x[0])),"},{"line_number":115,"context_line":"                                        req.container_name.encode()).decode()"}],"source_content_type":"text/x-python","patch_set":8,"id":"5020077b_1acde803","line":112,"range":{"start_line":112,"start_character":11,"end_line":112,"end_character":18},"in_reply_to":"5f74430b_c9659768","updated":"2024-08-23 19:24:14.000000000","message":"This test fails when in PY2 and encoded url: swift/test/unit/common/middleware/s3api/test_bucket.py::TestS3ApiBucketNoACL::test_bucket_GET_with_nonascii_queries","commit_id":"44f7b0770d999655f001a66bbc6551f208171201"}],"test/s3api/__init__.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f34225d8fd274d352ca617c89362d2a8581b5452","unresolved":true,"context_lines":[{"line_number":171,"context_line":"                                                bulk\u003dTrue):"},{"line_number":172,"context_line":"        resp \u003d client.list_object_versions(Bucket\u003dbucket_name)"},{"line_number":173,"context_line":"        objs_to_delete \u003d (resp.get(\u0027Versions\u0027, []) +"},{"line_number":174,"context_line":"                          resp.get(\u0027DeleteMarkers\u0027, []))"},{"line_number":175,"context_line":"        while objs_to_delete:"},{"line_number":176,"context_line":"            if bulk:"},{"line_number":177,"context_line":"                self._do_multi_object_delete(client, bucket_name,"}],"source_content_type":"text/x-python","patch_set":1,"id":"14d8be3b_200995fd","line":174,"updated":"2024-08-02 00:08:54.000000000","message":"FWIW I ended up with listing that looked this a lot:\n\n```\nvagrant@saio:~$ aws s3api list-object-versions --bucket s3api-test-listings-397902d3ec2644b184ba5d12600c9539\n{\n    \"DeleteMarkers\": [\n        {\n            \"Owner\": {\n                \"DisplayName\": \"nsviscs-aws-root\",\n                \"ID\": \"3bcb8baa034ab2166cd7d6a5b7ac1264d613c5e9fbdf120bc9f0ae91bda54347\"\n            },\n            \"Key\": \"ding\\u0007dong\",\n            \"VersionId\": \"null\",\n            \"IsLatest\": true,\n            \"LastModified\": \"2024-08-01T23:17:28.000Z\"\n        }\n    ],\n    \"RequestCharged\": null\n}\n```\n\nand my test cleanup would fail with `Exception: Timeout clearing \u0027s3api-test-listings-8ce2976ae56a47b18586d14b70c1e360\u0027`\n\nI had a bunch of these buckets, at one time; but whatever it was this new cleanup code is robost to fixing the mess:\n\n```\nvagrant@saio:~$ aws s3 ls s3:// | grep s3api-test\n2024-08-01 23:43:42 s3api-test-listings-029ad577b0ab45d88ccafa3214994134\n2024-08-01 23:17:26 s3api-test-listings-397902d3ec2644b184ba5d12600c9539\n2024-08-01 22:52:20 s3api-test-listings-574be739f6434aaca175ad8d1f8afb52\n2024-08-01 22:55:34 s3api-test-listings-79c8d7074376457b802d383965106fec\n2024-08-01 22:59:22 s3api-test-listings-831640431d944389906eefcd54eac70f\n2024-08-01 23:32:34 s3api-test-listings-83a58f78e73c443ea54339619bb1cd77\n2024-08-01 23:27:33 s3api-test-listings-8a9e2de4d4b442699bb0b590eb75b608\n2024-08-01 23:37:43 s3api-test-listings-8ce2976ae56a47b18586d14b70c1e360\n2024-08-01 22:49:21 s3api-test-listings-a01159cf643b42a2be44cfd9e79c21db\n2024-08-01 23:38:51 s3api-test-listings-b2e0a19b96ba4a9cae0fd5d76fa7af25\n2024-08-01 23:40:46 s3api-test-listings-b6219584522d4d5bba926a199f67aca2\n2024-08-01 23:01:56 s3api-test-listings-cc56c910a55c4b55ae52dfe4c11057cf\n2024-08-01 22:49:37 s3api-test-listings-d180c6b24e644786904ad181859eb2a3\n2024-08-01 23:41:41 s3api-test-listings-f0b93e03662e4285b96810b50ae16dcd\n2024-08-01 22:58:49 s3api-test-listings-f29ce06813c84d5fb08e5aea4b6574e4\nvagrant@saio:~$ SWIFT_TEST_AWS_CONFIG_FILE\u003d/vagrant/.scratch/nv_s3api_aws_test.conf pytest swift/test/s3api/test_object_listing.py::TestListObjects::test_list_bell_character --pdb\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 test session starts \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nplatform linux -- Python 3.10.12, pytest-7.4.3, pluggy-1.3.0 -- /usr/bin/python\ncachedir: .pytest_cache\nrootdir: /home/vagrant/swift\nconfigfile: tox.ini\nplugins: cov-4.1.0\ncollected 1 item                                                                                                                                                                      \n\nswift/test/s3api/test_object_listing.py::TestListObjects::test_list_bell_character PASSED                                                                                       [100%]\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 warnings summary \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\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../../usr/local/lib/python3.10/dist-packages/eventlet/support/greenlets.py:1\n  /usr/local/lib/python3.10/dist-packages/eventlet/support/greenlets.py:1: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives\n    import distutils.version\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\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 1 passed, 1 warning in 21.71s \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nvagrant@saio:~$ aws s3 ls s3:// | grep s3api-test\nvagrant@saio:~$ \n```","commit_id":"7a5448ab85f6f508547adbadd37fde15b55f07ec"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f34225d8fd274d352ca617c89362d2a8581b5452","unresolved":true,"context_lines":[{"line_number":199,"context_line":"                                                         bulk\u003dTrue)"},{"line_number":200,"context_line":"        except ClientError as e:"},{"line_number":201,"context_line":"            if not e.response[\u0027Error\u0027][\u0027Code\u0027] \u003d\u003d \u0027MalformedXML\u0027:"},{"line_number":202,"context_line":"                raise"},{"line_number":203,"context_line":"            # we have some tests that setup some pretty wonky chars,"},{"line_number":204,"context_line":"            # apparently either boto doesn\u0027t know how to escape them or the"},{"line_number":205,"context_line":"            # AWS bulk delete API is more strict than the listings they"}],"source_content_type":"text/x-python","patch_set":1,"id":"1bb21db4_1eeafdb3","line":202,"updated":"2024-08-02 00:08:54.000000000","message":"I think I\u0027m going to have to write a boto meta event handler for bulk-delete that will add the encode-type\u003durl qs and encode the values in the body to test how s3 behaves to a client that sends *valid* XML\n\nbut for now this is the recommended workaround:\n\nhttps://github.com/boto/boto3/issues/3447","commit_id":"7a5448ab85f6f508547adbadd37fde15b55f07ec"}],"test/s3api/test_object_listing.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f34225d8fd274d352ca617c89362d2a8581b5452","unresolved":true,"context_lines":[{"line_number":42,"context_line":"            self.client.meta.events.unregister(name, func)"},{"line_number":43,"context_line":"            yield"},{"line_number":44,"context_line":"        finally:"},{"line_number":45,"context_line":"            self.client.meta.events.register(name, func)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def test_list_bell_character(self):"},{"line_number":48,"context_line":"        object_name \u003d u\u0027ding\\u0007dong\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"54944357_744f7ef8","line":45,"updated":"2024-08-02 00:08:54.000000000","message":"I thought this was causing the object cleanup to fail; and maybe it is - like if the re-register doesn\u0027t work the way I expect?  Ultimately I think this is a good idea AND the extra cleanup code are BOTH necessary; but I could be wrong; maybe cleanup should just create it\u0027s own client and all these meta events get re-registered automatically and tests can leave their client dirty?","commit_id":"7a5448ab85f6f508547adbadd37fde15b55f07ec"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f34225d8fd274d352ca617c89362d2a8581b5452","unresolved":true,"context_lines":[{"line_number":45,"context_line":"            self.client.meta.events.register(name, func)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def test_list_bell_character(self):"},{"line_number":48,"context_line":"        object_name \u003d u\u0027ding\\u0007dong\u0027"},{"line_number":49,"context_line":"        resp \u003d self.client.put_object(Bucket\u003dself.bucket_name, Key\u003dobject_name)"},{"line_number":50,"context_line":"        self.assertEqual(200, resp[\u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027])"},{"line_number":51,"context_line":"        resp \u003d self.client.list_objects(Bucket\u003dself.bucket_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7136bed4_fb366532","line":48,"updated":"2024-08-02 00:08:54.000000000","message":"is \"dong\" offensive?  that\u0027s the sound my door bell makes - get it... \\x07, bell_character... ding dong?","commit_id":"7a5448ab85f6f508547adbadd37fde15b55f07ec"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"55dd57d8a7aa1fbef1feb81a639f135a6e1a7075","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            self.client.meta.events.register(name, func)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def test_list_bell_character(self):"},{"line_number":48,"context_line":"        object_name \u003d u\u0027ding\\u0007dong\u0027"},{"line_number":49,"context_line":"        resp \u003d self.client.put_object(Bucket\u003dself.bucket_name, Key\u003dobject_name)"},{"line_number":50,"context_line":"        self.assertEqual(200, resp[\u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027])"},{"line_number":51,"context_line":"        resp \u003d self.client.list_objects(Bucket\u003dself.bucket_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"63a89110_8782cbc5","line":48,"in_reply_to":"7136bed4_fb366532","updated":"2024-08-19 20:38:51.000000000","message":"Done","commit_id":"7a5448ab85f6f508547adbadd37fde15b55f07ec"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f34225d8fd274d352ca617c89362d2a8581b5452","unresolved":true,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # force our client to not send encode-type\u003durl query param"},{"line_number":65,"context_line":"        with self.unregister_handler(\u0027before-parameter-build.s3.ListObjects\u0027,"},{"line_number":66,"context_line":"                                     set_list_objects_encoding_type_url), \\"},{"line_number":67,"context_line":"                self.assertRaises(botocore.parsers.ResponseParserError) as e:"},{"line_number":68,"context_line":"            self.client.list_objects(Bucket\u003dself.bucket_name)"},{"line_number":69,"context_line":"        msg \u003d str(e.exception)"}],"source_content_type":"text/x-python","patch_set":1,"id":"87322582_9dc31a02","line":66,"updated":"2024-08-02 00:08:54.000000000","message":"boto and (newer?) rclone \"just work\" out of the box by specifiying to S3 they want `?encode_type\u003durl` but you can force an API request to real AWS that doesn\u0027t include that param by removing this handler.","commit_id":"7a5448ab85f6f508547adbadd37fde15b55f07ec"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f34225d8fd274d352ca617c89362d2a8581b5452","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        # force our client to not send encode-type\u003durl query param"},{"line_number":65,"context_line":"        with self.unregister_handler(\u0027before-parameter-build.s3.ListObjects\u0027,"},{"line_number":66,"context_line":"                                     set_list_objects_encoding_type_url), \\"},{"line_number":67,"context_line":"                self.assertRaises(botocore.parsers.ResponseParserError) as e:"},{"line_number":68,"context_line":"            self.client.list_objects(Bucket\u003dself.bucket_name)"},{"line_number":69,"context_line":"        msg \u003d str(e.exception)"},{"line_number":70,"context_line":"        self.assertTrue(msg.startswith(\u0027Unable to parse response\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"c17da46e_3c1a48ac","line":67,"updated":"2024-08-02 00:08:54.000000000","message":"and the HALARIOUS part is when you do you get a valid 200 response - but it\u0027s not parseable by a strict XML parser; this behavior might be difficult to emulate.\n\nLuckily right now we throw a 500!  So we can\u0027t make it much WORSE.","commit_id":"7a5448ab85f6f508547adbadd37fde15b55f07ec"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"05c2a48cd179af365a40ea3de7db8b167a8a4e69","unresolved":true,"context_lines":[{"line_number":47,"context_line":"    def test_list_bell_character(self):"},{"line_number":48,"context_line":"        object_name \u003d u\u0027ding\\u0007dong\u0027"},{"line_number":49,"context_line":"        resp \u003d self.client.put_object(Bucket\u003dself.bucket_name, Key\u003dobject_name)"},{"line_number":50,"context_line":"        self.assertEqual(200, resp[\u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027])"},{"line_number":51,"context_line":"        resp \u003d self.client.list_objects(Bucket\u003dself.bucket_name)"},{"line_number":52,"context_line":"        self.assertEqual(200, resp[\u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027])"},{"line_number":53,"context_line":"        self.assertEqual(self.bucket_name, resp[\u0027Name\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"eb9ba616_9b7caae3","line":50,"updated":"2024-08-19 15:37:05.000000000","message":"I think the next step is creating a unittest for this case; where s3api actually returns a 200","commit_id":"e0e3b3d6738e377f39deed87f3b43569436414b8"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"4642ca4de8ba78c32dc0b85aeb582fce4540e7f8","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def test_list_bell_character(self):"},{"line_number":48,"context_line":"        object_name \u003d u\u0027ding\\u0007dong\u0027"},{"line_number":49,"context_line":"        resp \u003d self.client.put_object(Bucket\u003dself.bucket_name, Key\u003dobject_name)"},{"line_number":50,"context_line":"        self.assertEqual(200, resp[\u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027])"},{"line_number":51,"context_line":"        resp \u003d self.client.list_objects(Bucket\u003dself.bucket_name)"},{"line_number":52,"context_line":"        self.assertEqual(200, resp[\u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027])"},{"line_number":53,"context_line":"        self.assertEqual(self.bucket_name, resp[\u0027Name\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"c63d4a67_e63e521d","line":50,"in_reply_to":"eb9ba616_9b7caae3","updated":"2024-08-21 20:20:57.000000000","message":"Acknowledged","commit_id":"e0e3b3d6738e377f39deed87f3b43569436414b8"}],"test/unit/common/middleware/s3api/test_object_listing.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"05c2a48cd179af365a40ea3de7db8b167a8a4e69","unresolved":true,"context_lines":[{"line_number":42,"context_line":"            \u0027hash\u0027: \u0027hash%d\u0027 % i,"},{"line_number":43,"context_line":"            \u0027bytes\u0027: \u0027%d\u0027 % i,"},{"line_number":44,"context_line":"            \u0027content_type\u0027: \u0027application/octet-stream\u0027,"},{"line_number":45,"context_line":"        } for i in range(100)]"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self.swift.register("},{"line_number":48,"context_line":"            \u0027GET\u0027, \u0027/v1/AUTH_test/junk\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"18718cd3_187495d5","line":45,"updated":"2024-08-19 15:37:05.000000000","message":"ding ding ding ding ding ding ding dig ding ding","commit_id":"e0e3b3d6738e377f39deed87f3b43569436414b8"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"55dd57d8a7aa1fbef1feb81a639f135a6e1a7075","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            \u0027hash\u0027: \u0027hash%d\u0027 % i,"},{"line_number":43,"context_line":"            \u0027bytes\u0027: \u0027%d\u0027 % i,"},{"line_number":44,"context_line":"            \u0027content_type\u0027: \u0027application/octet-stream\u0027,"},{"line_number":45,"context_line":"        } for i in range(100)]"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self.swift.register("},{"line_number":48,"context_line":"            \u0027GET\u0027, \u0027/v1/AUTH_test/junk\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"c6392438_2f8f1cfe","line":45,"in_reply_to":"18718cd3_187495d5","updated":"2024-08-19 20:38:51.000000000","message":"hahah","commit_id":"e0e3b3d6738e377f39deed87f3b43569436414b8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"05c2a48cd179af365a40ea3de7db8b167a8a4e69","unresolved":true,"context_lines":[{"line_number":55,"context_line":"        self.setup_objects()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class TestS3ApiBucketForServerErrorListings(BaseS3ApiBucket, S3ApiTestCase):"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_bucket_GET_basic(self):"},{"line_number":61,"context_line":"        req \u003d Request.blank(\u0027/bucket\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"b560f069_a12692db","line":58,"updated":"2024-08-19 15:37:05.000000000","message":"I think maybe just name this TestS3APIBucketListings - since we\u0027re probably going to flesh out more scenarios and we don\u0027t actually want a ServerError","commit_id":"e0e3b3d6738e377f39deed87f3b43569436414b8"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"55dd57d8a7aa1fbef1feb81a639f135a6e1a7075","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.setup_objects()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class TestS3ApiBucketForServerErrorListings(BaseS3ApiBucket, S3ApiTestCase):"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_bucket_GET_basic(self):"},{"line_number":61,"context_line":"        req \u003d Request.blank(\u0027/bucket\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"c64f9ed9_852988f2","line":58,"in_reply_to":"b560f069_a12692db","updated":"2024-08-19 20:38:51.000000000","message":"Acknowledged","commit_id":"e0e3b3d6738e377f39deed87f3b43569436414b8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"05c2a48cd179af365a40ea3de7db8b167a8a4e69","unresolved":true,"context_lines":[{"line_number":73,"context_line":"        req \u003d Request.blank(\u0027/%s\u0027 % bucket_name,"},{"line_number":74,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027},"},{"line_number":75,"context_line":"                            headers\u003d{\u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"},{"line_number":76,"context_line":"                                     \u0027Date\u0027: self.get_date_header()})"},{"line_number":77,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":78,"context_line":"        self.assertEqual([(\u0027GET\u0027, \u0027/v1/AUTH_test/junk?limit\u003d1001\u0027)],"},{"line_number":79,"context_line":"                         self.swift.calls)"}],"source_content_type":"text/x-python","patch_set":5,"id":"8972a33f_f2b581f6","line":76,"updated":"2024-08-19 15:37:05.000000000","message":"I think I discovered by examining requests logs that the client sends a query string like `?encode_type\u003durl` s3api will return a 200 response\n\nI think you should be able to rename this to `test_bucket_GET_no_encode_type` and duplicate it for a `test_bucket_GET_with_encode_type_url` and hopefully has a success/control case availabe in unitests so you can debug either path and compare the responses.","commit_id":"e0e3b3d6738e377f39deed87f3b43569436414b8"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"55dd57d8a7aa1fbef1feb81a639f135a6e1a7075","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        req \u003d Request.blank(\u0027/%s\u0027 % bucket_name,"},{"line_number":74,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027},"},{"line_number":75,"context_line":"                            headers\u003d{\u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"},{"line_number":76,"context_line":"                                     \u0027Date\u0027: self.get_date_header()})"},{"line_number":77,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":78,"context_line":"        self.assertEqual([(\u0027GET\u0027, \u0027/v1/AUTH_test/junk?limit\u003d1001\u0027)],"},{"line_number":79,"context_line":"                         self.swift.calls)"}],"source_content_type":"text/x-python","patch_set":5,"id":"a5da8cd7_321c62e3","line":76,"in_reply_to":"8972a33f_f2b581f6","updated":"2024-08-19 20:38:51.000000000","message":"Acknowledged","commit_id":"e0e3b3d6738e377f39deed87f3b43569436414b8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"05c2a48cd179af365a40ea3de7db8b167a8a4e69","unresolved":true,"context_lines":[{"line_number":77,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":78,"context_line":"        self.assertEqual([(\u0027GET\u0027, \u0027/v1/AUTH_test/junk?limit\u003d1001\u0027)],"},{"line_number":79,"context_line":"                         self.swift.calls)"},{"line_number":80,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":81,"context_line":"        self.assertEqual(\u0027/v1/AUTH_test/junk\u0027,"},{"line_number":82,"context_line":"                         req.environ.get(\u0027swift.backend_path\u0027))"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"e2ec0e3d_cb8ca89a","line":80,"updated":"2024-08-19 15:37:05.000000000","message":"oh, ok good - so this doesn\u0027t actually work\n\n```\nFAILED test/unit/common/middleware/s3api/test_object_listing.py::TestS3ApiBucketForServerErrorListings::test_bucket_GET\n\u003d\u003d\u003d\u003d\u003d\u003d 1 failed, 9315 passed, 1 skipped, 14 warnings in 727.51s (0:12:07) \u003d\u003d\u003d\u003d\u003d\u003d\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 test session starts \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nplatform linux -- Python 3.8.10, pytest-8.1.2, pluggy-1.5.0 -- /home/zuul/src/opendev.org/openstack/swift/.tox/py38/bin/python\ncachedir: .tox/py38/.pytest_cache\nrootdir: /home/zuul/src/opendev.org/openstack/swift\nconfigfile: tox.ini\nplugins: cov-4.1.0\ncollecting ... collected 9317 items / 9316 deselected / 1 selected\nrun-last-failure: rerun previous 1 failure\n\ntest/unit/common/middleware/s3api/test_object_listing.py::TestS3ApiBucketForServerErrorListings::test_bucket_GET FAILED [100%]\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 FAILURES \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\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____________ TestS3ApiBucketForServerErrorListings.test_bucket_GET _____________\n\nself \u003d \u003ctest.unit.common.middleware.s3api.test_object_listing.TestS3ApiBucketForServerErrorListings testMethod\u003dtest_bucket_GET\u003e\n\n    def test_bucket_GET(self):\n        self.logger.clear()\n        bucket_name \u003d \u0027junk\u0027\n        req \u003d Request.blank(\u0027/%s\u0027 % bucket_name,\n                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027},\n                            headers\u003d{\u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,\n                                     \u0027Date\u0027: self.get_date_header()})\n        status, headers, body \u003d self.call_s3api(req)\n        self.assertEqual([(\u0027GET\u0027, \u0027/v1/AUTH_test/junk?limit\u003d1001\u0027)],\n                         self.swift.calls)\n\u003e       self.assertEqual(status.split()[0], \u0027200\u0027)\nE       AssertionError: \u0027500\u0027 !\u003d \u0027200\u0027\nE       - 500\nE       ? ^\nE       + 200\nE       ? ^\n\ntest/unit/common/middleware/s3api/test_object_listing.py:80: AssertionError\n```\n\nTim has suggested it may not be easy to fix; but it\u0027s probably time to get in a debugger at line 80 and try to brain storm some options to change that code so that it does something besides raise a ValueError and return a ServerError","commit_id":"e0e3b3d6738e377f39deed87f3b43569436414b8"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"55dd57d8a7aa1fbef1feb81a639f135a6e1a7075","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":78,"context_line":"        self.assertEqual([(\u0027GET\u0027, \u0027/v1/AUTH_test/junk?limit\u003d1001\u0027)],"},{"line_number":79,"context_line":"                         self.swift.calls)"},{"line_number":80,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":81,"context_line":"        self.assertEqual(\u0027/v1/AUTH_test/junk\u0027,"},{"line_number":82,"context_line":"                         req.environ.get(\u0027swift.backend_path\u0027))"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"f74666d8_aba3aee7","line":80,"in_reply_to":"e2ec0e3d_cb8ca89a","updated":"2024-08-19 20:38:51.000000000","message":"Acknowledged","commit_id":"e0e3b3d6738e377f39deed87f3b43569436414b8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"981157d8141e6438a9d716b83aa8fd86d1e788b4","unresolved":true,"context_lines":[{"line_number":74,"context_line":"        name \u003d elem.find(\u0027./Name\u0027).text"},{"line_number":75,"context_line":"        self.assertEqual(name, \u0027bucket\u0027)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def test_bucket_GET_with_encode_type_url(self):"},{"line_number":78,"context_line":"        bucket_name \u003d \u0027junk\u0027"},{"line_number":79,"context_line":"        req \u003d Request.blank(\u0027/%s?encoding-type\u003durl\u0027 % bucket_name,"},{"line_number":80,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027},"}],"source_content_type":"text/x-python","patch_set":8,"id":"18a9b5ba_5631661b","line":77,"updated":"2024-08-23 16:19:00.000000000","message":"We need another test for GET /junk w/o `?encode_type\u003durl`","commit_id":"44f7b0770d999655f001a66bbc6551f208171201"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"3c163588b90910b7b117b3e51eded6c3d0ee3513","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        name \u003d elem.find(\u0027./Name\u0027).text"},{"line_number":75,"context_line":"        self.assertEqual(name, \u0027bucket\u0027)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def test_bucket_GET_with_encode_type_url(self):"},{"line_number":78,"context_line":"        bucket_name \u003d \u0027junk\u0027"},{"line_number":79,"context_line":"        req \u003d Request.blank(\u0027/%s?encoding-type\u003durl\u0027 % bucket_name,"},{"line_number":80,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027},"}],"source_content_type":"text/x-python","patch_set":8,"id":"f5e7edfb_0f04ae06","line":77,"in_reply_to":"18a9b5ba_5631661b","updated":"2024-08-23 19:24:14.000000000","message":"Acknowledged","commit_id":"44f7b0770d999655f001a66bbc6551f208171201"}]}
