projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
10557: Remove redundant hook condition.
[arvados.git]
/
services
/
api
/
app
/
middlewares
/
rack_socket.rb
diff --git
a/services/api/app/middlewares/rack_socket.rb
b/services/api/app/middlewares/rack_socket.rb
index 892dbf527898b532754846722cc9de164bc612e0..08d163e6e24d547f966513dc73f288c92f9ef679 100644
(file)
--- a/
services/api/app/middlewares/rack_socket.rb
+++ b/
services/api/app/middlewares/rack_socket.rb
@@
-19,12
+19,13
@@
class RackSocket
# +app+ The next layer of the Rack stack.
#
# Accepts options:
# +app+ The next layer of the Rack stack.
#
# Accepts options:
- # +:handler+ (Required) A class to handle new connections.
I
nitialize will
+ # +:handler+ (Required) A class to handle new connections.
#i
nitialize will
# call handler.new to create the actual handler instance object. When a new
# websocket connection is established, #on_connect on the handler instance
# call handler.new to create the actual handler instance object. When a new
# websocket connection is established, #on_connect on the handler instance
- # object
to notify it about the
connection.
+ # object
will be called with the new
connection.
#
#
- # +:mount+ The path for websocket connect requests, defaults to '/websocket'.
+ # +:mount+ The HTTP request path that will be recognized for websocket
+ # connect requests, defaults to '/websocket'.
#
# +:websocket_only+ If true, the server will only handle websocket requests,
# and all other requests will result in an error. If false, unhandled
#
# +:websocket_only+ If true, the server will only handle websocket requests,
# and all other requests will result in an error. If false, unhandled
@@
-43,18
+44,26
@@
class RackSocket
if forked && EM.reactor_running?
EM.stop
end
if forked && EM.reactor_running?
EM.stop
end
- Thread.new {
- EM.run
- }
+ Thread.new do
+ begin
+ EM.run
+ ensure
+ ActiveRecord::Base.connection.close
+ end
+ end
die_gracefully_on_signal
end
else
# faciliates debugging
Thread.abort_on_exception = true
# just spawn a thread and start it up
die_gracefully_on_signal
end
else
# faciliates debugging
Thread.abort_on_exception = true
# just spawn a thread and start it up
- Thread.new {
- EM.run
- }
+ Thread.new do
+ begin
+ EM.run
+ ensure
+ ActiveRecord::Base.connection.close
+ end
+ end
end
# Create actual handler instance object from handler class.
end
# Create actual handler instance object from handler class.
@@
-68,7
+77,11
@@
class RackSocket
def call env
request = Rack::Request.new(env)
if request.path_info == @endpoint and Faye::WebSocket.websocket?(env)
def call env
request = Rack::Request.new(env)
if request.path_info == @endpoint and Faye::WebSocket.websocket?(env)
- ws = Faye::WebSocket.new(env)
+ if @handler.overloaded?
+ return [503, {"Content-Type" => "text/plain"}, ["Too many connections, try again later."]]
+ end
+
+ ws = Faye::WebSocket.new(env, nil, :ping => 30)
# Notify handler about new connection
@handler.on_connect ws
# Notify handler about new connection
@handler.on_connect ws