Make API and web roll back any open transactions on timeout
By default the exception thrown by Timeout::timeout is caught using Kernel::catch so that it cannot be stopped by intermediate exception handlers. The problem with that is that it stops any database transactions that were in progress being rolled back because they never see the exception. Fortunately passing a class to Timeout::timeout changes it's behaviour so that the exception is thrown and caught in the normal way, allowing the database transactions to rollback.
This commit is contained in:
parent
160a328620
commit
8b03371e10
1 changed files with 2 additions and 2 deletions
|
@ -343,7 +343,7 @@ class ApplicationController < ActionController::Base
|
|||
##
|
||||
# wrap an api call in a timeout
|
||||
def api_call_timeout
|
||||
OSM::Timer.timeout(API_TIMEOUT) do
|
||||
OSM::Timer.timeout(API_TIMEOUT, Timeout::Error) do
|
||||
yield
|
||||
end
|
||||
rescue Timeout::Error
|
||||
|
@ -353,7 +353,7 @@ class ApplicationController < ActionController::Base
|
|||
##
|
||||
# wrap a web page in a timeout
|
||||
def web_timeout
|
||||
OSM::Timer.timeout(WEB_TIMEOUT) do
|
||||
OSM::Timer.timeout(WEB_TIMEOUT, Timeout::Error) do
|
||||
yield
|
||||
end
|
||||
rescue ActionView::Template::Error => ex
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue