)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"860dd5be5f9048687ff36203134bce2a1d3e924c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"311a9533_eaf3c1cd","updated":"2024-03-21 20:33:56.000000000","message":"Just a cursory look so far. We probably ought to update proxy-server.conf-sample soon, too, if only to document recommended pipeline placement.","commit_id":"f60824717718578e072f51560656b8fae00d6868"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2f6036b3cb9355a433c6f2285dd96d4782c43ebe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3d7dd045_3e3ad73e","in_reply_to":"311a9533_eaf3c1cd","updated":"2024-03-22 17:57:56.000000000","message":"Done.","commit_id":"f60824717718578e072f51560656b8fae00d6868"}],"swift/common/middleware/mpu.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"860dd5be5f9048687ff36203134bce2a1d3e924c","unresolved":true,"context_lines":[{"line_number":35,"context_line":"DEFAULT_MAX_UPLOADS \u003d 1000"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"MAX_COMPLETE_UPLOAD_BODY_SIZE \u003d 2048 * 1024"},{"line_number":38,"context_line":"MPU_SWIFT_SOURCE \u003d \u0027MPU\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def get_mpu_sysmeta_key(key):"}],"source_content_type":"text/x-python","patch_set":4,"id":"c87d2a9f_a82ddb4c","line":38,"updated":"2024-03-21 20:33:56.000000000","message":"Probably want to update docs: https://docs.openstack.org/swift/latest/logs.html#swift-source","commit_id":"f60824717718578e072f51560656b8fae00d6868"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2f6036b3cb9355a433c6f2285dd96d4782c43ebe","unresolved":false,"context_lines":[{"line_number":35,"context_line":"DEFAULT_MAX_UPLOADS \u003d 1000"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"MAX_COMPLETE_UPLOAD_BODY_SIZE \u003d 2048 * 1024"},{"line_number":38,"context_line":"MPU_SWIFT_SOURCE \u003d \u0027MPU\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def get_mpu_sysmeta_key(key):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f4383fa_5275ddb6","line":38,"in_reply_to":"c87d2a9f_a82ddb4c","updated":"2024-03-22 17:57:56.000000000","message":"https://review.opendev.org/c/openstack/swift/+/914022","commit_id":"f60824717718578e072f51560656b8fae00d6868"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"860dd5be5f9048687ff36203134bce2a1d3e924c","unresolved":true,"context_lines":[{"line_number":54,"context_line":"        self.timestamp \u003d None"},{"line_number":55,"context_line":"        self.metadata \u003d {}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def load(self, headers):"},{"line_number":58,"context_line":"        try:"},{"line_number":59,"context_line":"            self.timestamp \u003d Timestamp(headers[\u0027X-Timestamp\u0027])"},{"line_number":60,"context_line":"            # TODO: populate session object with state \u0026 metadata from headers"}],"source_content_type":"text/x-python","patch_set":4,"id":"e3fb0b8d_fb9b6bfc","line":57,"range":{"start_line":57,"start_character":19,"end_line":57,"end_character":26},"updated":"2024-03-21 20:33:56.000000000","message":"Are these expected to be request headers, or response headers, or both?","commit_id":"f60824717718578e072f51560656b8fae00d6868"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d7eaa1a5f2648618bbe9aa44805715916d59aa32","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.timestamp \u003d None"},{"line_number":55,"context_line":"        self.metadata \u003d {}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def load(self, headers):"},{"line_number":58,"context_line":"        try:"},{"line_number":59,"context_line":"            self.timestamp \u003d Timestamp(headers[\u0027X-Timestamp\u0027])"},{"line_number":60,"context_line":"            # TODO: populate session object with state \u0026 metadata from headers"}],"source_content_type":"text/x-python","patch_set":4,"id":"bccb3e8b_6259fc3b","line":57,"range":{"start_line":57,"start_character":19,"end_line":57,"end_character":26},"in_reply_to":"e3fb0b8d_fb9b6bfc","updated":"2024-04-03 13:25:05.000000000","message":"response headers, but I have rewritten this","commit_id":"f60824717718578e072f51560656b8fae00d6868"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"860dd5be5f9048687ff36203134bce2a1d3e924c","unresolved":true,"context_lines":[{"line_number":104,"context_line":"        elif self.req.method \u003d\u003d \u0027POST\u0027 and self.obj:"},{"line_number":105,"context_line":"            resp \u003d self.create_upload()"},{"line_number":106,"context_line":"        else:"},{"line_number":107,"context_line":"            resp \u003d None"},{"line_number":108,"context_line":"        return resp"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    @public"}],"source_content_type":"text/x-python","patch_set":4,"id":"27f77b93_d8651423","line":107,"updated":"2024-03-21 20:33:56.000000000","message":"I wonder if it\u0027d be better to 405 than to go further down the pipeline.\n\nAs it is, `DELETE /v1/AUTH_test/container?uploads` tries to delete the container... and will succeed if it\u0027s empty!","commit_id":"f60824717718578e072f51560656b8fae00d6868"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d7eaa1a5f2648618bbe9aa44805715916d59aa32","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        elif self.req.method \u003d\u003d \u0027POST\u0027 and self.obj:"},{"line_number":105,"context_line":"            resp \u003d self.create_upload()"},{"line_number":106,"context_line":"        else:"},{"line_number":107,"context_line":"            resp \u003d None"},{"line_number":108,"context_line":"        return resp"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    @public"}],"source_content_type":"text/x-python","patch_set":4,"id":"562f10b1_f2d9991c","line":107,"in_reply_to":"27f77b93_d8651423","updated":"2024-04-03 13:25:05.000000000","message":"I\u0027d like to ponder this more...I thought that Swift in general ignores unsupported params and headers. For example, with the recently added SLO part-number feature, the part-number header is ignored on requests for which it is not relevant. And indeed, a part-number param should be ignored by MPU middleware when not relevant because it might be relevant to SLO!\n\n``DELETE /v1/AUTH_test/container?uploads`` will succeed on master today, but I realise that adding ``?uploads`` to the API could lead to unintended usage if it is misunderstood to abort all MPUs-in-progress. \n\nFor now I\u0027ll add a TODO","commit_id":"f60824717718578e072f51560656b8fae00d6868"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"860dd5be5f9048687ff36203134bce2a1d3e924c","unresolved":true,"context_lines":[{"line_number":211,"context_line":"        part_number \u003d get_valid_part_num(self.req)"},{"line_number":212,"context_line":"        if self.req.method \u003d\u003d \u0027PUT\u0027 and part_number \u003e 0:"},{"line_number":213,"context_line":"            resp \u003d self.upload_part(part_number)"},{"line_number":214,"context_line":"        elif self.req.method \u003d\u003d \u0027GET\u0027:"},{"line_number":215,"context_line":"            resp \u003d self.list_parts()"},{"line_number":216,"context_line":"        elif self.req.method \u003d\u003d \u0027POST\u0027:"},{"line_number":217,"context_line":"            resp \u003d self.complete_upload()"}],"source_content_type":"text/x-python","patch_set":4,"id":"10f665b4_5196f925","line":214,"updated":"2024-03-21 20:33:56.000000000","message":"No HEAD?","commit_id":"f60824717718578e072f51560656b8fae00d6868"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d7eaa1a5f2648618bbe9aa44805715916d59aa32","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        part_number \u003d get_valid_part_num(self.req)"},{"line_number":212,"context_line":"        if self.req.method \u003d\u003d \u0027PUT\u0027 and part_number \u003e 0:"},{"line_number":213,"context_line":"            resp \u003d self.upload_part(part_number)"},{"line_number":214,"context_line":"        elif self.req.method \u003d\u003d \u0027GET\u0027:"},{"line_number":215,"context_line":"            resp \u003d self.list_parts()"},{"line_number":216,"context_line":"        elif self.req.method \u003d\u003d \u0027POST\u0027:"},{"line_number":217,"context_line":"            resp \u003d self.complete_upload()"}],"source_content_type":"text/x-python","patch_set":4,"id":"e2370690_eb1d484f","line":214,"in_reply_to":"10f665b4_5196f925","updated":"2024-04-03 13:25:05.000000000","message":"There\u0027s no equivalent in S3 MPU API - you can use ``GET`` with ``?upload_id`` to list the parts, but (I assume) ``HEAD`` with ``?upload_id`` is unsupported - AFAICT it is undocumented.\n\nWe don\u0027t really want/need to expose the session\u0027s state (although we do to a certain extent when listing MPUs in progress). But we could choose to (and filter the headers exposed to the client). I can imagine that getting the parts count using a HEAD might be useful to a client.\n\nWDYT?","commit_id":"f60824717718578e072f51560656b8fae00d6868"}]}
