Sha256: 5747d3408344cddfcb4f9255588a5c7ccfd3f1cc6f3192f81dd9b84eb22312d4
Contents?: true
Size: 1.15 KB
Versions: 2
Compression:
Stored size: 1.15 KB
Contents
require 'tengine/core' module Tengine::Core::SafeUpdatable extend ActiveSupport::Concern module InstanceMethods 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) }) max_retries = 100 retries = 0 begin # Return a Hash containing the last error object if running safe mode. # Otherwise, returns true result = collection.driver.update(selector, document, options) rescue Mongo::ConnectionFailure, Mongo::OperationFailure => ex case ex when Mongo::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}" sleep 0.5 retry end end def safemode(collection) res = true case collection.driver.db.connection when Mongo::ReplSetConnection then res = { :w => "majority", :wtimeout => 1024, } end res end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
tengine_core-0.5.32 | lib/tengine/core/safe_updatable.rb |
tengine_core-0.5.31 | lib/tengine/core/safe_updatable.rb |