module Tengine::Core::SafeUpdatable
Public Class Methods
safemode(collection, wtimeout=61440)
click to toggle source
# File lib/tengine/core/safe_updatable.rb, line 30 def safemode(collection, wtimeout=61440) collection.database.session.cluster.with_primary do |n| return n.peers.size.zero? || { :w => "majority", :wtimeout => wtimeout, } end end
Public Instance Methods
update_in_safe_mode(collection, selector, document, opts=nil)
click to toggle source
# File lib/tengine/core/safe_updatable.rb, line 6 def update_in_safe_mode(collection, selector, document, opts=nil) options = { :upsert => false, :multiple => false } options.update(opts) if opts options = options.merge({ :safe => safemode(collection, 10240) }) max_retries = 60 retries = 0 begin # Return a Hash containing the last error object if running safe mode. # Otherwise, returns true self.class.with(options).where(selector).update(document) rescue Moped::Errors::ConnectionFailure, Moped::Errors::OperationFailure => ex case ex when Moped::Errors::OperationFailure then raise ex unless ex.message =~ /wtimeout/ end retries += 1 raise ex if retries > max_retries Tengine.logger.debug "retrying due to mongodb error #{ex.inspect}, #{retries} times." sleep 0.5 retry end end
Private Instance Methods
safemode(collection, wtimeout=61440)
click to toggle source
# File lib/tengine/core/safe_updatable.rb, line 30 def safemode(collection, wtimeout=61440) collection.database.session.cluster.with_primary do |n| return n.peers.size.zero? || { :w => "majority", :wtimeout => wtimeout, } end end