)]}'
{"swift/obj/server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d9d63198815913b58def52b1f23b8925e1909d86","unresolved":false,"context_lines":[{"line_number":1042,"context_line":"        except DiskFileXattrNotSupported:"},{"line_number":1043,"context_line":"            return HTTPInsufficientStorage(drive\u003ddevice, request\u003drequest)"},{"line_number":1044,"context_line":"        except DiskFileExpired as e:"},{"line_number":1045,"context_line":"            orig_timestamp \u003d e.timestamp"},{"line_number":1046,"context_line":"            orig_metadata \u003d e.metadata"},{"line_number":1047,"context_line":"            response_class \u003d HTTPNotFound"},{"line_number":1048,"context_line":"        except DiskFileDeleted as e:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_df230a55","line":1045,"updated":"2018-01-19 01:23:56.000000000","message":"this has to be older than it\u0027s x-delete-at","commit_id":"f4cff9fbba76932a4b67f1130d630098497bb4bc"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d9d63198815913b58def52b1f23b8925e1909d86","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"            orig_metadata \u003d e.metadata"},{"line_number":1047,"context_line":"            response_class \u003d HTTPNotFound"},{"line_number":1048,"context_line":"        except DiskFileDeleted as e:"},{"line_number":1049,"context_line":"            orig_timestamp \u003d e.timestamp"},{"line_number":1050,"context_line":"            orig_metadata \u003d {}"},{"line_number":1051,"context_line":"            response_class \u003d HTTPNotFound"},{"line_number":1052,"context_line":"        except (DiskFileNotExist, DiskFileQuarantined):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_1f441273","line":1049,"updated":"2018-01-19 01:23:56.000000000","message":"once the expirer does an expiration we should fall into this block with e.timestamp \u003d\u003d x-delete-at","commit_id":"f4cff9fbba76932a4b67f1130d630098497bb4bc"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d9d63198815913b58def52b1f23b8925e1909d86","unresolved":false,"context_lines":[{"line_number":1058,"context_line":"            if orig_timestamp \u003c req_timestamp:"},{"line_number":1059,"context_line":"                response_class \u003d HTTPNoContent"},{"line_number":1060,"context_line":"            else:"},{"line_number":1061,"context_line":"                response_class \u003d HTTPConflict"},{"line_number":1062,"context_line":"        response_timestamp \u003d max(orig_timestamp, req_timestamp)"},{"line_number":1063,"context_line":"        orig_delete_at \u003d int(orig_metadata.get(\u0027X-Delete-At\u0027) or 0)"},{"line_number":1064,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_3e6b17f1","line":1061,"updated":"2018-01-19 01:23:56.000000000","message":"this is a similar conditional test, where we also return 409","commit_id":"f4cff9fbba76932a4b67f1130d630098497bb4bc"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d9d63198815913b58def52b1f23b8925e1909d86","unresolved":false,"context_lines":[{"line_number":1078,"context_line":"                return HTTPNotFound()"},{"line_number":1079,"context_line":"            if orig_timestamp \u003e\u003d req_timestamp:"},{"line_number":1080,"context_line":"                # Found a newer object -- return 409 as work item is stale"},{"line_number":1081,"context_line":"                return HTTPConflict()"},{"line_number":1082,"context_line":"            if orig_delete_at !\u003d req_if_delete_at:"},{"line_number":1083,"context_line":"                return HTTPPreconditionFailed("},{"line_number":1084,"context_line":"                    request\u003drequest,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_1e25fb08","line":1081,"updated":"2018-01-19 01:23:56.000000000","message":"so req_timestamp comes form the X-Timestamp on the request... which the expirer sets to the x-delete-at time in delete_actual_object\n\n        self.swift.make_request(\n            \u0027DELETE\u0027, path,\n            {\u0027X-If-Delete-At\u0027: str(timestamp), \u0027X-Timestamp\u0027: str(timestamp),\n             \u0027X-Backend-Clean-Expiring-Object-Queue\u0027: \u0027no\u0027},\n            (2,))\n\norig_timestamp is the timestamp when the object was created","commit_id":"f4cff9fbba76932a4b67f1130d630098497bb4bc"}],"test/unit/obj/test_server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d9d63198815913b58def52b1f23b8925e1909d86","unresolved":false,"context_lines":[{"line_number":6152,"context_line":"                         \u0027X-If-Delete-At\u0027: delete_at_timestamp})"},{"line_number":6153,"context_line":"            resp \u003d req.get_response(self.object_controller)"},{"line_number":6154,"context_line":"            self.assertEqual(resp.status_int, 409)"},{"line_number":6155,"context_line":"            self.assertFalse(os.path.isfile(objfile))"},{"line_number":6156,"context_line":""},{"line_number":6157,"context_line":"            # overwrite with new content"},{"line_number":6158,"context_line":"            req \u003d Request.blank("}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_82d7654b","line":6155,"updated":"2018-01-19 01:23:56.000000000","message":"ah, this is the pop_queue failed case","commit_id":"f4cff9fbba76932a4b67f1130d630098497bb4bc"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d9d63198815913b58def52b1f23b8925e1909d86","unresolved":false,"context_lines":[{"line_number":6158,"context_line":"            req \u003d Request.blank("},{"line_number":6159,"context_line":"                \u0027/sda1/p/a/c/o\u0027, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":6160,"context_line":"                headers\u003d{"},{"line_number":6161,"context_line":"                    \u0027X-Timestamp\u0027: str(test_time + 100),"},{"line_number":6162,"context_line":"                    \u0027Content-Length\u0027: \u00270\u0027,"},{"line_number":6163,"context_line":"                    \u0027Content-Type\u0027: \u0027application/octet-stream\u0027})"},{"line_number":6164,"context_line":"            resp \u003d req.get_response(self.object_controller)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_02711576","line":6161,"updated":"2018-01-19 01:23:56.000000000","message":"this is way after the delete_at_timestamp","commit_id":"f4cff9fbba76932a4b67f1130d630098497bb4bc"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d9d63198815913b58def52b1f23b8925e1909d86","unresolved":false,"context_lines":[{"line_number":6171,"context_line":"                headers\u003d{\u0027X-Timestamp\u0027: delete_at_timestamp,"},{"line_number":6172,"context_line":"                         \u0027X-If-Delete-At\u0027: delete_at_timestamp})"},{"line_number":6173,"context_line":"            resp \u003d req.get_response(self.object_controller)"},{"line_number":6174,"context_line":"            self.assertEqual(resp.status_int, 409)"},{"line_number":6175,"context_line":""},{"line_number":6176,"context_line":"            # make the x-if-delete-at for some not found"},{"line_number":6177,"context_line":"            req \u003d Request.blank("}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_c2b80d12","line":6174,"updated":"2018-01-19 01:23:56.000000000","message":"and this stale expirer row failed to cleanup case","commit_id":"f4cff9fbba76932a4b67f1130d630098497bb4bc"}]}
