)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"809a51f11f037149af091b9cceb07efe70162ef8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"31eb99dd_4ec7ee1f","updated":"2024-02-26 15:22:50.000000000","message":"+1 it seems reasonable that we would want to prevent overwrite if we know the data file is there but the meta file couldn\u0027t be read","commit_id":"2450bfcd2dffcde51b2ebca75e9590fa56c63458"}],"swift/obj/server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"809a51f11f037149af091b9cceb07efe70162ef8","unresolved":true,"context_lines":[{"line_number":810,"context_line":"        except (DiskFileNotExist, DiskFileQuarantined,"},{"line_number":811,"context_line":"                DiskFileMetadataUnavailable):"},{"line_number":812,"context_line":"            if disk_file._datafile_metadata:"},{"line_number":813,"context_line":"                orig_metadata \u003d disk_file._datafile_metadata"},{"line_number":814,"context_line":"                orig_timestamp \u003d Timestamp(disk_file._datafile_metadata.get(\u0027X-Timestamp\u0027, 0))"},{"line_number":815,"context_line":"            else:"},{"line_number":816,"context_line":"                orig_metadata \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"f3da86e9_0b31199c","line":813,"range":{"start_line":813,"start_character":32,"end_line":813,"end_character":60},"updated":"2024-02-26 15:22:50.000000000","message":"apart from the unfortunate access of the \u0027private\u0027 attribute, there\u0027s some metadata validation that has been skipped as a result of the DiskFileMetadataUnavailable being raised.\n\nIf we\u0027re going to formalise data file metadata being available even when meta file reading fails then maybe we should do the checks and make it available via diskfile.metadata? https://review.opendev.org/c/openstack/swift/+/910237","commit_id":"2450bfcd2dffcde51b2ebca75e9590fa56c63458"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"82a64093bb7cc469662cb740f8eff7ea3b8517ac","unresolved":true,"context_lines":[{"line_number":808,"context_line":"            orig_metadata \u003d {}"},{"line_number":809,"context_line":"            orig_timestamp \u003d e.timestamp"},{"line_number":810,"context_line":"        except DiskFileMetadataUnavailable as e:"},{"line_number":811,"context_line":"            orig_metadata \u003d e.metadata"},{"line_number":812,"context_line":"            orig_timestamp \u003d e.timestamp"},{"line_number":813,"context_line":"        except (DiskFileNotExist, DiskFileQuarantined):"},{"line_number":814,"context_line":"            orig_metadata \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"f617896a_c752cbb3","line":811,"updated":"2024-03-05 18:45:37.000000000","message":"But *why*? Why are we rolling back the state of the system when presumably the reason for the error is that the system has moved *forward*?","commit_id":"79444c71355436334b924702c805c0961d909084"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"82a64093bb7cc469662cb740f8eff7ea3b8517ac","unresolved":true,"context_lines":[{"line_number":814,"context_line":"            orig_metadata \u003d {}"},{"line_number":815,"context_line":"            orig_timestamp \u003d Timestamp(0)"},{"line_number":816,"context_line":""},{"line_number":817,"context_line":"        # Checks for If-None-Match"},{"line_number":818,"context_line":"        if request.if_none_match is not None and orig_metadata:"},{"line_number":819,"context_line":"            if \u0027*\u0027 in request.if_none_match:"},{"line_number":820,"context_line":"                # File exists already so return 412"}],"source_content_type":"text/x-python","patch_set":3,"id":"ac70448d_5b0ee16e","line":817,"updated":"2024-03-05 18:45:37.000000000","message":"Is it just for this check? Seems like an argument in favor of bombing out *harder*, not papering over the trouble.","commit_id":"79444c71355436334b924702c805c0961d909084"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"82a64093bb7cc469662cb740f8eff7ea3b8517ac","unresolved":true,"context_lines":[{"line_number":819,"context_line":"            if \u0027*\u0027 in request.if_none_match:"},{"line_number":820,"context_line":"                # File exists already so return 412"},{"line_number":821,"context_line":"                raise HTTPPreconditionFailed(request\u003drequest)"},{"line_number":822,"context_line":"            if orig_metadata.get(\u0027ETag\u0027) in request.if_none_match:"},{"line_number":823,"context_line":"                # The current ETag matches, so raise 412"},{"line_number":824,"context_line":"                raise HTTPPreconditionFailed(request\u003drequest)"},{"line_number":825,"context_line":"        if orig_timestamp \u003e\u003d req_timestamp:"}],"source_content_type":"text/x-python","patch_set":3,"id":"baf7415a_f1588bc7","line":822,"range":{"start_line":822,"start_character":15,"end_line":822,"end_character":65},"updated":"2024-03-05 18:45:37.000000000","message":"... *especially* if we ever want to try to expand [our `If-None-Match` support](https://github.com/openstack/swift/blob/2.32.0/swift/proxy/controllers/obj.py#L854-L857).","commit_id":"79444c71355436334b924702c805c0961d909084"}]}
