saved searches: fail gracefully when Redis is disabled.
Just make saved searches return nothing when Redis is disabled.
This commit is contained in:
@@ -25,11 +25,14 @@ class SavedSearch < ApplicationRecord
|
|||||||
extend Memoist
|
extend Memoist
|
||||||
|
|
||||||
def redis
|
def redis
|
||||||
|
return nil if Danbooru.config.redis_url.blank?
|
||||||
::Redis.new(url: Danbooru.config.redis_url)
|
::Redis.new(url: Danbooru.config.redis_url)
|
||||||
end
|
end
|
||||||
memoize :redis
|
memoize :redis
|
||||||
|
|
||||||
def post_ids_for(user_id, label: nil)
|
def post_ids_for(user_id, label: nil)
|
||||||
|
return [] if redis.nil?
|
||||||
|
|
||||||
queries = queries_for(user_id, label: label)
|
queries = queries_for(user_id, label: label)
|
||||||
post_ids = Set.new
|
post_ids = Set.new
|
||||||
queries.each do |query|
|
queries.each do |query|
|
||||||
@@ -46,6 +49,8 @@ class SavedSearch < ApplicationRecord
|
|||||||
end
|
end
|
||||||
|
|
||||||
def refreshed_at
|
def refreshed_at
|
||||||
|
return Time.zone.now if SavedSearch.redis.nil?
|
||||||
|
|
||||||
ttl = SavedSearch.redis.ttl("search:#{normalized_query}")
|
ttl = SavedSearch.redis.ttl("search:#{normalized_query}")
|
||||||
return nil if ttl < 0
|
return nil if ttl < 0
|
||||||
(REDIS_EXPIRY.to_i - ttl).seconds.ago
|
(REDIS_EXPIRY.to_i - ttl).seconds.ago
|
||||||
@@ -53,6 +58,8 @@ class SavedSearch < ApplicationRecord
|
|||||||
memoize :refreshed_at
|
memoize :refreshed_at
|
||||||
|
|
||||||
def cached_size
|
def cached_size
|
||||||
|
return 0 if SavedSearch.redis.nil?
|
||||||
|
|
||||||
SavedSearch.redis.scard("search:#{normalized_query}")
|
SavedSearch.redis.scard("search:#{normalized_query}")
|
||||||
end
|
end
|
||||||
memoize :cached_size
|
memoize :cached_size
|
||||||
@@ -116,6 +123,8 @@ class SavedSearch < ApplicationRecord
|
|||||||
end
|
end
|
||||||
|
|
||||||
def populate(query, timeout: 10_000)
|
def populate(query, timeout: 10_000)
|
||||||
|
return if redis.nil?
|
||||||
|
|
||||||
redis_key = "search:#{query}"
|
redis_key = "search:#{query}"
|
||||||
return if redis.exists?(redis_key)
|
return if redis.exists?(redis_key)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
Rails.application.configure do
|
Rails.application.configure do
|
||||||
if Rails.env.test? || Danbooru.config.redis_url.blank?
|
if Danbooru.config.redis_url.blank?
|
||||||
cache_config = [:memory_store, { size: 32.megabytes }]
|
cache_config = [:memory_store, { size: 32.megabytes }]
|
||||||
else
|
else
|
||||||
cache_config = [
|
cache_config = [
|
||||||
|
|||||||
@@ -801,6 +801,7 @@ class PostQueryBuilderTest < ActiveSupport::TestCase
|
|||||||
create(:saved_search, query: "aaa", labels: ["zzz"], user: CurrentUser.user)
|
create(:saved_search, query: "aaa", labels: ["zzz"], user: CurrentUser.user)
|
||||||
create(:saved_search, query: "bbb", user: CurrentUser.user)
|
create(:saved_search, query: "bbb", user: CurrentUser.user)
|
||||||
|
|
||||||
|
Danbooru.config.stubs(:redis_url).returns("redis://localhost:6379")
|
||||||
Redis.any_instance.stubs(:exists?).with("search:aaa").returns(true)
|
Redis.any_instance.stubs(:exists?).with("search:aaa").returns(true)
|
||||||
Redis.any_instance.stubs(:exists?).with("search:bbb").returns(true)
|
Redis.any_instance.stubs(:exists?).with("search:bbb").returns(true)
|
||||||
Redis.any_instance.stubs(:smembers).with("search:aaa").returns([@post1.id])
|
Redis.any_instance.stubs(:smembers).with("search:aaa").returns([@post1.id])
|
||||||
|
|||||||
Reference in New Issue
Block a user