)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"ec7a330adf9cd65978c5633ed42f4585ae62d369","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"bf76ee29_4fbad530","updated":"2024-10-01 21:16:40.000000000","message":"I think there is a need for cross-compat tests for this patch , i am currently working on it while writing this review. A good place for me to start is somewhere similar to what i authored a while back which is here, where i could add an additional helper func to verify the list-parts response ref: https://github.com/NVIDIA/swift/blob/master/test/s3api/test_mpu.py#L98","commit_id":"3701c92a9696facec6b580fd8f5e24f1c83cf5d2"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1ae201151d80c4aa73af66d8a0ec87868c617e4a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c8618dc0_90e74dad","in_reply_to":"bf76ee29_4fbad530","updated":"2024-10-02 14:56:32.000000000","message":"we\u0027re not ready for cross-compat tests yet since there is no s3api support for native mpus yet","commit_id":"3701c92a9696facec6b580fd8f5e24f1c83cf5d2"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"f738ec0e113fdd8ebd969ffb0a78d91af78ce426","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"eb05af96_d9ae317b","in_reply_to":"c8618dc0_90e74dad","updated":"2024-10-02 15:46:46.000000000","message":"noted, my bad.","commit_id":"3701c92a9696facec6b580fd8f5e24f1c83cf5d2"}],"swift/common/middleware/mpu.py":[{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"f738ec0e113fdd8ebd969ffb0a78d91af78ce426","unresolved":true,"context_lines":[{"line_number":492,"context_line":"                \u0027X-Storage-Policy\u0027: sub_resp.headers.get(\u0027X-Storage-Policy\u0027)"},{"line_number":493,"context_line":"            }"},{"line_number":494,"context_line":"            resp \u003d HTTPOk("},{"line_number":495,"context_line":"                body\u003djson.dumps(listing).encode(\u0027ascii\u0027),"},{"line_number":496,"context_line":"                headers\u003dheaders,"},{"line_number":497,"context_line":"            )"},{"line_number":498,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"e1e29991_e3281edd","line":495,"updated":"2024-10-02 15:46:46.000000000","message":"I wish we didn\u0027t have to use this since for big lists this is a performance issue, I recall @jhuo@nvidia.com looking into alternatives for the `json` library","commit_id":"3701c92a9696facec6b580fd8f5e24f1c83cf5d2"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"f738ec0e113fdd8ebd969ffb0a78d91af78ce426","unresolved":true,"context_lines":[{"line_number":492,"context_line":"                \u0027X-Storage-Policy\u0027: sub_resp.headers.get(\u0027X-Storage-Policy\u0027)"},{"line_number":493,"context_line":"            }"},{"line_number":494,"context_line":"            resp \u003d HTTPOk("},{"line_number":495,"context_line":"                body\u003djson.dumps(listing).encode(\u0027ascii\u0027),"},{"line_number":496,"context_line":"                headers\u003dheaders,"},{"line_number":497,"context_line":"            )"},{"line_number":498,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"6f313d19_a65934bd","line":495,"updated":"2024-10-02 15:46:46.000000000","message":"Should we change the encoding to `body\u003djson.dumps(listing).encode(\u0027utf-8\u0027)` to handle non-ascii chars. I recall there being a bug once because of this ?","commit_id":"3701c92a9696facec6b580fd8f5e24f1c83cf5d2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0e73aa64da4dd2fda85a3d27b7d3a9500f4d8052","unresolved":true,"context_lines":[{"line_number":492,"context_line":"                \u0027X-Storage-Policy\u0027: sub_resp.headers.get(\u0027X-Storage-Policy\u0027)"},{"line_number":493,"context_line":"            }"},{"line_number":494,"context_line":"            resp \u003d HTTPOk("},{"line_number":495,"context_line":"                body\u003djson.dumps(listing).encode(\u0027ascii\u0027),"},{"line_number":496,"context_line":"                headers\u003dheaders,"},{"line_number":497,"context_line":"            )"},{"line_number":498,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"81c39075_2904ed19","line":495,"in_reply_to":"6f313d19_a65934bd","updated":"2024-10-03 20:59:16.000000000","message":"Eh, `dumps` takes an [`ensure_ascii` kwarg which defaults to `True`](https://docs.python.org/3/library/json.html#json.dumps). ASCII should be safe here.","commit_id":"3701c92a9696facec6b580fd8f5e24f1c83cf5d2"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"20aa014bb8b7fdc8d4300bc92324c132badbc4ed","unresolved":false,"context_lines":[{"line_number":492,"context_line":"                \u0027X-Storage-Policy\u0027: sub_resp.headers.get(\u0027X-Storage-Policy\u0027)"},{"line_number":493,"context_line":"            }"},{"line_number":494,"context_line":"            resp \u003d HTTPOk("},{"line_number":495,"context_line":"                body\u003djson.dumps(listing).encode(\u0027ascii\u0027),"},{"line_number":496,"context_line":"                headers\u003dheaders,"},{"line_number":497,"context_line":"            )"},{"line_number":498,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"f8d2c466_e357cea7","line":495,"in_reply_to":"81c39075_2904ed19","updated":"2024-10-04 14:11:46.000000000","message":"Acknowledged","commit_id":"3701c92a9696facec6b580fd8f5e24f1c83cf5d2"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"20aa014bb8b7fdc8d4300bc92324c132badbc4ed","unresolved":true,"context_lines":[{"line_number":492,"context_line":"                \u0027X-Storage-Policy\u0027: sub_resp.headers.get(\u0027X-Storage-Policy\u0027)"},{"line_number":493,"context_line":"            }"},{"line_number":494,"context_line":"            resp \u003d HTTPOk("},{"line_number":495,"context_line":"                body\u003djson.dumps(listing).encode(\u0027ascii\u0027),"},{"line_number":496,"context_line":"                headers\u003dheaders,"},{"line_number":497,"context_line":"            )"},{"line_number":498,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa8deca3_fcc6a6af","line":495,"in_reply_to":"8dbf62ff_91398fbb","updated":"2024-10-04 14:11:46.000000000","message":"there\u0027s other places we do this same pattern, and it would be great if they were optimised, but I\u0027d prefer not to take that on in the scope of MPUs","commit_id":"3701c92a9696facec6b580fd8f5e24f1c83cf5d2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0e73aa64da4dd2fda85a3d27b7d3a9500f4d8052","unresolved":true,"context_lines":[{"line_number":492,"context_line":"                \u0027X-Storage-Policy\u0027: sub_resp.headers.get(\u0027X-Storage-Policy\u0027)"},{"line_number":493,"context_line":"            }"},{"line_number":494,"context_line":"            resp \u003d HTTPOk("},{"line_number":495,"context_line":"                body\u003djson.dumps(listing).encode(\u0027ascii\u0027),"},{"line_number":496,"context_line":"                headers\u003dheaders,"},{"line_number":497,"context_line":"            )"},{"line_number":498,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"8dbf62ff_91398fbb","line":495,"in_reply_to":"e1e29991_e3281edd","updated":"2024-10-03 20:59:16.000000000","message":"Could be worse. Server-side, I don\u0027t feel too bad doing something like https://review.opendev.org/c/openstack/swift/+/919897 (which would be utterly unacceptable for swiftclient). I suppose `dumps` _does_ get more complicated, though, since orjson returns bytes while stdlib returns str.\n\nWhat would *really* be nice, though, is if we could pass back some fake-`bytes`-like thing as the body which kept the python list-of-dicts structure and would wait to serialize it until actually needed. Then we could avoid having encryption parse, manipulate, dump just so symlink could parse, manipulate, dump and so on through slo, s3api, and listing_formats (did I forget any?) until it actually goes out to the client. But I haven\u0027t dug into it enough to make a proper attempt at it.","commit_id":"3701c92a9696facec6b580fd8f5e24f1c83cf5d2"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"929fcd0074ee8d25cca04b8a559ac3748ff0a1c2","unresolved":true,"context_lines":[{"line_number":492,"context_line":"                \u0027X-Storage-Policy\u0027: sub_resp.headers.get(\u0027X-Storage-Policy\u0027)"},{"line_number":493,"context_line":"            }"},{"line_number":494,"context_line":"            resp \u003d HTTPOk("},{"line_number":495,"context_line":"                body\u003djson.dumps(listing).encode(\u0027ascii\u0027),"},{"line_number":496,"context_line":"                headers\u003dheaders,"},{"line_number":497,"context_line":"            )"},{"line_number":498,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"e485db34_b8605710","line":495,"in_reply_to":"fa8deca3_fcc6a6af","updated":"2024-10-09 16:50:13.000000000","message":"@alistairncoles@gmail.com i totally understand, still nice to leave it out there so i can always loop back here, if we look into alternatives in the near/far future","commit_id":"3701c92a9696facec6b580fd8f5e24f1c83cf5d2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0e73aa64da4dd2fda85a3d27b7d3a9500f4d8052","unresolved":true,"context_lines":[{"line_number":472,"context_line":"                item[\u0027name\u0027] \u003d split_reserved_name(item[\u0027name\u0027])[0]"},{"line_number":473,"context_line":"            headers \u003d {"},{"line_number":474,"context_line":"                \u0027Content-Type\u0027: \u0027application/json; charset\u003dutf-8\u0027,"},{"line_number":475,"context_line":"                \u0027X-Storage-Policy\u0027: sub_resp.headers.get(\u0027X-Storage-Policy\u0027)"},{"line_number":476,"context_line":"            }"},{"line_number":477,"context_line":"            resp \u003d HTTPOk("},{"line_number":478,"context_line":"                body\u003djson.dumps(listing).encode(\u0027ascii\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3edc4421_d3cd336b","line":475,"updated":"2024-10-03 20:59:16.000000000","message":"Interesting! I hadn\u0027t really thought about whether to return policy info when listing parts...\n\nShould we check for a `X-Backend-Storage-Policy-Index` too or anything?","commit_id":"c89704c2db39419fe315e60774990ac5b4593053"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"20aa014bb8b7fdc8d4300bc92324c132badbc4ed","unresolved":true,"context_lines":[{"line_number":472,"context_line":"                item[\u0027name\u0027] \u003d split_reserved_name(item[\u0027name\u0027])[0]"},{"line_number":473,"context_line":"            headers \u003d {"},{"line_number":474,"context_line":"                \u0027Content-Type\u0027: \u0027application/json; charset\u003dutf-8\u0027,"},{"line_number":475,"context_line":"                \u0027X-Storage-Policy\u0027: sub_resp.headers.get(\u0027X-Storage-Policy\u0027)"},{"line_number":476,"context_line":"            }"},{"line_number":477,"context_line":"            resp \u003d HTTPOk("},{"line_number":478,"context_line":"                body\u003djson.dumps(listing).encode(\u0027ascii\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"b7524ca4_f7931ba5","line":475,"in_reply_to":"3edc4421_d3cd336b","updated":"2024-10-04 14:11:46.000000000","message":"I was in two minds, but I definitely would like to eventually allow the parts policy to be specified with createUpload, and there\u0027s no API to query the parameters of an in progress MPU[*], so it\u0027s probably useful for a user to somehow see the policy that\u0027s in use.\n\nI\u0027m pretty sure the proxy app will already translate ``X-Backend-Storage-Policy-Index`` to ``X-Storage-Policy``:\nhttps://github.com/openstack/swift/blob/ce13529df8981e27fef363a29b34f7b052c6bb47/swift/proxy/controllers/base.py#L2370-L2383\n\n[*] For the swift API we could add support for a HEAD with uploadId param and return metadata about an in-progress MPU, but ... feature creep etc","commit_id":"c89704c2db39419fe315e60774990ac5b4593053"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6d6c07fbec42cbddcd15e73185e239afbee5779d","unresolved":true,"context_lines":[{"line_number":472,"context_line":"                item[\u0027name\u0027] \u003d split_reserved_name(item[\u0027name\u0027])[0]"},{"line_number":473,"context_line":"            headers \u003d {"},{"line_number":474,"context_line":"                \u0027Content-Type\u0027: \u0027application/json; charset\u003dutf-8\u0027,"},{"line_number":475,"context_line":"                \u0027X-Storage-Policy\u0027: sub_resp.headers.get(\u0027X-Storage-Policy\u0027)"},{"line_number":476,"context_line":"            }"},{"line_number":477,"context_line":"            resp \u003d HTTPOk("},{"line_number":478,"context_line":"                body\u003djson.dumps(listing).encode(\u0027ascii\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"64e7cdd9_b331bf14","line":475,"in_reply_to":"b7524ca4_f7931ba5","updated":"2024-10-15 18:13:53.000000000","message":"So this is purely intended to be client-facing? I feel like if s3api (or any other middleware) wants to look at it, it might prefer to look at index.\n\nSide note: I wonder if it\u0027d be better for gatekeeper or something to handle the translation shortly before going out to the client...","commit_id":"c89704c2db39419fe315e60774990ac5b4593053"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0e73aa64da4dd2fda85a3d27b7d3a9500f4d8052","unresolved":true,"context_lines":[{"line_number":480,"context_line":"            )"},{"line_number":481,"context_line":"        else:"},{"line_number":482,"context_line":"            drain_and_close(sub_resp)"},{"line_number":483,"context_line":"            resp \u003d swob.status_map[sub_resp.status_int]"},{"line_number":484,"context_line":"            resp.request \u003d self.req"},{"line_number":485,"context_line":"        return resp"},{"line_number":486,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"b689eeef_3d9f14f5","line":483,"updated":"2024-10-03 20:59:16.000000000","message":"How certain are we that the `status_int` will appear in `RESPONSE_REASONS`? 429, for example, is _not_ present. (Though hopefully ratelimiters would appear left of this in the pipeline...)\n\nAlso, shouldn\u0027t we be calling the result? This just gets us the `partial`.","commit_id":"c89704c2db39419fe315e60774990ac5b4593053"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"20aa014bb8b7fdc8d4300bc92324c132badbc4ed","unresolved":true,"context_lines":[{"line_number":480,"context_line":"            )"},{"line_number":481,"context_line":"        else:"},{"line_number":482,"context_line":"            drain_and_close(sub_resp)"},{"line_number":483,"context_line":"            resp \u003d swob.status_map[sub_resp.status_int]"},{"line_number":484,"context_line":"            resp.request \u003d self.req"},{"line_number":485,"context_line":"        return resp"},{"line_number":486,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3604f807_1c5cee05","line":483,"in_reply_to":"b689eeef_3d9f14f5","updated":"2024-10-04 14:11:46.000000000","message":"\u003e How certain are we that the status_int will appear in RESPONSE_REASONS? \n\nfixed later when I introduce a translate_error_response method\n\n\u003e Also, shouldn\u0027t we be calling the result?\n\nyes! I also fixed that later in the chain\n\nI\u0027ll pull the fixes forward to this patch and add a test","commit_id":"c89704c2db39419fe315e60774990ac5b4593053"}],"test/functional/test_mpu.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6d6c07fbec42cbddcd15e73185e239afbee5779d","unresolved":true,"context_lines":[{"line_number":265,"context_line":"             \u0027X-Container-Bytes-Used\u0027: mock.ANY,"},{"line_number":266,"context_line":"             \u0027X-Timestamp\u0027: mock.ANY,"},{"line_number":267,"context_line":"             \u0027Last-Modified\u0027: mock.ANY,"},{"line_number":268,"context_line":"             \u0027Accept-Ranges\u0027: \u0027bytes\u0027,"},{"line_number":269,"context_line":"             \u0027X-Storage-Policy\u0027: exp_policy,"},{"line_number":270,"context_line":"             \u0027X-Trans-Id\u0027: mock.ANY,"},{"line_number":271,"context_line":"             \u0027X-Openstack-Request-Id\u0027: mock.ANY,"}],"source_content_type":"text/x-python","patch_set":8,"id":"303e65d0_103ce710","side":"PARENT","line":268,"updated":"2024-10-15 18:13:53.000000000","message":"It always bugs me a bit that we include `Accept-Ranges` for account/container responses... I should probably fix that on master...","commit_id":"7ffb75699d8e8434657318939634a125cd9a2001"}]}
