summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2021-05-05 19:44:35 +0200
committerGitHub <noreply@github.com>2021-05-05 19:44:35 +0200
commit059df83d1dcabb27d2e638b4835791bd570ec779 (patch)
tree98605f362ad1afa18f69c916999c05dc2f662f35
parent036556d3509fac5fa487a0d5ff3cf95767e8d84f (diff)
Fix database serialization failure returning HTTP 500 (#16101)
Database serialization failure occurs when a read-replica is used and a query takes long enough that rows on the primary database become unavailable. It should return HTTP 503 as it is temporary. Re-order rescue definitions according to their status codes
-rw-r--r--app/controllers/application_controller.rb15
1 files changed, 7 insertions, 8 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 6361d4b276f..b4fb83661bc 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -18,17 +18,16 @@ class ApplicationController < ActionController::Base
helper_method :use_seamless_external_login?
helper_method :whitelist_mode?
- rescue_from ActionController::RoutingError, with: :not_found
- rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity
- rescue_from ActionController::UnknownFormat, with: :not_acceptable
- rescue_from ActionController::ParameterMissing, with: :bad_request
- rescue_from Paperclip::AdapterRegistry::NoHandlerError, with: :bad_request
- rescue_from ActiveRecord::RecordNotFound, with: :not_found
+ rescue_from ActionController::ParameterMissing, Paperclip::AdapterRegistry::NoHandlerError, with: :bad_request
rescue_from Mastodon::NotPermittedError, with: :forbidden
- rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error
- rescue_from Mastodon::RaceConditionError, Seahorse::Client::NetworkingError, Stoplight::Error::RedLight, with: :service_unavailable
+ rescue_from ActionController::RoutingError, ActiveRecord::RecordNotFound, with: :not_found
+ rescue_from ActionController::UnknownFormat, with: :not_acceptable
+ rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity
rescue_from Mastodon::RateLimitExceededError, with: :too_many_requests
+ rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error
+ rescue_from Mastodon::RaceConditionError, Seahorse::Client::NetworkingError, Stoplight::Error::RedLight, ActiveRecord::SerializationFailure, with: :service_unavailable
+
before_action :store_current_location, except: :raise_not_found, unless: :devise_controller?
before_action :require_functional!, if: :user_signed_in?