)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ffb2c172f65445a5973c5fd69a6c684599856b2b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4b7fbe92_26f01ee2","updated":"2023-09-17 20:13:45.000000000","message":"I\u0027m probably missing something else, cause this is still working even with the new tests.  I know the junk metadata is bad; but I think it was mostly only because s3api was to liberal in accepting the etag-is-at redirection on non-slo objects","commit_id":"a8952e43e62d0e73a4f8ade1266eac2f2a141ec3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"31a1e718efcaa194e92dddefd1351c1613a7b5cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ebd468f1_ebadb97c","updated":"2023-09-18 23:43:39.000000000","message":"Commit message needs updating, as does a comment in tests, but I\u0027m coming around on this.","commit_id":"76df818f69f4f0918a4876572b9139b6d48353fd"}],"swift/common/middleware/s3api/controllers/multi_upload.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a7b4cc57d93ea04797a3c708fa20b12fecd6b12f","unresolved":true,"context_lines":[{"line_number":231,"context_line":"                sysmeta_header(\u0027object\u0027, \u0027etag\u0027): \u0027\u0027,"},{"line_number":232,"context_line":"                \u0027X-Object-Sysmeta-Swift3-Etag\u0027: \u0027\u0027,  # for legacy data"},{"line_number":233,"context_line":"                \u0027X-Object-Sysmeta-Slo-Etag\u0027: \u0027\u0027,"},{"line_number":234,"context_line":"                \u0027X-Object-Sysmeta-Slo-Size\u0027: \u0027\u0027,"},{"line_number":235,"context_line":"                get_container_update_override_key(\u0027etag\u0027): \u0027\u0027,"},{"line_number":236,"context_line":"            })"},{"line_number":237,"context_line":"        resp \u003d req.get_response(self.app)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7e014eca_f03a087b","side":"PARENT","line":234,"updated":"2023-09-12 19:27:30.000000000","message":"This doesn\u0027t seem right. I\u0027m not convinced that we\u0027re going to get good MPUs upon completion -- when s3api builds up the manifest, [it only includes `path` and `etag` keys](https://github.com/openstack/swift/blob/2.32.0/swift/common/middleware/s3api/controllers/multi_upload.py#L719-L723); [slo writes down sizes based on the head response](https://github.com/openstack/swift/blob/2.32.0/swift/common/middleware/slo.py#L1281), which [goes through `self`](https://github.com/openstack/swift/blob/2.32.0/swift/common/middleware/slo.py#L1218) (not `self.app`!) so it can deal with submanifests.\n\nWe may or may not run into similar issues with _slo_ etags -- or maybe since we\u0027re no longer touching the header, we return the slo etag to the client here, so it _does_ work during validation? 🤷\n\nAt the same time, It looks like this **is** on top of the new func test, and tests are happy... digging into it a bit, I wasn\u0027t actually testing what I\u0027d meant to be testing -- one of the dangers of copying from existing tests...","commit_id":"1a960e01e886b3567277d06bcabb7bd41c178a4e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"31a1e718efcaa194e92dddefd1351c1613a7b5cb","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                sysmeta_header(\u0027object\u0027, \u0027etag\u0027): \u0027\u0027,"},{"line_number":232,"context_line":"                \u0027X-Object-Sysmeta-Swift3-Etag\u0027: \u0027\u0027,  # for legacy data"},{"line_number":233,"context_line":"                \u0027X-Object-Sysmeta-Slo-Etag\u0027: \u0027\u0027,"},{"line_number":234,"context_line":"                \u0027X-Object-Sysmeta-Slo-Size\u0027: \u0027\u0027,"},{"line_number":235,"context_line":"                get_container_update_override_key(\u0027etag\u0027): \u0027\u0027,"},{"line_number":236,"context_line":"            })"},{"line_number":237,"context_line":"        resp \u003d req.get_response(self.app)"}],"source_content_type":"text/x-python","patch_set":1,"id":"cfc35e95_be772697","side":"PARENT","line":234,"in_reply_to":"7e014eca_f03a087b","updated":"2023-09-18 23:43:39.000000000","message":"Never mind, ignore me -- SLO\u0027s smart enough to only *use* the sysmeta content-length/etag values if `x-static-large-object` is set.\n\nI still had a vague lingering worry about rolling upgrades, wondering whether we could get into trouble with either\n\n- old proxy gets the upload-part-copy request, new proxy gets the complete request or\n- new proxy gets the upload-part-copy request, old proxy gets the complete request\n\nbut in both cases, the etag returned to the client should be the proper MD5-of-the-part-content, as the func tests added in the parent patch demonstrate.","commit_id":"1a960e01e886b3567277d06bcabb7bd41c178a4e"}],"swift/common/middleware/s3api/s3response.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a7b4cc57d93ea04797a3c708fa20b12fecd6b12f","unresolved":true,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        self.is_slo \u003d config_true_value(sw_headers.get("},{"line_number":159,"context_line":"            \u0027x-static-large-object\u0027))"},{"line_number":160,"context_line":"        if self.is_slo:"},{"line_number":161,"context_line":"            # Check whether we stored the AWS-style etag on upload"},{"line_number":162,"context_line":"            override_etag \u003d s3_sysmeta_headers.get("},{"line_number":163,"context_line":"                sysmeta_header(\u0027object\u0027, \u0027etag\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9c0c28d7_e9eb0c59","line":160,"updated":"2023-09-12 19:27:30.000000000","message":"OK, this seems reasonable: we only expect our s3-etag header on SLOs, and we\u0027ve been burned before by it unexpectedly turning up on non-SLOs.","commit_id":"23e525a5a79cbf3ad4bca9eee580117e32b7b0bb"}],"test/unit/common/middleware/s3api/test_multi_upload.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"31a1e718efcaa194e92dddefd1351c1613a7b5cb","unresolved":true,"context_lines":[{"line_number":2362,"context_line":"        self.assertEqual(headers[\u0027Content-Length\u0027], \u00270\u0027)"},{"line_number":2363,"context_line":"        # In an attempt to work around lp bug#2035158 and fix MPU"},{"line_number":2364,"context_line":"        # part-copy-from-mpu-range s3api will force a few choice headers"},{"line_number":2365,"context_line":"        # to an invalid/empty value on EVERY s3api part copy request"},{"line_number":2366,"context_line":"        for header in ("},{"line_number":2367,"context_line":"            \u0027X-Object-Sysmeta-S3api-Etag\u0027,"},{"line_number":2368,"context_line":"            \u0027X-Object-Sysmeta-Slo-Etag\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"587b0a49_8d5602b5","line":2365,"updated":"2023-09-18 23:43:39.000000000","message":"Comment needs updating -- now we\u0027ll just go ahead and let \u0027em be bad (since they\u0027ll be ignored).","commit_id":"76df818f69f4f0918a4876572b9139b6d48353fd"}]}
