RUBY-367 deprecate async refresh
This commit is contained in:
parent
fa10508f07
commit
cf69bf4c2e
|
@ -44,19 +44,15 @@ be used for reads.
|
|||
Refresh mode is disabled by default.
|
||||
|
||||
However, if you expect to make live changes to your secondaries, and you want this to be reflected without
|
||||
having to manually restart your app server, then you should enable it. You can enable synchronously, which will
|
||||
refresh the replica set data in a synchronous fashion (which may ocassionally slow down your queries):
|
||||
having to manually restart your app server, then you should enable it. You can enable this mode
|
||||
synchronously, which will refresh the replica set data in a synchronous fashion (which may
|
||||
ocassionally slow down your queries):
|
||||
|
||||
@connection = ReplSetConnection.new(['n1.mydb.net', 27017], :refresh_mode => :sync)
|
||||
|
||||
If you want to refresh via a background thread, use the `:async` mode. NOTE: the background
|
||||
version may be more effective on platforms that use native threads, such as JRuby:
|
||||
|
||||
@connection = ReplSetConnection.new(['n1.mydb.net', 27017], :refresh_mode => :async)
|
||||
|
||||
If you want to change the default refresh interval of 90 seconds, you can do so like this:
|
||||
|
||||
@connection = ReplSetConnection.new(['n1.mydb.net', 27017], :refresh_mode => :async,
|
||||
@connection = ReplSetConnection.new(['n1.mydb.net', 27017], :refresh_mode => :sync,
|
||||
:refresh_interval => 60)
|
||||
|
||||
Do not set this value to anything lower than 30, or you may start to experience performance issues.
|
||||
|
|
|
@ -56,11 +56,10 @@ module Mongo
|
|||
# @option opts [Float] :connect_timeout (nil) The number of seconds to wait before timing out a
|
||||
# connection attempt.
|
||||
# @option opts [Boolean] :ssl (false) If true, create the connection to the server using SSL.
|
||||
# @option opts [Boolean] :refresh_mode (false) Set this to :async to enable a background thread that
|
||||
# periodically updates the state of the connection. If, for example, you initially connect while a secondary
|
||||
# is down, this will reconnect to that secondary behind the scenes to
|
||||
# prevent you from having to reconnect manually. If set to :sync, refresh will happen
|
||||
# synchronously. If +false+, no automatic refresh will occur unless there's a connection failure.
|
||||
# @option opts [Boolean] :refresh_mode (false) Set this to :sync to periodically update the
|
||||
# state of the connection every :refresh_interval seconds. Replica set connection failures
|
||||
# will always trigger a complete refresh. This option is useful when you want to add new nodes
|
||||
# or remove replica set nodes not currently in use by the driver.
|
||||
# @option opts [Integer] :refresh_interval (90) If :refresh_mode is enabled, this is the number of seconds
|
||||
# between calls to check the replica set's state.
|
||||
# @option opts [Boolean] :require_primary (true) If true, require a primary node for the connection
|
||||
|
@ -107,9 +106,12 @@ module Mongo
|
|||
@manager = nil
|
||||
@pool_mutex = Mutex.new
|
||||
|
||||
if ![:sync, :async, false].include?(@refresh_mode)
|
||||
if @refresh_mode == :async
|
||||
warn ":async refresh mode has been deprecated. Refresh
|
||||
mode will be disabled."
|
||||
elsif ![:sync, false].include?(@refresh_mode)
|
||||
raise MongoArgumentError,
|
||||
"Refresh mode must be one of :sync, :async, or false."
|
||||
"Refresh mode must be either :sync or false."
|
||||
end
|
||||
|
||||
# Are we allowing reads from secondaries?
|
||||
|
@ -124,15 +126,8 @@ module Mongo
|
|||
end
|
||||
|
||||
@connected = false
|
||||
|
||||
# Store the refresher thread
|
||||
@refresh_thread = nil
|
||||
@refresh_version = 0
|
||||
|
||||
# Maps
|
||||
@threads_to_sockets = Hash.new { |h, k| h[k] = Hash.new }
|
||||
@tag_map = nil
|
||||
|
||||
# Replica set name
|
||||
if opts[:rs_name]
|
||||
warn ":rs_name option has been deprecated and will be removed in v2.0. " +
|
||||
|
@ -161,7 +156,6 @@ module Mongo
|
|||
manager.connect
|
||||
|
||||
update_config(manager)
|
||||
initiate_refresh_mode
|
||||
|
||||
if @require_primary && self.primary.nil? #TODO: in v2.0, we'll let this be optional and do a lazy connect.
|
||||
close
|
||||
|
@ -213,7 +207,6 @@ module Mongo
|
|||
old_manager = @manager
|
||||
update_config(background_manager)
|
||||
old_manager.close(:soft => true)
|
||||
initiate_refresh_mode
|
||||
|
||||
return true
|
||||
end
|
||||
|
@ -265,7 +258,6 @@ module Mongo
|
|||
def close
|
||||
@connected = false
|
||||
@manager.close(:soft => true) if @manager
|
||||
@threads_to_sockets.clear
|
||||
end
|
||||
|
||||
# If a ConnectionFailure is raised, this method will be called
|
||||
|
@ -470,6 +462,8 @@ module Mongo
|
|||
write_logging_startup_message
|
||||
end
|
||||
|
||||
@last_refresh = Time.now
|
||||
|
||||
should_connect = opts.fetch(:connect, true)
|
||||
connect if should_connect
|
||||
end
|
||||
|
@ -482,24 +476,6 @@ module Mongo
|
|||
@refresh_version += 1
|
||||
end
|
||||
|
||||
# If we're using async refresh, start
|
||||
# a background thread to run the refresh method
|
||||
# every @refresh_interval seconds.
|
||||
def initiate_refresh_mode
|
||||
if @refresh_mode == :async
|
||||
return if @refresh_thread && @refresh_thread.alive?
|
||||
@refresh_thread = Thread.new do
|
||||
while true do
|
||||
sleep(@refresh_interval)
|
||||
refresh
|
||||
end
|
||||
end
|
||||
@refresh_thread.priority = 1000
|
||||
end
|
||||
|
||||
@last_refresh = Time.now
|
||||
end
|
||||
|
||||
# Checkout a socket connected to a node with one of
|
||||
# the provided tags. If no such node exists, raise
|
||||
# an exception.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
require File.join(File.dirname(__FILE__), '..', '..', '..', 'lib', 'mongo')
|
||||
require 'logger'
|
||||
|
||||
$con = Mongo::ReplSetConnection.new(['localhost', 30000], ['localhost', 30001], :read => :secondary, :refresh_mode => :async, :refresh_interval => 30)
|
||||
$con = Mongo::ReplSetConnection.new(['localhost', 30000], ['localhost', 30001], :read => :secondary, :refresh_mode => :sync, :refresh_interval => 30)
|
||||
$db = $con['foo']
|
||||
|
||||
class Load < Sinatra::Base
|
||||
|
|
Loading…
Reference in New Issue