)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"c6a63349dc36b1cd08621fb4a7193962cf8d5073","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a8a47e61_2c5fe4d2","updated":"2024-11-06 21:28:14.000000000","message":"recheck","commit_id":"8b97de4dceae41f288d35e4da48c4434bd9ad6af"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"72f96487918ab2ea95d830a648ede9b78bb9ea16","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"dbc88b3f_869c6a28","updated":"2024-12-03 23:05:28.000000000","message":"Reverting this back to a wip since it seems to be less of a priority","commit_id":"398236166a1efdf0343fa1a037835e4af23b4834"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"ac424a61f2351c2f01d287884e0653cf61efb5ce","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"40fd2bac_2184caa4","updated":"2024-12-03 23:49:17.000000000","message":"This is going to be re-written as a patchset proposal to the feature-branch mp, watch out for it in https://review.opendev.org/q/project:openstack/swift+branch:feature/mpu+status:open","commit_id":"9eed80bb17ec8650c1b998410ad97749edf28c31"}],"swift/common/middleware/s3api/controllers/multi_upload.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"25b73d9ebfedf34d1d5821c975f822af20c3536e","unresolved":true,"context_lines":[{"line_number":714,"context_line":""},{"line_number":715,"context_line":"            complete_elem \u003d fromstring("},{"line_number":716,"context_line":"                xml, \u0027CompleteMultipartUpload\u0027, self.logger)"},{"line_number":717,"context_line":"            validator \u003d PartValidator()"},{"line_number":718,"context_line":"            for part_elem in complete_elem.iterchildren(\u0027Part\u0027):"},{"line_number":719,"context_line":"                part_number \u003d int(part_elem.find(\u0027./PartNumber\u0027).text)"},{"line_number":720,"context_line":"                etag \u003d normalize_etag(part_elem.find(\u0027./ETag\u0027).text)"}],"source_content_type":"text/x-python","patch_set":9,"id":"b6cbda79_aa9ab0e7","line":717,"updated":"2024-11-13 21:24:41.000000000","message":"Eventually with feature/mpu this will all be delegated to the mpu middleware, so I\u0027m not too invested in improving this, but that said...this is a very long method and there\u0027s definitely an opportunity to break out the manifest parsing. But perhaps break out *all the parsing* rather than just the part validation to a *method*.\n\nSee for comparison on feature/mpu https://github.com/openstack/swift/blob/feature/mpu/swift/common/middleware/mpu.py#L750","commit_id":"38a9926c5ba68ff8e5d202ce5d177fbeb6a5da52"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"6a2219a4ac6f2e0b7518c3abe763594b95557ce3","unresolved":true,"context_lines":[{"line_number":714,"context_line":""},{"line_number":715,"context_line":"            complete_elem \u003d fromstring("},{"line_number":716,"context_line":"                xml, \u0027CompleteMultipartUpload\u0027, self.logger)"},{"line_number":717,"context_line":"            validator \u003d PartValidator()"},{"line_number":718,"context_line":"            for part_elem in complete_elem.iterchildren(\u0027Part\u0027):"},{"line_number":719,"context_line":"                part_number \u003d int(part_elem.find(\u0027./PartNumber\u0027).text)"},{"line_number":720,"context_line":"                etag \u003d normalize_etag(part_elem.find(\u0027./ETag\u0027).text)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7ec094b8_1cc654b8","line":717,"in_reply_to":"b6cbda79_aa9ab0e7","updated":"2024-11-22 17:07:57.000000000","message":"Acknowledged","commit_id":"38a9926c5ba68ff8e5d202ce5d177fbeb6a5da52"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"21d6a3a1c2c4eaf69742433905b0eb2b811c9bfa","unresolved":true,"context_lines":[{"line_number":727,"context_line":"                    s3_etag_hasher.update(binascii.a2b_hex(etag))"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"                # Check if there are any missing parts"},{"line_number":730,"context_line":"                if validator.previous_part !\u003d len(manifest):"},{"line_number":731,"context_line":"                    raise InvalidPart("},{"line_number":732,"context_line":"                        upload_id\u003dupload_id,"},{"line_number":733,"context_line":"                        part_number\u003dvalidator.previous_part + 1)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ecf76495_b09c9c5e","line":730,"updated":"2024-11-13 19:03:55.000000000","message":"Func test failures look legit; I\u0027m pretty sure this check is breaking this test: https://github.com/openstack/swift/blob/2.34.0/test/functional/s3api/test_multi_upload.py#L841-L863","commit_id":"38a9926c5ba68ff8e5d202ce5d177fbeb6a5da52"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"6a2219a4ac6f2e0b7518c3abe763594b95557ce3","unresolved":false,"context_lines":[{"line_number":727,"context_line":"                    s3_etag_hasher.update(binascii.a2b_hex(etag))"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"                # Check if there are any missing parts"},{"line_number":730,"context_line":"                if validator.previous_part !\u003d len(manifest):"},{"line_number":731,"context_line":"                    raise InvalidPart("},{"line_number":732,"context_line":"                        upload_id\u003dupload_id,"},{"line_number":733,"context_line":"                        part_number\u003dvalidator.previous_part + 1)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5ee537c0_f1985dc0","line":730,"in_reply_to":"b88e2d30_f3aa216d","updated":"2024-11-22 17:07:57.000000000","message":"Acknowledged","commit_id":"38a9926c5ba68ff8e5d202ce5d177fbeb6a5da52"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"25b73d9ebfedf34d1d5821c975f822af20c3536e","unresolved":true,"context_lines":[{"line_number":727,"context_line":"                    s3_etag_hasher.update(binascii.a2b_hex(etag))"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"                # Check if there are any missing parts"},{"line_number":730,"context_line":"                if validator.previous_part !\u003d len(manifest):"},{"line_number":731,"context_line":"                    raise InvalidPart("},{"line_number":732,"context_line":"                        upload_id\u003dupload_id,"},{"line_number":733,"context_line":"                        part_number\u003dvalidator.previous_part + 1)"}],"source_content_type":"text/x-python","patch_set":9,"id":"b88e2d30_f3aa216d","line":730,"in_reply_to":"ecf76495_b09c9c5e","updated":"2024-11-13 21:24:41.000000000","message":"s3api requires parts cited in the manifest to be in ascending order but does allow for gaps.\n\nI have some tests to verify this in this patch https://review.opendev.org/c/openstack/swift/+/931187/1/test/s3api/test_mpu.py#844\n\n(there may be some tests in that patch that we could merge to master, but this particular one fails for swift)","commit_id":"38a9926c5ba68ff8e5d202ce5d177fbeb6a5da52"}],"test/s3api/test_mpu.py":[{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"fc0a6f9f423244214d47e3fe6f66f2c029aed0e6","unresolved":true,"context_lines":[{"line_number":630,"context_line":"        self.assertEqual(\u0027InvalidPart\u0027,"},{"line_number":631,"context_line":"                         complete_mpu_resp[\u0027Error\u0027][\u0027Code\u0027])"},{"line_number":632,"context_line":"        self.assertTrue(complete_mpu_resp[\u0027Error\u0027][\u0027Message\u0027].startswith("},{"line_number":633,"context_line":"            \u0027One or more of the specified parts could not be found.\u0027"},{"line_number":634,"context_line":"        ), complete_mpu_resp[\u0027Error\u0027][\u0027Message\u0027])"},{"line_number":635,"context_line":"        self.assertEqual(complete_mpu_resp[\u0027Error\u0027][\u0027UploadId\u0027], upload_id)"},{"line_number":636,"context_line":"        self.assertIn(complete_mpu_resp[\u0027Error\u0027][\u0027PartNumber\u0027], \u00271\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7c9d2d04_020ee749","line":633,"updated":"2024-11-06 23:16:30.000000000","message":"This cross-compat test exposes the gap in our s3api compatibility when looking up missing parts","commit_id":"c69aef72ba1243240e5978b51daa0b98a45bc326"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"6b8e89e5b5d204184ee198f3398df5e915b290d9","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        self.assertEqual(\u0027InvalidPart\u0027,"},{"line_number":631,"context_line":"                         complete_mpu_resp[\u0027Error\u0027][\u0027Code\u0027])"},{"line_number":632,"context_line":"        self.assertTrue(complete_mpu_resp[\u0027Error\u0027][\u0027Message\u0027].startswith("},{"line_number":633,"context_line":"            \u0027One or more of the specified parts could not be found.\u0027"},{"line_number":634,"context_line":"        ), complete_mpu_resp[\u0027Error\u0027][\u0027Message\u0027])"},{"line_number":635,"context_line":"        self.assertEqual(complete_mpu_resp[\u0027Error\u0027][\u0027UploadId\u0027], upload_id)"},{"line_number":636,"context_line":"        self.assertIn(complete_mpu_resp[\u0027Error\u0027][\u0027PartNumber\u0027], \u00271\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"eddf3af1_46d103c0","line":633,"in_reply_to":"7c9d2d04_020ee749","updated":"2024-11-08 17:16:59.000000000","message":"Done","commit_id":"c69aef72ba1243240e5978b51daa0b98a45bc326"}]}
