Merge remote-tracking branch 'upstream/pull/5178'

This commit is contained in:
Tom Hughes 2024-09-13 18:09:37 +01:00
commit 70f1b327b4
5 changed files with 40 additions and 16 deletions

View file

@ -216,20 +216,25 @@ class ApplicationController < ActionController::Base
##
# wrap a web page in a timeout
def web_timeout(&block)
raise Timeout::Error if Settings.web_timeout.negative?
Timeout.timeout(Settings.web_timeout, &block)
rescue ActionView::Template::Error => e
e = e.cause
if e.is_a?(Timeout::Error) ||
(e.is_a?(ActiveRecord::StatementInvalid) && e.message.include?("execution expired"))
ActiveRecord::Base.connection.raw_connection.cancel
render :action => "timeout"
respond_to_timeout
else
raise
end
rescue Timeout::Error
respond_to_timeout
end
def respond_to_timeout
ActiveRecord::Base.connection.raw_connection.cancel
render :action => "timeout"
render :action => "timeout", :status => :gateway_timeout
end
##

View file

@ -1,12 +0,0 @@
atom_feed(:language => I18n.locale, :schema_date => 2009,
:id => url_for(params.merge(:only_path => false)),
:root_url => url_for(params.merge(:only_path => false, :format => nil)),
"xmlns:georss" => "http://www.georss.org/georss") do |feed|
feed.title @title
feed.subtitle :type => "xhtml" do |xhtml|
xhtml.p do |p|
p << t(".sorry")
end
end
end

View file

@ -1 +0,0 @@
<p><%= t ".sorry" %></p>

View file

@ -0,0 +1,12 @@
xml.rss("version" => "2.0",
"xmlns:dc" => "http://purl.org/dc/elements/1.1/") do
xml.channel do
if params[:changeset_id]
xml.title t("changeset_comments.feeds.show.title_particular", :changeset_id => params[:changeset_id])
else
xml.title t("changeset_comments.feeds.show.title_all")
end
xml.link root_url
xml.description t(".sorry")
end
end

View file

@ -68,5 +68,25 @@ module ChangesetComments
get changesets_comments_feed_path(:format => "rss", :limit => 100001)
assert_response :bad_request
end
def test_feed_timeout
with_settings(:web_timeout => -1) do
get changesets_comments_feed_path
end
assert_response :error
assert_equal "application/rss+xml; charset=utf-8", @response.header["Content-Type"]
assert_dom "rss>channel>title", :text => "OpenStreetMap changeset discussion"
assert_dom "rss>channel>description", :text => /the list of changeset comments you requested took too long to retrieve/
end
def test_feed_changeset_timeout
with_settings(:web_timeout => -1) do
get changeset_comments_feed_path(123)
end
assert_response :error
assert_equal "application/rss+xml; charset=utf-8", @response.header["Content-Type"]
assert_dom "rss>channel>title", :text => "OpenStreetMap changeset #123 discussion"
assert_dom "rss>channel>description", :text => /the list of changeset comments you requested took too long to retrieve/
end
end
end