)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b6533f88821230d4faa2bd635d14d1ee39ebd77e","unresolved":true,"context_lines":[{"line_number":9,"context_line":"Including the MPU created timestamp in the upload id means that the"},{"line_number":10,"context_line":"timestamp appears in MPU resource names. That\u0027s useful to ensure that"},{"line_number":11,"context_line":"in-progress MPU sessions list in the correct order i.e. by name and"},{"line_number":12,"context_line":"then my created time."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Having the timestamp in the upload ID will also be useful when we come"},{"line_number":15,"context_line":"to determining the fate of an MPU resource whose object name matches a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"4d77e5dc_60b1023e","line":12,"range":{"start_line":12,"start_character":5,"end_line":12,"end_character":7},"updated":"2024-09-11 20:40:18.000000000","message":"by","commit_id":"4ebf3ba1e2fba53d8bcba68a8fa68b5e3bf9cdcb"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b6533f88821230d4faa2bd635d14d1ee39ebd77e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4db604ce_16656d93","updated":"2024-09-11 20:40:18.000000000","message":"I\u0027m a little nervous about the need to say `str(upload_id)` all over the place, but I\u0027m willing to trust that we\u0027ll have some use for `upload_id.timestamp`.","commit_id":"4ebf3ba1e2fba53d8bcba68a8fa68b5e3bf9cdcb"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b56b03875a31f1cabb395648efce1ca8814db903","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"2e6750b2_5950fbf2","updated":"2024-10-01 03:25:01.000000000","message":"recheck\n\nLooks like a legit hang:\n```\n2024-10-01 01:34:26.760911 | centos-9-stream | test/probe/test_sharder.py::TestContainerSharding::test_sharded_can_get_objects_different_policy_reversed PASSED [ 74%]\n2024-10-01 01:34:48.791279 | centos-9-stream | test/probe/test_sharder.py::TestContainerSharding::test_sharded_delete PASSED [ 74%]\n2024-10-01 01:35:44.629473 | centos-9-stream | test/probe/test_sharder.py::TestContainerSharding::test_sharded_listing_no_replicators PASSED [ 75%]\n2024-10-01 02:57:06.835206 | RUN END RESULT_TIMED_OUT: [untrusted : opendev.org/openstack/swift/tools/playbooks/probetests/run.yaml@feature/mpu]\n2024-10-01 02:57:06.838105 | POST-RUN START: [untrusted : opendev.org/openstack/swift/tools/playbooks/probetests/post.yaml@feature/mpu]\n```","commit_id":"cf7b57002c986ab683ac0b952838f3fba4a167b4"}],"swift/common/middleware/mpu.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b6533f88821230d4faa2bd635d14d1ee39ebd77e","unresolved":true,"context_lines":[{"line_number":235,"context_line":"        self._authorize_request(\u0027write_acl\u0027)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def make_relative_path(self, *parts):"},{"line_number":238,"context_line":"        return \u0027/\u0027.join([str(p) for p in parts])"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def make_path(self, *parts):"},{"line_number":241,"context_line":"        return \u0027/\u0027.join("}],"source_content_type":"text/x-python","patch_set":4,"id":"c7be2372_9dc4b1a5","line":238,"updated":"2024-09-11 20:40:18.000000000","message":"nit: This can just be a generator expression now, like\n```\n\u0027/\u0027.join(str(p) for p in parts)\n```","commit_id":"4ebf3ba1e2fba53d8bcba68a8fa68b5e3bf9cdcb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0fb77ffb46a6257864555978e69c473e32701dd3","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        self._authorize_request(\u0027write_acl\u0027)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def make_relative_path(self, *parts):"},{"line_number":238,"context_line":"        return \u0027/\u0027.join([str(p) for p in parts])"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def make_path(self, *parts):"},{"line_number":241,"context_line":"        return \u0027/\u0027.join("}],"source_content_type":"text/x-python","patch_set":4,"id":"5d7b8292_86bfbe42","line":238,"in_reply_to":"c7be2372_9dc4b1a5","updated":"2024-10-01 14:15:17.000000000","message":"done in a follow up","commit_id":"4ebf3ba1e2fba53d8bcba68a8fa68b5e3bf9cdcb"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"10c3e55b16b23624f05ccd51fd2b3caa1fdb8459","unresolved":true,"context_lines":[{"line_number":70,"context_line":"    Try to extract an upload id from request params."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    :param req: an instance of swob.Request"},{"line_number":73,"context_line":"    :raises ValueError: if upload-id exists but is invalid"},{"line_number":74,"context_line":"    :returns: an instance of MPUId"},{"line_number":75,"context_line":"    \"\"\""},{"line_number":76,"context_line":"    if \u0027upload-id\u0027 in req.params:"}],"source_content_type":"text/x-python","patch_set":7,"id":"cbc68c03_eec4d4ee","line":73,"updated":"2024-10-01 00:55:57.000000000","message":"If this gets thrown, where will it get caught?","commit_id":"cf7b57002c986ab683ac0b952838f3fba4a167b4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0fb77ffb46a6257864555978e69c473e32701dd3","unresolved":true,"context_lines":[{"line_number":70,"context_line":"    Try to extract an upload id from request params."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    :param req: an instance of swob.Request"},{"line_number":73,"context_line":"    :raises ValueError: if upload-id exists but is invalid"},{"line_number":74,"context_line":"    :returns: an instance of MPUId"},{"line_number":75,"context_line":"    \"\"\""},{"line_number":76,"context_line":"    if \u0027upload-id\u0027 in req.params:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5d5a024e_f6ab32e0","line":73,"in_reply_to":"cbc68c03_eec4d4ee","updated":"2024-10-01 14:15:17.000000000","message":"addressed here https://review.opendev.org/c/openstack/swift/+/931021 mpu: use \u0027:\u0027 delimiter for MPUId parts","commit_id":"cf7b57002c986ab683ac0b952838f3fba4a167b4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"10c3e55b16b23624f05ccd51fd2b3caa1fdb8459","unresolved":true,"context_lines":[{"line_number":100,"context_line":"    def __str__(self):"},{"line_number":101,"context_line":"        # MPU listing should be sorted by (\u003cobject name\u003e, \u003ccreation time\u003e)"},{"line_number":102,"context_line":"        # so we put the timestamp before the uuid."},{"line_number":103,"context_line":"        return \u0027_\u0027.join((self.timestamp.internal, self.uuid))"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @classmethod"},{"line_number":106,"context_line":"    def create(cls, timestamp):"}],"source_content_type":"text/x-python","patch_set":7,"id":"745fc606_23a323f8","line":103,"range":{"start_line":103,"start_character":25,"end_line":103,"end_character":39},"updated":"2024-10-01 00:55:57.000000000","message":"Can this ever have an `offset`? \u0027Cause that\u0027ll *also* add an underscore to things.","commit_id":"cf7b57002c986ab683ac0b952838f3fba4a167b4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0fb77ffb46a6257864555978e69c473e32701dd3","unresolved":true,"context_lines":[{"line_number":100,"context_line":"    def __str__(self):"},{"line_number":101,"context_line":"        # MPU listing should be sorted by (\u003cobject name\u003e, \u003ccreation time\u003e)"},{"line_number":102,"context_line":"        # so we put the timestamp before the uuid."},{"line_number":103,"context_line":"        return \u0027_\u0027.join((self.timestamp.internal, self.uuid))"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @classmethod"},{"line_number":106,"context_line":"    def create(cls, timestamp):"}],"source_content_type":"text/x-python","patch_set":7,"id":"da550111_790ceec2","line":103,"range":{"start_line":103,"start_character":25,"end_line":103,"end_character":39},"in_reply_to":"745fc606_23a323f8","updated":"2024-10-01 14:15:17.000000000","message":"hmmm, also url safe base64 encoded id\u0027s  can have ``_`` https://datatracker.ietf.org/doc/html/rfc4648.html#section-5 \n\nI guess I should use a different delimiter!\n\nhttps://review.opendev.org/c/openstack/swift/+/931021 mpu: use \u0027:\u0027 delimiter for MPUId parts","commit_id":"cf7b57002c986ab683ac0b952838f3fba4a167b4"}],"test/unit/common/middleware/test_mpu.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"10c3e55b16b23624f05ccd51fd2b3caa1fdb8459","unresolved":true,"context_lines":[{"line_number":44,"context_line":"        ts \u003d Timestamp.now()"},{"line_number":45,"context_line":"        mpu_id \u003d MPUId.create(ts)"},{"line_number":46,"context_line":"        req \u003d Request.blank(\u0027/v1/a/c\u0027, params\u003d{\u0027upload-id\u0027: str(mpu_id)})"},{"line_number":47,"context_line":"        self.assertEqual(mpu_id, get_upload_id(req))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        def do_test_bad_value(value):"},{"line_number":50,"context_line":"            with self.assertRaises(ValueError):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9922a4ef_64292a46","line":47,"updated":"2024-10-01 00:55:57.000000000","message":"This would be a real nice spot to see what happens with\n```\n        ts \u003d Timestamp.now(offset\u003d123)\n        mpu_id \u003d MPUId.create(ts)\n```","commit_id":"cf7b57002c986ab683ac0b952838f3fba4a167b4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0fb77ffb46a6257864555978e69c473e32701dd3","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        ts \u003d Timestamp.now()"},{"line_number":45,"context_line":"        mpu_id \u003d MPUId.create(ts)"},{"line_number":46,"context_line":"        req \u003d Request.blank(\u0027/v1/a/c\u0027, params\u003d{\u0027upload-id\u0027: str(mpu_id)})"},{"line_number":47,"context_line":"        self.assertEqual(mpu_id, get_upload_id(req))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        def do_test_bad_value(value):"},{"line_number":50,"context_line":"            with self.assertRaises(ValueError):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1b2d291d_9499a294","line":47,"in_reply_to":"9922a4ef_64292a46","updated":"2024-10-01 14:15:17.000000000","message":"Done","commit_id":"cf7b57002c986ab683ac0b952838f3fba4a167b4"}]}
