lib/moped/failover.rb
# encoding: utf-8
require "moped/failover/disconnect"
require "moped/failover/ignore"
require "moped/failover/reconfigure"
require "moped/failover/retry"
module Moped
# Provides behaviour around failover scenarios for different types of
# exceptions that get raised on connection and execution of operations.
#
# @since 2.0.0
module Failover
extend self
# Hash lookup for the failover classes based off the exception type.
#
# @since 2.0.0
STRATEGIES = {
Errors::AuthenticationFailure => Ignore,
Errors::ConnectionFailure => Retry,
Errors::CursorNotFound => Ignore,
Errors::OperationFailure => Reconfigure,
Errors::QueryFailure => Reconfigure,
Errors::PoolTimeout => Retry
}.freeze
# Get the appropriate failover handler given the provided exception.
#
# @example Get the failover handler for an IOError.
# Moped::Failover.get(IOError)
#
# @param [ Exception ] exception The raised exception.
#
# @return [ Object ] The failover handler.
#
# @since 2.0.0
def get(exception)
STRATEGIES.fetch(exception.class, Disconnect)
end
end
end