)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5bb53ba0e761f37f50dd8517ddbe0c18a9294524","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ab5aad1d_f30a2fe8","updated":"2023-09-12 01:45:50.000000000","message":"this was definately helpful at understading the SLO refactor ceph failure\n\nI think it\u0027s worth it to factor out the common setup:\n\nhttps://review.opendev.org/c/openstack/swift/+/894607\n\nIf we\u0027re going to merge this test I think we should at a minimum reference the related change that tried to address/paper-over the sysmeta leaking (by writing different invalid sysmeta)\n\nChange-Id: Id33a7ab9d0b8f33fede73eae540d6137708e1218\n\nProbably worth considering this as related to a (hopefully) eventual bugfix:\n\nRelated-Bug: #2035158\n\nI guess the original \"create mpu part from range copy of another mpu\" test didn\u0027t complete the MPU either:\n\nhttps://github.com/NVIDIA/swift/blob/master/test/functional/s3api/test_multi_upload.py#L387-L406\n\n... but that test does still fail w/o the funky \"write invalid empty sysmeta\" fix \n\n\t\t# Upload Part Copy -- MU as source\n\t\tkey, upload_id \u003d uploads[1]\n\t\tstatus, headers, body, resp_etag \u003d \\\n\t\t    self._upload_part_copy(bucket, keys[0], bucket,\n\t\t\t\t\t   key, upload_id, part_num\u003d2)\n\t\tself.assertEqual(status, 200)\n\t\tself.assertCommonResponseHeaders(headers)\n\t\tself.assertIn(\u0027content-type\u0027, headers)\n\t\tself.assertEqual(headers[\u0027content-type\u0027], \u0027application/xml\u0027)\n\t\tself.assertIn(\u0027content-length\u0027, headers)\n\t\tself.assertEqual(headers[\u0027content-length\u0027], str(len(body)))\n\t\tself.assertNotIn(\u0027etag\u0027, headers)\n\t\telem \u003d fromstring(body, \u0027CopyPartResult\u0027)\n\t    \n\t\tlast_modified \u003d elem.find(\u0027LastModified\u0027).text\n\t\tself.assertIsNotNone(last_modified)\n\t    \n\t\texp_content \u003d b\u0027a\u0027 * self.min_segment_size\n\t\tetag \u003d md5(exp_content, usedforsecurity\u003dFalse).hexdigest()\n\t\u003e       self.assertEqual(resp_etag, etag)\n\tE       AssertionError: \u002765d79814053817eae59f7c7cee98d3f8-1\u0027 !\u003d \u002779b281060d337b9b2b84ccf390adcf74\u0027\n\tE       - 65d79814053817eae59f7c7cee98d3f8-1\n\tE       + 79b281060d337b9b2b84ccf390adcf74\n\n\tswift/test/functional/s3api/test_multi_upload.py:406: AssertionError\n\n... which I don\u0027t think I understand exactly, since the segment object doesn\u0027t have the x-static-large-object key I don\u0027t know why the bogus metadata causes problems for s3api but https://bugs.launchpad.net/swift/+bug/2035158 for the swift side seems benign","commit_id":"1a960e01e886b3567277d06bcabb7bd41c178a4e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"313c11c2c1d1f0b6e4d0e97d51ffd8697334bc49","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"fc500194_89fbf3de","updated":"2023-09-17 20:12:29.000000000","message":"Tim, let me know if I got all the cases you wanted to see tested!","commit_id":"3e0c4c5f9c8ffe1929252b5f46a8ccd623eacdcd"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"da3137d1dc1fdb6c9fb3aa2a71ceefcb06ae85cc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"560b4e9b_948245be","updated":"2023-09-25 22:39:48.000000000","message":"i remove the unused/empty var in https://review.opendev.org/c/openstack/swift/+/896466","commit_id":"5392a2057bdf7e91878023cfdb0b7193d677a5b2"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"43baee9bbf05c0722fd3ba264ec3767550c827fc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"12bcfcc6_3c559ab7","updated":"2023-09-18 22:46:22.000000000","message":"of course it took me 5 tries, I hope everyone likes it well enough and finds it easy to review.","commit_id":"5392a2057bdf7e91878023cfdb0b7193d677a5b2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f3dcfa47ca1f11cc7794b1bb2d1beedc3019ea26","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"93813b2b_b0937d7d","updated":"2023-09-19 16:26:47.000000000","message":"recheck\n\nhttps://bugs.launchpad.net/swift/+bug/2034452","commit_id":"5392a2057bdf7e91878023cfdb0b7193d677a5b2"}],"test/functional/s3api/__init__.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"eb5a765ca3aef1e1d22bd8230df8ebe352f51948","unresolved":true,"context_lines":[{"line_number":110,"context_line":"        tear_down_s3(self.conn)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"def skip_boto2_sort_header_bug(m):"},{"line_number":114,"context_line":"    def wrapped(self, *args, **kwargs):"},{"line_number":115,"context_line":"        if (os.environ.get(\u0027S3_USE_SIGV4\u0027) \u003d\u003d \"True\" and"},{"line_number":116,"context_line":"                StrictVersion(boto.__version__) \u003c StrictVersion(\u00273.0\u0027)):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7bd96c1e_92206d69","line":113,"updated":"2023-09-18 23:31:23.000000000","message":"Nice! Much better for things like test renames, and just one place to reference the multitude of fixes available.","commit_id":"5392a2057bdf7e91878023cfdb0b7193d677a5b2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"eb5a765ca3aef1e1d22bd8230df8ebe352f51948","unresolved":true,"context_lines":[{"line_number":134,"context_line":"        del os.environ[\u0027S3_USE_SIGV4\u0027]"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def setUp(self):"},{"line_number":137,"context_line":"        super(SigV4Mixin, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"d7024c07_c10d0a5f","line":137,"updated":"2023-09-18 23:31:23.000000000","message":"I realize this got pulled from other places, but -- surely this isn\u0027t needed, is it?","commit_id":"5392a2057bdf7e91878023cfdb0b7193d677a5b2"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"da3137d1dc1fdb6c9fb3aa2a71ceefcb06ae85cc","unresolved":true,"context_lines":[{"line_number":134,"context_line":"        del os.environ[\u0027S3_USE_SIGV4\u0027]"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def setUp(self):"},{"line_number":137,"context_line":"        super(SigV4Mixin, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"40d5725d_c054b077","line":137,"in_reply_to":"d7024c07_c10d0a5f","updated":"2023-09-25 22:39:48.000000000","message":"heh, oh yeah - i hope not!","commit_id":"5392a2057bdf7e91878023cfdb0b7193d677a5b2"}],"test/functional/s3api/test_multi_upload.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5bb53ba0e761f37f50dd8517ddbe0c18a9294524","unresolved":true,"context_lines":[{"line_number":1050,"context_line":"        listing_last_modified \u003d [p.find(\u0027LastModified\u0027).text"},{"line_number":1051,"context_line":"                                 for p in elem.iterfind(\u0027Part\u0027)]"},{"line_number":1052,"context_line":"        # There should be *exactly* one parts in the result"},{"line_number":1053,"context_line":"        self.assertEqual(listing_last_modified, [copy_resp_last_modified])"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"        # Abort Multipart Upload"},{"line_number":1056,"context_line":"        key, upload_id \u003d uploads[0]"}],"source_content_type":"text/x-python","patch_set":1,"id":"171aaa3c_8d261972","line":1053,"updated":"2023-09-12 01:45:50.000000000","message":"i assume the ~60 lines between this and the _complete test are identical","commit_id":"60f3a44f7b60d8e625fbd612e65d4c43fcc51e62"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"43baee9bbf05c0722fd3ba264ec3767550c827fc","unresolved":false,"context_lines":[{"line_number":1050,"context_line":"        listing_last_modified \u003d [p.find(\u0027LastModified\u0027).text"},{"line_number":1051,"context_line":"                                 for p in elem.iterfind(\u0027Part\u0027)]"},{"line_number":1052,"context_line":"        # There should be *exactly* one parts in the result"},{"line_number":1053,"context_line":"        self.assertEqual(listing_last_modified, [copy_resp_last_modified])"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"        # Abort Multipart Upload"},{"line_number":1056,"context_line":"        key, upload_id \u003d uploads[0]"}],"source_content_type":"text/x-python","patch_set":1,"id":"d10b2d77_a20b25da","line":1053,"in_reply_to":"171aaa3c_8d261972","updated":"2023-09-18 22:46:22.000000000","message":"Done","commit_id":"60f3a44f7b60d8e625fbd612e65d4c43fcc51e62"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3ddbc02376894951fdbad0233c87a677c1c91992","unresolved":true,"context_lines":[{"line_number":908,"context_line":""},{"line_number":909,"context_line":"        # prepare src obj"},{"line_number":910,"context_line":"        self.conn.make_request(\u0027PUT\u0027, src_bucket)"},{"line_number":911,"context_line":"        self.conn.make_request(\u0027PUT\u0027, src_bucket, src_obj, body\u003dsrc_content)"},{"line_number":912,"context_line":"        _, headers, _ \u003d self.conn.make_request(\u0027HEAD\u0027, src_bucket, src_obj)"},{"line_number":913,"context_line":"        self.assertCommonResponseHeaders(headers)"},{"line_number":914,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"208173f2_7ef4a0f2","line":911,"updated":"2023-09-12 19:26:24.000000000","message":"Oh! This isn\u0027t even the test I really wanted! I meant to be copying from an already-completed MPU!","commit_id":"1a960e01e886b3567277d06bcabb7bd41c178a4e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"43baee9bbf05c0722fd3ba264ec3767550c827fc","unresolved":false,"context_lines":[{"line_number":908,"context_line":""},{"line_number":909,"context_line":"        # prepare src obj"},{"line_number":910,"context_line":"        self.conn.make_request(\u0027PUT\u0027, src_bucket)"},{"line_number":911,"context_line":"        self.conn.make_request(\u0027PUT\u0027, src_bucket, src_obj, body\u003dsrc_content)"},{"line_number":912,"context_line":"        _, headers, _ \u003d self.conn.make_request(\u0027HEAD\u0027, src_bucket, src_obj)"},{"line_number":913,"context_line":"        self.assertCommonResponseHeaders(headers)"},{"line_number":914,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fc020b17_a6e78d91","line":911,"in_reply_to":"208173f2_7ef4a0f2","updated":"2023-09-18 22:46:22.000000000","message":"Done","commit_id":"1a960e01e886b3567277d06bcabb7bd41c178a4e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"74c7218b7a4005e630c124eaa3a2fefdfaa76967","unresolved":true,"context_lines":[{"line_number":1232,"context_line":"            # or https://github.com/boto/boto/pull/3176"},{"line_number":1233,"context_line":"            # or https://github.com/boto/boto/pull/3751"},{"line_number":1234,"context_line":"            # or https://github.com/boto/boto/pull/3824"},{"line_number":1235,"context_line":"            self.skipTest(\u0027This stuff got the issue of boto\u003c\u003d2.x\u0027)"},{"line_number":1236,"context_line":""},{"line_number":1237,"context_line":"    def test_delete_bucket_multi_upload_object_exisiting(self):"},{"line_number":1238,"context_line":"        bucket \u003d \u0027bucket\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"95d7d0db_58173d87","line":1235,"updated":"2023-09-18 16:37:14.000000000","message":"We need to add similar skips for the new tests; see also https://github.com/boto/boto/pull/3032\n\nAlternatively, we could keep pushing on migrating the func test suite to using boto3; we started down that path a while ago with https://github.com/openstack/swift/commit/d4e79404 -- might be useful to go grepping for `get_boto3_conn`","commit_id":"3e0c4c5f9c8ffe1929252b5f46a8ccd623eacdcd"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"43baee9bbf05c0722fd3ba264ec3767550c827fc","unresolved":false,"context_lines":[{"line_number":1232,"context_line":"            # or https://github.com/boto/boto/pull/3176"},{"line_number":1233,"context_line":"            # or https://github.com/boto/boto/pull/3751"},{"line_number":1234,"context_line":"            # or https://github.com/boto/boto/pull/3824"},{"line_number":1235,"context_line":"            self.skipTest(\u0027This stuff got the issue of boto\u003c\u003d2.x\u0027)"},{"line_number":1236,"context_line":""},{"line_number":1237,"context_line":"    def test_delete_bucket_multi_upload_object_exisiting(self):"},{"line_number":1238,"context_line":"        bucket \u003d \u0027bucket\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"71f942ee_046579ba","line":1235,"in_reply_to":"95d7d0db_58173d87","updated":"2023-09-18 22:46:22.000000000","message":"Ack","commit_id":"3e0c4c5f9c8ffe1929252b5f46a8ccd623eacdcd"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"eb5a765ca3aef1e1d22bd8230df8ebe352f51948","unresolved":true,"context_lines":[{"line_number":1202,"context_line":"        self.assertTrue(\u0027content-length\u0027 in headers)"},{"line_number":1203,"context_line":"        self.assertEqual(headers[\u0027content-length\u0027], \u00270\u0027)"},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":"    def test_delete_bucket_multi_upload_object_exisiting(self):"},{"line_number":1206,"context_line":"        bucket \u003d \u0027bucket\u0027"},{"line_number":1207,"context_line":"        keys \u003d [\u0027obj1\u0027]"},{"line_number":1208,"context_line":"        uploads \u003d []"}],"source_content_type":"text/x-python","patch_set":5,"id":"634c63da_7f2c802a","line":1205,"updated":"2023-09-18 23:31:23.000000000","message":"I\u0027m kinda surprised there wasn\u0027t a reason this was v4-only...","commit_id":"5392a2057bdf7e91878023cfdb0b7193d677a5b2"}],"test/unit/common/middleware/test_slo.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"da3137d1dc1fdb6c9fb3aa2a71ceefcb06ae85cc","unresolved":true,"context_lines":[{"line_number":2383,"context_line":"        # empty values for these headers, but they\u0027re not SLOs and are missing"},{"line_number":2384,"context_line":"        # the X-Static-Large-Object marker sysmeta (thank goodness!)"},{"line_number":2385,"context_line":"        headers \u003d {"},{"line_number":2386,"context_line":"        }"},{"line_number":2387,"context_line":"        self.app.register("},{"line_number":2388,"context_line":"            \u0027GET\u0027, \u0027/v1/AUTH_test/bucket+segments/obj/uload-id/1\u0027,"},{"line_number":2389,"context_line":"            swob.HTTPOk, {"}],"source_content_type":"text/x-python","patch_set":5,"id":"6e775561_1f26f081","line":2386,"updated":"2023-09-25 22:39:48.000000000","message":"this empty dict ends up being un-used","commit_id":"5392a2057bdf7e91878023cfdb0b7193d677a5b2"}]}
