)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eef1ecbdfa6b86f1e36127c8ec3e9c51b43ac41c","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Clay Gerrard \u003cclay.gerrard@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2024-11-22 14:29:25 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Ensure correct content-type in container HEAD response"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A failing CORS test in the gate discovered that we were responding"},{"line_number":10,"context_line":"application/json to ?format\u003dtxt requests (which is maybe not even a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"6604da95_0292c134","line":7,"updated":"2024-11-25 11:13:26.000000000","message":"Confusing that this subject line is exactly the same as the related-change.\n\nThe two could be differentiated by saying ``backend HEAD response`` or by saying ``account/container HEAD response`` or both.\n\nWe failed to mention account responses in the related-change subject line :( but the patch is modifying both so there\u0027s no reason to single out `container` in the subject line.","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9ff91e6063a7ca34ad47ad58c94adebd2ad812ac","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Clay Gerrard \u003cclay.gerrard@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2024-11-22 14:29:25 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Ensure correct content-type in container HEAD response"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A failing CORS test in the gate discovered that we were responding"},{"line_number":10,"context_line":"application/json to ?format\u003dtxt requests (which is maybe not even a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"e64450b9_bb9d81db","line":7,"in_reply_to":"6604da95_0292c134","updated":"2024-11-25 11:16:56.000000000","message":"Now that the functional tests have gone from this patch, it seems odd that it claims to ensure content-type in response but is actually adding content-length to responses. I mean, I understand the knock-on effect in the proxy, but it makes me keener to elaborate on the \u0027why\u0027 in the commit message.","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"25856f226fe68bc35440c9585ffb46509f45f32d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Clay Gerrard \u003cclay.gerrard@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2024-11-22 14:29:25 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Ensure correct content-type in container HEAD response"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A failing CORS test in the gate discovered that we were responding"},{"line_number":10,"context_line":"application/json to ?format\u003dtxt requests (which is maybe not even a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"73167928_f74dab36","line":7,"in_reply_to":"e64450b9_bb9d81db","updated":"2024-11-25 17:24:54.000000000","message":"Acknowledged","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eef1ecbdfa6b86f1e36127c8ec3e9c51b43ac41c","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Ensure correct content-type in container HEAD response"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A failing CORS test in the gate discovered that we were responding"},{"line_number":10,"context_line":"application/json to ?format\u003dtxt requests (which is maybe not even a"},{"line_number":11,"context_line":"valid value for that qs param?), but only when running with"},{"line_number":12,"context_line":"eventlet\u003d\u003d0.38.0"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This directly fixes the problem of backend account and container server"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"f75f4f8f_aaddf29c","line":11,"range":{"start_line":10,"start_character":20,"end_line":11,"end_character":31},"updated":"2024-11-25 11:13:26.000000000","message":"I\u0027m a little concerned that when we look back at this commit message, the ``format\u003dtxt`` issue could be a red herring [1]. The bug was that the HEAD response had content-type\u003dapplication/json for *any* requested format. There was also a format\u003dxml test failing.\n\nHow about:\n\n```\nA failing CORS test in the gate discovered that, when running with eventlet\u003d\u003d0.38.0, container and account HEAD requests returned Content-Type of application/json regardless of the requested format. This was due to the backend HEAD response no longer having a Content-Length header, causing the listing_formats middleware to not modify the returned Content-Type (see Related-Change).\n```\n\n[1] https://en.wikipedia.org/wiki/Red_herring#:~:text\u003dA%20red%20herring%20is%20something,audiences%20toward%20a%20false%20conclusion.","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"25856f226fe68bc35440c9585ffb46509f45f32d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Ensure correct content-type in container HEAD response"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A failing CORS test in the gate discovered that we were responding"},{"line_number":10,"context_line":"application/json to ?format\u003dtxt requests (which is maybe not even a"},{"line_number":11,"context_line":"valid value for that qs param?), but only when running with"},{"line_number":12,"context_line":"eventlet\u003d\u003d0.38.0"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This directly fixes the problem of backend account and container server"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"491898e1_473ad0f2","line":11,"range":{"start_line":10,"start_character":20,"end_line":11,"end_character":31},"in_reply_to":"f75f4f8f_aaddf29c","updated":"2024-11-25 17:24:54.000000000","message":"Acknowledged","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eef1ecbdfa6b86f1e36127c8ec3e9c51b43ac41c","unresolved":true,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This directly fixes the problem of backend account and container server"},{"line_number":15,"context_line":"HEADs no longer having \u0027Content-Length: 0\u0027 by adding it explicitly"},{"line_number":16,"context_line":"(which is ok for 204)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Idacc59c5f43367926eff5221ee7fc417a9bc2d50"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"c83bb724_f923dbbc","line":16,"range":{"start_line":16,"start_character":1,"end_line":16,"end_character":20},"updated":"2024-11-25 11:13:26.000000000","message":"The rfc is pretty clear that it\u0027s *not* ok to return content-length with a 204 [2] which is why eventlet was changed and we ended up with the problem.\n\nShould we actually be saying:\n\n```\nThis violates the RFC prohibition of a 204 response having a Content-Length header [2], but preserves Swift\u0027s historic behavior.\n```\n\n[2] https://httpwg.org/specs/rfc7230.html#header.content-length","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"25856f226fe68bc35440c9585ffb46509f45f32d","unresolved":true,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This directly fixes the problem of backend account and container server"},{"line_number":15,"context_line":"HEADs no longer having \u0027Content-Length: 0\u0027 by adding it explicitly"},{"line_number":16,"context_line":"(which is ok for 204)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Idacc59c5f43367926eff5221ee7fc417a9bc2d50"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1dd7ce98_7eb8f715","line":16,"range":{"start_line":16,"start_character":1,"end_line":16,"end_character":20},"in_reply_to":"c83bb724_f923dbbc","updated":"2024-11-25 17:24:54.000000000","message":"\u003e A server MUST NOT send a Content-Length header field in any response with a status code of 1xx (Informational) or 204 (No Content)\n\nthat\u0027s funny; the mozzila example for a DELETE repsonse returns 204 with a content-length 0\n\nhttps://developer.mozilla.org/en-US/docs/Web/HTTP/Status/204","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eef1ecbdfa6b86f1e36127c8ec3e9c51b43ac41c","unresolved":true,"context_lines":[{"line_number":14,"context_line":"This directly fixes the problem of backend account and container server"},{"line_number":15,"context_line":"HEADs no longer having \u0027Content-Length: 0\u0027 by adding it explicitly"},{"line_number":16,"context_line":"(which is ok for 204)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Idacc59c5f43367926eff5221ee7fc417a9bc2d50"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"294b1156_4f2b2052","line":17,"updated":"2024-11-25 11:13:26.000000000","message":"would be good to have:\n\nRelated-Change: If724485e1425d1481d10b9255436301e346f07e8","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"25856f226fe68bc35440c9585ffb46509f45f32d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"This directly fixes the problem of backend account and container server"},{"line_number":15,"context_line":"HEADs no longer having \u0027Content-Length: 0\u0027 by adding it explicitly"},{"line_number":16,"context_line":"(which is ok for 204)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Idacc59c5f43367926eff5221ee7fc417a9bc2d50"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"16497493_5b95e6ba","line":17,"in_reply_to":"294b1156_4f2b2052","updated":"2024-11-25 17:24:54.000000000","message":"Done","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"ba677f8828632d6c228f1b053b96456b809bdad3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f22ea663_98b8b32d","updated":"2024-11-22 23:47:52.000000000","message":"I think we should land both this patch and https://review.opendev.org/c/openstack/swift/+/935817.","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"2fa2d2177d85ab5fbe1a117f5f89db70ff543ca9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b06b2da0_e25403e8","updated":"2024-11-22 21:10:42.000000000","message":"might need a rebase to de-duple the functional tests if 935817: Ensure correct content-type in container HEAD response | https://review.opendev.org/c/openstack/swift/+/935817 managed to land","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eef1ecbdfa6b86f1e36127c8ec3e9c51b43ac41c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"de06c1d3_2e661905","updated":"2024-11-25 11:13:26.000000000","message":"this will need a rebase at which point the functional tests will drop from this diff, but test_account.py did alert me to another wrinkle in the HEAD response to clients (see inline comment) :/\n\nApart from that my -1 is for the commit message, the code change \u0026 tests looks good.","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f12143ad5af046b9720a05f49894ecdcb3333dfb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0a31654d_5891cb25","updated":"2024-11-25 11:35:44.000000000","message":"@Clay I have rebased this now that the related change has merged, and I also had the timerity to edit the commit message ... hoping to make progress but at the risk of getting it wrong!\n\nThere may be an argument that says we don\u0027t need this change now that the proxy middleware has a fix, and indeed that we shouldn\u0027t break the RFC in more places, but personally I\u0027d prefer we broke the RFC consistently and explicitly, rather than rely on subtlety to maintain the documented external API. I think it\u0027s helpful for the backend server API to behave similarly to the client-facing API whenever possible.","commit_id":"4aadb54025085d6bf6c3ca71320004fd50667849"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"25856f226fe68bc35440c9585ffb46509f45f32d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1d0b0339_b472a225","updated":"2024-11-25 17:24:54.000000000","message":"rebase and new commit message looks good to me!","commit_id":"4aadb54025085d6bf6c3ca71320004fd50667849"}],"test/functional/test_account.py":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"ba677f8828632d6c228f1b053b96456b809bdad3","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        new_metadata \u003d self.get_meta().keys()"},{"line_number":100,"context_line":"        self.clear_meta(new_metadata)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def test_GET_HEAD_content_type(self):"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        def send_req(url, token, parsed, conn, method, params):"},{"line_number":105,"context_line":"            qs \u003d \u0027?%s\u0027 % urllib.parse.urlencode(params) if params else \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"aaa917bc_22164d05","line":102,"updated":"2024-11-22 23:47:52.000000000","message":"this test is duplicated in https://review.opendev.org/c/openstack/swift/+/935817","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"25856f226fe68bc35440c9585ffb46509f45f32d","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        new_metadata \u003d self.get_meta().keys()"},{"line_number":100,"context_line":"        self.clear_meta(new_metadata)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def test_GET_HEAD_content_type(self):"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        def send_req(url, token, parsed, conn, method, params):"},{"line_number":105,"context_line":"            qs \u003d \u0027?%s\u0027 % urllib.parse.urlencode(params) if params else \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"b24db0b2_7203f2d5","line":102,"in_reply_to":"aaa917bc_22164d05","updated":"2024-11-25 17:24:54.000000000","message":"Done","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eef1ecbdfa6b86f1e36127c8ec3e9c51b43ac41c","unresolved":true,"context_lines":[{"line_number":113,"context_line":"        self.assertEqual(resp.getheader(\u0027Content-Length\u0027), \u00270\u0027)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        resp \u003d retry(send_req, \u0027HEAD\u0027, {})"},{"line_number":116,"context_line":"        self.assertEqual(resp.status, 204)"},{"line_number":117,"context_line":"        self.assertEqual(resp.getheader(\u0027Content-Type\u0027),"},{"line_number":118,"context_line":"                         \u0027text/plain; charset\u003dutf-8\u0027)"},{"line_number":119,"context_line":"        self.assertEqual(resp.getheader(\u0027Content-Length\u0027), \u00270\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"0eab902b_5506ceb8","line":116,"updated":"2024-11-25 11:13:26.000000000","message":"first time I ran this it failed here 😭, then it was fine on subrequests. I had just done a resetswift.\n\n```\n    def test_GET_HEAD_content_type(self):\n\n        def send_req(url, token, parsed, conn, method, params):\n            qs \u003d \u0027?%s\u0027 % urllib.parse.urlencode(params) if params else \u0027\u0027\n            conn.request(method, parsed.path + qs, \u0027\u0027, {\u0027X-Auth-Token\u0027: token})\n            return check_response(conn)\n\n        resp \u003d retry(send_req, \u0027GET\u0027, {})\n        self.assertEqual(resp.status, 204)\n        self.assertEqual(resp.getheader(\u0027Content-Type\u0027),\n                         \u0027text/plain; charset\u003dutf-8\u0027)\n        self.assertEqual(resp.getheader(\u0027Content-Length\u0027), \u00270\u0027)\n\n        resp \u003d retry(send_req, \u0027HEAD\u0027, {})\n\u003e       self.assertEqual(resp.status, 204)\nE       AssertionError: 200 !\u003d 204\n\ntest/functional/test_account.py:116: AssertionError\n```\n\nI think what\u0027s happening is:\n\n* account doesn\u0027t exist, backend returns 404\n* proxy builds a fake listing response, which returns a 200 because listing_formats has set the requested format to application/json\nhttps://github.com/openstack/swift/blob/698717d886b2b55ea9b490719851c85c20b57240/swift/account/utils.py#L99-L101\n* listing_formats returns early for a HEAD and the client gets the 200.\n\nSo how come the preceding GET got a 204 ??\n* same steps as for HEAD except listing_formats doesn\u0027t return early for a GET and explicitly sets status to 204 when there\u0027s no body !!\n\nI think we should decide which component is responsible for implementing the external API and enforce it by always returning a 204 for a HEAD response. Perhaps listing_formats, but perhaps the account_listing_response helper should change?","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"25856f226fe68bc35440c9585ffb46509f45f32d","unresolved":true,"context_lines":[{"line_number":113,"context_line":"        self.assertEqual(resp.getheader(\u0027Content-Length\u0027), \u00270\u0027)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        resp \u003d retry(send_req, \u0027HEAD\u0027, {})"},{"line_number":116,"context_line":"        self.assertEqual(resp.status, 204)"},{"line_number":117,"context_line":"        self.assertEqual(resp.getheader(\u0027Content-Type\u0027),"},{"line_number":118,"context_line":"                         \u0027text/plain; charset\u003dutf-8\u0027)"},{"line_number":119,"context_line":"        self.assertEqual(resp.getheader(\u0027Content-Length\u0027), \u00270\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"0556c384_f5448b99","line":116,"in_reply_to":"0eab902b_5506ceb8","updated":"2024-11-25 17:24:54.000000000","message":"I mean the proxy HAS to generate the 204 for HEAD when it\u0027s making up the account response from 404s.\n\n\u003e listing_formats returns early for a HEAD and the client gets the 200.\n\n... but the backend WOULD have returned 204 for a HEAD - so this only applies when the proxy is faking up a response from 404s but with the wrong status code?\n\n\u003e doesn\u0027t return early for a GET and explicitly sets status to 204 when there\u0027s no body\n\nMaybe it\u0027s weird that we\u0027re forcing 204 on a GET which responds with an empty listing?\n\nProbably good to try and enumerate this difference in a bug/probetest as related follow-up?","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"}],"test/functional/test_container.py":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"ba677f8828632d6c228f1b053b96456b809bdad3","unresolved":true,"context_lines":[{"line_number":111,"context_line":"            # retry despite the request having been successfully processed."},{"line_number":112,"context_line":"            self.assertIn(resp.status, (204, 404))"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def test_GET_HEAD_content_type(self):"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        def send_req(url, token, parsed, conn, method, container, params):"},{"line_number":117,"context_line":"            qs \u003d \u0027?%s\u0027 % urllib.parse.urlencode(params) if params else \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"b757f447_56378021","line":114,"updated":"2024-11-22 23:47:52.000000000","message":"this too.","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"25856f226fe68bc35440c9585ffb46509f45f32d","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            # retry despite the request having been successfully processed."},{"line_number":112,"context_line":"            self.assertIn(resp.status, (204, 404))"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def test_GET_HEAD_content_type(self):"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        def send_req(url, token, parsed, conn, method, container, params):"},{"line_number":117,"context_line":"            qs \u003d \u0027?%s\u0027 % urllib.parse.urlencode(params) if params else \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9333a3c1_2f6a0b0c","line":114,"in_reply_to":"b757f447_56378021","updated":"2024-11-25 17:24:54.000000000","message":"Done","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"}],"test/unit/account/test_server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eef1ecbdfa6b86f1e36127c8ec3e9c51b43ac41c","unresolved":true,"context_lines":[{"line_number":347,"context_line":"            \u0027X-Timestamp\u0027: created_at_timestamp.normal,"},{"line_number":348,"context_line":"            \u0027X-Put-Timestamp\u0027: put_timestamp.normal,"},{"line_number":349,"context_line":"        }, dict(headers))"},{"line_number":350,"context_line":"        self.assertEqual(b\u0027\u0027, b\u0027\u0027.join(body_iter))"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"    def test_HEAD_empty_account(self):"},{"line_number":353,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a\u0027, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"993760b5_0cdbbbb2","line":350,"updated":"2024-11-25 11:13:26.000000000","message":"+1, fails with a useful diff when I revert the change","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"25856f226fe68bc35440c9585ffb46509f45f32d","unresolved":false,"context_lines":[{"line_number":347,"context_line":"            \u0027X-Timestamp\u0027: created_at_timestamp.normal,"},{"line_number":348,"context_line":"            \u0027X-Put-Timestamp\u0027: put_timestamp.normal,"},{"line_number":349,"context_line":"        }, dict(headers))"},{"line_number":350,"context_line":"        self.assertEqual(b\u0027\u0027, b\u0027\u0027.join(body_iter))"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"    def test_HEAD_empty_account(self):"},{"line_number":353,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a\u0027, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"e5cf4838_70ec6f48","line":350,"in_reply_to":"993760b5_0cdbbbb2","updated":"2024-11-25 17:24:54.000000000","message":"Acknowledged","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"}],"test/unit/container/test_server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eef1ecbdfa6b86f1e36127c8ec3e9c51b43ac41c","unresolved":true,"context_lines":[{"line_number":234,"context_line":"            \u0027X-Put-Timestamp\u0027: put_timestamp.normal,"},{"line_number":235,"context_line":"            \u0027X-Timestamp\u0027: created_at_timestamp.normal,"},{"line_number":236,"context_line":"        }, dict(headers))"},{"line_number":237,"context_line":"        self.assertEqual(b\u0027\u0027, b\u0027\u0027.join(body_iter))"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def _test_head(self, start, ts):"},{"line_number":240,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a/c\u0027, method\u003d\u0027HEAD\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e88ff3a9_ab299298","line":237,"updated":"2024-11-25 11:13:26.000000000","message":"+1, fails with a useful diff when I revert the change","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"25856f226fe68bc35440c9585ffb46509f45f32d","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            \u0027X-Put-Timestamp\u0027: put_timestamp.normal,"},{"line_number":235,"context_line":"            \u0027X-Timestamp\u0027: created_at_timestamp.normal,"},{"line_number":236,"context_line":"        }, dict(headers))"},{"line_number":237,"context_line":"        self.assertEqual(b\u0027\u0027, b\u0027\u0027.join(body_iter))"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def _test_head(self, start, ts):"},{"line_number":240,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a/c\u0027, method\u003d\u0027HEAD\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"429f7064_dafb1698","line":237,"in_reply_to":"e88ff3a9_ab299298","updated":"2024-11-25 17:24:54.000000000","message":"Acknowledged","commit_id":"1f0844f417f1b66f3dbc5d46689e00d6a3a0f8d9"}]}
