Sha256: b1faaed85ab1e48bd02effda4c99fb4c4e5216124026acbf3f126248f10c498e

Contents?: true

Size: 982 Bytes

Versions: 1

Compression:

Stored size: 982 Bytes

Contents

# -*- coding: utf-8 -*-

require 'tengine_core'
require 'mongoid'
require 'mongoid/version'
require 'mongoid/cursor'

if Mongoid::VERSION < "3.0.0"
  class Mongoid::Cursor
    # https://github.com/mongoid/mongoid/pull/1609
    def each
      retry_on_connection_failure do
        while document = cursor.next
          yield Mongoid::Factory.from_db(klass, document)
        end
      end
    end
  end

  module Mongoid::Collections::Retry
    # https://github.com/mongoid/mongoid/pull/1739
    # Mongoid 2.3.x needs additional fix
    def retry_on_connection_failure
      retries = 0
      begin
        yield
      rescue Mongo::ConnectionFailure, Mongo::OperationTimeout, Mongo::OperationFailure => ex
        raise unless ex.class == Mongo::OperationFailure and ex.message !~ /not master/

        retries += 1
        raise if retries > Mongoid.max_retries_on_connection_failure

        Kernel.sleep(0.5)
        log_retry retries
        retry
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tengine_core-0.5.37 lib/tengine/core/mongoid_fix.rb