module Mongo::Retryable

Public Instance Methods

legacy_write_with_retry(server = nil, session = nil) { |server || next_primary| ... } click to toggle source
# File lib/mongo_ha/retryable.rb, line 5
def legacy_write_with_retry(server = nil, session = nil)
  attempt = 0
  begin
    attempt += 1
    yield(server || cluster.next_primary)
  rescue Error::SocketError, Error::SocketTimeoutError => e
    server = nil
    raise(e) if attempt > cluster.max_read_retries || (session && session.in_transaction?)
    log_retry(e)
    cluster.scan!
    retry
  rescue Error::OperationFailure => e
    server = nil
    raise(e) if attempt > cluster.max_read_retries
    if e.write_retryable? && !(session && session.in_transaction?)
      log_retry(e)
      cluster.scan!
      retry
    else
      raise(e)
    end
  end
end