]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/api_controller.rb
Handle timeouts inside a view for API calls
[rails.git] / app / controllers / api_controller.rb
index a2d016c8c7fcd10c43b9f473819b30af9a8212e1..89388c0bbf044db798f9c2f2258a61ca1cd25258 100644 (file)
@@ -178,6 +178,16 @@ class ApiController < ApplicationController
   # wrap an api call in a timeout
   def api_call_timeout(&block)
     Timeout.timeout(Settings.api_timeout, Timeout::Error, &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
+      raise OSM::APITimeoutError
+    else
+      raise
+    end
   rescue Timeout::Error
     ActiveRecord::Base.connection.raw_connection.cancel
     raise OSM::APITimeoutError