)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d690374badd29cbd76641bec51ee775ba4f5632d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4c1beda4_9e57b77e","updated":"2025-05-28 08:34:36.000000000","message":"@Tim, Thanks for looking at this patch chain. Tactically, I\u0027m planning to wind back a bit and decouple mpu versions history from object-versioning for the time being in order to make progress faster towards an mpu-cleanup prototype. Then, later, consider combining all the versions history into the object-versioning container.  I *think* that the null versions history that I need to clean up null version MPUs as they become obsolete can be independent of \u0027real\u0027 versions.\n\nSo, yes, maybe we could port this to master because I think it\u0027s useful as it stands (e.g. on master my IDE flags up some potentially undeclared attributes which are ok if you squint enough at the conditional pieces, but a little inelegant).\n\nHowever, I\u0027m not sure what to do about my new TODO [1], and wary of going down a rabbit hole fixing that. Any thoughts?\n\n[1] https://review.opendev.org/c/openstack/swift/+/950688/comment/08ef0232_c6e8f6ad/","commit_id":"4f064f8c61daa2617ca68fe0a8435ba62d419ef4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"311a02114e06793248db6f1fb62195216c1bd971","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"242f3eee_0ab3cad8","updated":"2025-05-27 15:41:43.000000000","message":"Should we just do this against master?","commit_id":"4f064f8c61daa2617ca68fe0a8435ba62d419ef4"}],"swift/common/middleware/versioned_writes/object_versioning.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"311a02114e06793248db6f1fb62195216c1bd971","unresolved":true,"context_lines":[{"line_number":296,"context_line":"    hdrs \u003d {\u0027X-Backend-Allow-Reserved-Names\u0027: \u0027true\u0027}"},{"line_number":297,"context_line":"    policy \u003d get_versions_cont_policy(req, container_info)"},{"line_number":298,"context_line":"    if policy is not None:"},{"line_number":299,"context_line":"        hdrs[\u0027X-Storage-Policy\u0027] \u003d policy"},{"line_number":300,"context_line":"    version, account, container, _ \u003d req.split_path(3, 4, True)"},{"line_number":301,"context_line":"    versions_cont_path \u003d \"/%s/%s/%s\" % ("},{"line_number":302,"context_line":"        version, account, versions_cont)"}],"source_content_type":"text/x-python","patch_set":1,"id":"8164c24c_bd7d96a8","line":299,"updated":"2025-05-27 15:41:43.000000000","message":"OK, so this was present before -- but we don\u0027t actually need policy info for DELETEs, right?","commit_id":"4f064f8c61daa2617ca68fe0a8435ba62d419ef4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d690374badd29cbd76641bec51ee775ba4f5632d","unresolved":true,"context_lines":[{"line_number":1124,"context_line":"            # TODO: how can this be safe?! and why is it necessary? the user"},{"line_number":1125,"context_line":"            #   request may *appear* to have failed (e.g. timeout)but the"},{"line_number":1126,"context_line":"            #   sysmeta could have been written in the backend such that"},{"line_number":1127,"context_line":"            #   subsequent requests will assume the versions container exists"},{"line_number":1128,"context_line":"            delete_versions_container("},{"line_number":1129,"context_line":"                self.app, req, container_info, versions_cont)"},{"line_number":1130,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"08ef0232_c6e8f6ad","line":1127,"updated":"2025-05-28 08:34:36.000000000","message":"if I find time I\u0027d try to put together a probe test to convince myself this delete is a bad idea\n\nI can see how the combination of versions-container and versions-enabled in the sysmeta is used to determine which of three states the container is in (never versioned, versioning enabled, versioning suspended), but this isn\u0027t fixing the state, it\u0027s just removing resource regardless of the actual state that may be set in sysmeta.","commit_id":"4f064f8c61daa2617ca68fe0a8435ba62d419ef4"}]}
