From c66f7c4626388e21296673c2f849332578762e38 Mon Sep 17 00:00:00 2001 From: evazion Date: Mon, 30 Sep 2019 00:58:34 -0500 Subject: [PATCH] post/pool versions: fix database timeouts not being set. Bug: database timeouts were set only on the main database, not on the post and pool versions database, so users effectively had an unlimited timeout when dealing with these things. --- app/controllers/pool_versions_controller.rb | 8 ++++++++ app/controllers/post_versions_controller.rb | 9 ++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/controllers/pool_versions_controller.rb b/app/controllers/pool_versions_controller.rb index 663b395ce..de76835c3 100644 --- a/app/controllers/pool_versions_controller.rb +++ b/app/controllers/pool_versions_controller.rb @@ -1,6 +1,7 @@ class PoolVersionsController < ApplicationController respond_to :html, :xml, :json before_action :check_availabililty + around_action :set_timeout def index if params[:search] && params[:search][:pool_id].present? @@ -23,6 +24,13 @@ class PoolVersionsController < ApplicationController private + def set_timeout + PoolArchive.connection.execute("SET statement_timeout = #{CurrentUser.user.statement_timeout}") + yield + ensure + PoolArchive.connection.execute("SET statement_timeout = 0") + end + def check_availabililty if !PoolArchive.enabled? raise NotImplementedError.new("Archive service is not configured. Pool versions are not saved.") diff --git a/app/controllers/post_versions_controller.rb b/app/controllers/post_versions_controller.rb index 7c9935ea0..14d6fa8b4 100644 --- a/app/controllers/post_versions_controller.rb +++ b/app/controllers/post_versions_controller.rb @@ -1,11 +1,11 @@ class PostVersionsController < ApplicationController before_action :member_only, except: [:index, :search] before_action :check_availabililty + around_action :set_timeout respond_to :html, :xml, :json respond_to :js, only: [:undo] def index - # XXX statement timeouts @post_versions = PostArchive.includes(:updater, post: [:versions]).search(search_params).paginate(params[:page], :limit => params[:limit], :search_count => params[:search]) respond_with(@post_versions) end @@ -22,6 +22,13 @@ class PostVersionsController < ApplicationController private + def set_timeout + PostArchive.connection.execute("SET statement_timeout = #{CurrentUser.user.statement_timeout}") + yield + ensure + PostArchive.connection.execute("SET statement_timeout = 0") + end + def check_availabililty if !PostArchive.enabled? raise NotImplementedError.new("Archive service is not configured. Post versions are not saved.")