RUBY-386 set 30 second connect timeout. Fail if ismaster fails.

This commit is contained in:
Kyle Banker 2011-12-13 14:51:39 -05:00
parent 4ed709ff7f
commit c308f9b025
2 changed files with 10 additions and 3 deletions

View File

@ -52,7 +52,7 @@ module Mongo
# this is the number of seconds to wait for a new connection to be released before throwing an exception. # this is the number of seconds to wait for a new connection to be released before throwing an exception.
# Note: this setting is relevant only for multi-threaded applications. # Note: this setting is relevant only for multi-threaded applications.
# @option opts [Float] :op_timeout (30) The number of seconds to wait for a read operation to time out. # @option opts [Float] :op_timeout (30) The number of seconds to wait for a read operation to time out.
# @option opts [Float] :connect_timeout (nil) The number of seconds to wait before timing out a # @option opts [Float] :connect_timeout (30) The number of seconds to wait before timing out a
# connection attempt. # connection attempt.
# @option opts [Boolean] :ssl (false) If true, create the connection to the server using SSL. # @option opts [Boolean] :ssl (false) If true, create the connection to the server using SSL.
# @option opts [Boolean] :refresh_mode (false) Set this to :sync to periodically update the # @option opts [Boolean] :refresh_mode (false) Set this to :sync to periodically update the
@ -472,7 +472,7 @@ module Mongo
@op_timeout = opts[:op_timeout] || 30 @op_timeout = opts[:op_timeout] || 30
# Timeout on socket connect. # Timeout on socket connect.
@connect_timeout = opts[:connect_timeout] || nil @connect_timeout = opts[:connect_timeout] || 30
# Mutex for synchronizing pool access # Mutex for synchronizing pool access
# TODO: remove this. # TODO: remove this.

View File

@ -84,7 +84,13 @@ module Mongo
# matches with the name provided. # matches with the name provided.
def set_config def set_config
begin begin
@config = @connection['admin'].command({:ismaster => 1}, :socket => @socket) if @connection.connect_timeout
Mongo::TimeoutHandler.timeout(@connection.connect_timeout, OperationTimeout) do
@config = @connection['admin'].command({:ismaster => 1}, :socket => @socket)
end
else
@config = @connection['admin'].command({:ismaster => 1}, :socket => @socket)
end
if @config['msg'] && @logger if @config['msg'] && @logger
@connection.log(:warn, "#{config['msg']}") @connection.log(:warn, "#{config['msg']}")
@ -95,6 +101,7 @@ module Mongo
rescue ConnectionFailure, OperationFailure, OperationTimeout, SocketError, SystemCallError, IOError => ex rescue ConnectionFailure, OperationFailure, OperationTimeout, SocketError, SystemCallError, IOError => ex
@connection.log(:warn, "Attempted connection to node #{host_string} raised " + @connection.log(:warn, "Attempted connection to node #{host_string} raised " +
"#{ex.class}: #{ex.message}") "#{ex.class}: #{ex.message}")
@socket.close unless @socket.closed?
return nil return nil
end end