uploads: fix exception when pruning expired uploads.
Hourly pruning of expired uploads was failing because of nil deference errors in `media_asset.destroy!`. There are various cases where an upload doesn't have a media asset, for example when the source url fails to download or when the upload is of an invalid filetype.
This commit is contained in:
@@ -115,7 +115,7 @@ class Upload < ApplicationRecord
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
media_asset.destroy!
|
media_asset&.destroy!
|
||||||
DanbooruLogger.info("Uploads: Deleting files for upload md5=#{md5}")
|
DanbooruLogger.info("Uploads: Deleting files for upload md5=#{md5}")
|
||||||
Danbooru.config.storage_manager.delete_file(nil, md5, file_ext, :original)
|
Danbooru.config.storage_manager.delete_file(nil, md5, file_ext, :original)
|
||||||
Danbooru.config.storage_manager.delete_file(nil, md5, file_ext, :large)
|
Danbooru.config.storage_manager.delete_file(nil, md5, file_ext, :large)
|
||||||
|
|||||||
@@ -1033,5 +1033,12 @@ class UploadServiceTest < ActiveSupport::TestCase
|
|||||||
assert(@upload.is_errored?)
|
assert(@upload.is_errored?)
|
||||||
assert_difference("Upload.count", -1) { @upload.destroy! }
|
assert_difference("Upload.count", -1) { @upload.destroy! }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "work on uploads with an invalid file" do
|
||||||
|
@upload = as(@user) { UploadService.new(file: upload_file("test/files/test-empty.bin")).start! }
|
||||||
|
|
||||||
|
assert(@upload.is_errored?)
|
||||||
|
assert_difference("Upload.count", -1) { @upload.destroy! }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user