mirror of
https://github.com/discourse/discourse.git
synced 2025-03-28 16:26:40 +08:00
FIX: generate_topic_thumbnails job infinitely running for corrupted images
It's possible that the original topic image is broken in some form, so we shouldn't try and generate a topic thumbnail for it. The fix will prevent the generate_topic_thumbnails job being enqueued every time the topic is viewed.
This commit is contained in:
parent
d65a839577
commit
c2f3c0dc44
@ -115,6 +115,8 @@ class Topic < ActiveRecord::Base
|
|||||||
image_upload &&
|
image_upload &&
|
||||||
SiteSetting.create_thumbnails &&
|
SiteSetting.create_thumbnails &&
|
||||||
image_upload.filesize < SiteSetting.max_image_size_kb.kilobytes &&
|
image_upload.filesize < SiteSetting.max_image_size_kb.kilobytes &&
|
||||||
|
image_upload.read_attribute(:width) &&
|
||||||
|
image_upload.read_attribute(:height) &&
|
||||||
enqueue_if_missing &&
|
enqueue_if_missing &&
|
||||||
Discourse.redis.set(thumbnail_job_redis_key([]), 1, nx: true, ex: 1.minute)
|
Discourse.redis.set(thumbnail_job_redis_key([]), 1, nx: true, ex: 1.minute)
|
||||||
Jobs.enqueue(:generate_topic_thumbnails, { topic_id: id })
|
Jobs.enqueue(:generate_topic_thumbnails, { topic_id: id })
|
||||||
|
@ -35,6 +35,13 @@ Fabricator(:image_upload, from: :upload) do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Fabricator(:upload_no_dimensions, from: :upload) do
|
||||||
|
width nil
|
||||||
|
height nil
|
||||||
|
thumbnail_width nil
|
||||||
|
thumbnail_height nil
|
||||||
|
end
|
||||||
|
|
||||||
Fabricator(:video_upload, from: :upload) do
|
Fabricator(:video_upload, from: :upload) do
|
||||||
original_filename "video.mp4"
|
original_filename "video.mp4"
|
||||||
width nil
|
width nil
|
||||||
|
@ -6,6 +6,8 @@ describe "TopicThumbnail" do
|
|||||||
let(:topic) { Fabricate(:topic, image_upload: upload1) }
|
let(:topic) { Fabricate(:topic, image_upload: upload1) }
|
||||||
let(:upload2) { Fabricate(:image_upload, width: 5000, height: 5000) }
|
let(:upload2) { Fabricate(:image_upload, width: 5000, height: 5000) }
|
||||||
let(:topic2) { Fabricate(:topic, image_upload: upload2) }
|
let(:topic2) { Fabricate(:topic, image_upload: upload2) }
|
||||||
|
let(:upload3) { Fabricate(:upload_no_dimensions) }
|
||||||
|
let(:topic3) { Fabricate(:topic, image_upload: upload3) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
SiteSetting.create_thumbnails = true
|
SiteSetting.create_thumbnails = true
|
||||||
@ -26,6 +28,18 @@ describe "TopicThumbnail" do
|
|||||||
topic2.reload
|
topic2.reload
|
||||||
|
|
||||||
expect(topic2.topic_thumbnails.length).to eq(0)
|
expect(topic2.topic_thumbnails.length).to eq(0)
|
||||||
|
expect(Jobs::GenerateTopicThumbnails.jobs.size).to eq(0)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "does not enque job if image_upload width is nil" do
|
||||||
|
SiteSetting.create_thumbnails = true
|
||||||
|
topic3.image_url(enqueue_if_missing: true)
|
||||||
|
|
||||||
|
TopicThumbnail.ensure_consistency!
|
||||||
|
topic3.reload
|
||||||
|
|
||||||
|
expect(topic3.topic_thumbnails.length).to eq(0)
|
||||||
|
expect(Jobs::GenerateTopicThumbnails.jobs.size).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "cleans up deleted uploads" do
|
it "cleans up deleted uploads" do
|
||||||
|
Loading…
x
Reference in New Issue
Block a user