)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"4b6482a12e91f35d2fbbbd77f47752e9d16788d6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b704d898_db090c1e","updated":"2026-09-30 07:10:30.000000000","message":"I like the general idea. -1 just for visibility because this needs a fix to pass the py37 tests.\n\nPlease see my inline comments","commit_id":"e915b071553d3b32dde7d88182a4902c2e932d54"}],"swift/obj/diskfile.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"4b6482a12e91f35d2fbbbd77f47752e9d16788d6","unresolved":true,"context_lines":[{"line_number":2023,"context_line":"        self._safe_metadata_link(target_path, metadata)"},{"line_number":2024,"context_line":"        if self._tmppath:"},{"line_number":2025,"context_line":"            # Complete the rename-like operation for a named tempfile."},{"line_number":2026,"context_line":"            os.unlink(self._tmppath)"},{"line_number":2027,"context_line":"            self._tmppath \u003d None"},{"line_number":2028,"context_line":""},{"line_number":2029,"context_line":"        # Check if the partition power will/has been increased"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a209518_6c78e295","line":2026,"updated":"2026-09-30 07:10:30.000000000","message":"Previously `os.rename` was used, and that had two possible outcomes:\n1. Success - object file stored and tempfile removed at the same time\n2. Failure - object file not saved, object-server returned a 500\n\nNow there is a new possible state inbetween: if the `os.unlink` failed the object is already stored, but the tempfile still exists and the object-server returns a 500.\n\nHow about sth like this?\n\n```\ntry:\n    os.unlink(self._tmppath)\nexcept OSError:\n    self.logger.exception(\u0027Error removing tempfile: %s\u0027, self._tmppath)\n```","commit_id":"e915b071553d3b32dde7d88182a4902c2e932d54"}],"test/unit/obj/test_diskfile.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"4b6482a12e91f35d2fbbbd77f47752e9d16788d6","unresolved":true,"context_lines":[{"line_number":6452,"context_line":"                writer.write(data)"},{"line_number":6453,"context_line":"                writer.put(metadata)"},{"line_number":6454,"context_line":"        self.assertIsNone(writer._tmppath)"},{"line_number":6455,"context_line":"        self.assertIsNone(mock_link.call_args.kwargs[\u0027source_path\u0027])"},{"line_number":6456,"context_line":""},{"line_number":6457,"context_line":"    def test_diskfile_writer_timing_breakdown(self):"},{"line_number":6458,"context_line":"        timing_breakdown \u003d TimingBreakdown()"}],"source_content_type":"text/x-python","patch_set":1,"id":"20ad0a67_5a85b8c9","line":6455,"updated":"2026-09-30 07:10:30.000000000","message":"This assert fails on the py37 and lower-constraints job. The following should pass:\n\n    self.assertIsNone(mock_link.call_args[1][\u0027source_path\u0027])","commit_id":"e915b071553d3b32dde7d88182a4902c2e932d54"}]}
