From c6b9de8486e3209014dcd8b0154bc896048d5ee4 Mon Sep 17 00:00:00 2001 From: albert Date: Wed, 30 Jan 2013 15:04:13 -0800 Subject: [PATCH] refactored with_timeout helper --- app/models/post.rb | 9 ++------- app/presenters/post_set_presenters/base.rb | 5 ++++- config/initializers/active_record_extensions.rb | 8 +++++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index 31a4daa89..34a89b7ba 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -600,13 +600,8 @@ class Post < ActiveRecord::Base if tags.blank? && Danbooru.config.blank_tag_search_fast_count count = Danbooru.config.blank_tag_search_fast_count else - begin - ActiveRecord::Base.connection.execute("SET statement_timeout = 500") - count = Post.tag_match(tags).undeleted.count - rescue ActiveRecord::StatementInvalid - count = Danbooru.config.blank_tag_search_fast_count || 1_000_000 - ensure - ActiveRecord::Base.connection.execute("SET statement_timeout = 3000") + count = Post.with_timeout(500, Danbooru.config.blank_tag_search_fast_count || 1_000_000) do + Post.tag_match(tags).undeleted.count end end diff --git a/app/presenters/post_set_presenters/base.rb b/app/presenters/post_set_presenters/base.rb index fb974cb11..a5ed2920a 100644 --- a/app/presenters/post_set_presenters/base.rb +++ b/app/presenters/post_set_presenters/base.rb @@ -6,8 +6,11 @@ module PostSetPresenters def post_previews_html(template) html = "" + is_empty = Post.with_timeout(500, false) do + posts.empty? + end - if posts.empty? + if is_empty? return template.render("post_sets/blank") end diff --git a/config/initializers/active_record_extensions.rb b/config/initializers/active_record_extensions.rb index 480bdc69d..48cc3567b 100644 --- a/config/initializers/active_record_extensions.rb +++ b/config/initializers/active_record_extensions.rb @@ -8,14 +8,16 @@ module Danbooru connection.execute("SET STATEMENT_TIMEOUT = 0") unless Rails.env == "test" yield ensure - connection.execute("SET STATEMENT_TIMEOUT = 5000") unless Rails.env == "test" + connection.execute("SET STATEMENT_TIMEOUT = 3000") unless Rails.env == "test" end - def with_timeout(n) + def with_timeout(n, default_value) connection.execute("SET STATEMENT_TIMEOUT = #{n}") unless Rails.env == "test" yield + rescue ActiveRecord::StatementInvalid + return default_value ensure - connection.execute("SET STATEMENT_TIMEOUT = 5000") unless Rails.env == "test" + connection.execute("SET STATEMENT_TIMEOUT = 3000") unless Rails.env == "test" end end