uploads: don't delete files of abandoned uploads.
Just leave them. They don't take up that much space and they may be used in the future if someone else tries to upload the same file.
This commit is contained in:
@@ -75,8 +75,6 @@ class Upload < ApplicationRecord
|
||||
validates_with FileValidator, on: :file
|
||||
serialize :context, JSON
|
||||
|
||||
after_destroy_commit :delete_files
|
||||
|
||||
scope :pending, -> { where(status: "pending") }
|
||||
scope :preprocessed, -> { where(status: "preprocessed") }
|
||||
scope :completed, -> { where(status: "completed") }
|
||||
@@ -104,19 +102,6 @@ class Upload < ApplicationRecord
|
||||
end
|
||||
end
|
||||
|
||||
concerning :FileMethods do
|
||||
def delete_files
|
||||
# md5 is blank if the upload errored out before downloading the file.
|
||||
if is_completed? || md5.blank? || Upload.exists?(md5: md5) || Post.exists?(md5: md5)
|
||||
return
|
||||
end
|
||||
|
||||
media_asset&.destroy!
|
||||
media_asset&.delete_files!
|
||||
DanbooruLogger.info("Uploads: Deleting files for upload md5=#{md5}")
|
||||
end
|
||||
end
|
||||
|
||||
concerning :StatusMethods do
|
||||
def is_pending?
|
||||
status == "pending"
|
||||
|
||||
@@ -884,52 +884,6 @@ class UploadServiceTest < ActiveSupport::TestCase
|
||||
assert_difference("Upload.count", -1) { Upload.prune! }
|
||||
end
|
||||
|
||||
should "delete unused files after deleting the upload" do
|
||||
@upload = as(@user) { UploadService::Preprocessor.new(file: upload_file("test/files/test.jpg")).start! }
|
||||
assert_file_exists(@upload, :original)
|
||||
|
||||
@upload.destroy!
|
||||
assert_file_does_not_exist(@upload, :original)
|
||||
end
|
||||
|
||||
should "not delete files that are still in use by a post" do
|
||||
@upload = as(@user) { UploadService.new(file: upload_file("test/files/test.jpg")).start! }
|
||||
assert_file_exists(@upload, :original)
|
||||
|
||||
@upload.destroy!
|
||||
assert_file_exists(@upload, :original)
|
||||
end
|
||||
|
||||
should "not delete files if they're still in use by another upload" do
|
||||
@upload1 = as(@user) { UploadService::Preprocessor.new(file: upload_file("test/files/test.jpg")).start! }
|
||||
@upload2 = as(@user) { UploadService::Preprocessor.new(file: upload_file("test/files/test.jpg")).start! }
|
||||
assert_equal(@upload1.md5, @upload2.md5)
|
||||
assert_file_exists(@upload1, :original)
|
||||
|
||||
@upload1.destroy!
|
||||
assert_file_exists(@upload1, :original)
|
||||
|
||||
@upload2.destroy!
|
||||
assert_file_does_not_exist(@upload2, :original)
|
||||
end
|
||||
|
||||
should "not delete files that were replaced after upload and are still pending deletion" do
|
||||
@upload = as(@user) { UploadService.new(file: upload_file("test/files/test.jpg")).start! }
|
||||
assert(@upload.is_completed?)
|
||||
|
||||
as(@user) { @upload.post.replace!(replacement_file: upload_file("test/files/test.png"), replacement_url: "") }
|
||||
assert_not_equal(@upload.md5, @upload.post.md5)
|
||||
|
||||
# after replacement the uploaded file is no longer in use, but it shouldn't be
|
||||
# deleted yet. it should only be deleted by the replacer after the grace period.
|
||||
@upload.destroy!
|
||||
assert_file_exists(@upload, :original)
|
||||
|
||||
travel (PostReplacement::DELETION_GRACE_PERIOD + 1).days
|
||||
perform_enqueued_jobs
|
||||
assert_file_does_not_exist(@upload, :original)
|
||||
end
|
||||
|
||||
should "work on uploads without a file" do
|
||||
@upload = as(@user) { UploadService.new(source: "http://14903gf0vm3g134yjq3n535yn3n.com/does_not_exist.jpg").start! }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user