File: //usr/share/rubygems-integration/all/gems/bunny-2.19.0/lib/bunny/exceptions.rb
module Bunny
# Base class for all Bunny exceptions
# @api public
class Exception < ::StandardError
end
class HostListDepleted < Exception
def initialize
super("No more hosts to try in the supplied list of hosts")
end
end
# Indicates a network failure. If automatic network
# recovery mode is enabled, these will be typically handled
# by the client itself.
#
# @api public
class NetworkFailure < Exception
attr_reader :cause
def initialize(message, cause)
super(message)
@cause = cause
end
end
# Base class for all channel level exceptions
class ChannelLevelException < Exception
attr_reader :channel, :channel_close
def initialize(message, ch, channel_close)
super(message)
@channel = ch
@channel_close = channel_close
end
end
# Base class for all connection level exceptions
class ConnectionLevelException < Exception
attr_reader :connection, :connection_close
def initialize(message, connection, connection_close)
super(message)
@connection = connection
@connection_close = connection_close
end
end
# Can indicate either a channel or connection-level issue
class NotAllowedError < Exception
attr_reader :connection, :connection_close
def initialize(message, connection, connection_close = nil)
super(message)
@connection = connection
@connection_close = connection_close
end
end
# Raised when TCP connection to RabbitMQ fails because of an unresolved
# hostname, connectivity problem, etc
class TCPConnectionFailed < Exception
attr_reader :hostname, :port
def initialize(e, hostname=nil, port=nil)
m = case e
when String then
e
when ::Exception then
e.message
end
if hostname && port
super("Could not establish TCP connection to #{hostname}:#{port}: #{m}")
else
super(m)
end
end
end
class TCPConnectionFailedForAllHosts < TCPConnectionFailed
def initialize
super("Could not establish TCP connection to any of the configured hosts", nil, nil)
end
end
# Raised when a frame is sent over an already closed connection
class ConnectionClosedError < Exception
def initialize(frame)
if frame.respond_to?(:method_class)
super("Trying to send frame through a closed connection. Frame is #{frame.inspect}, method class is #{frame.method_class}")
else
super("Trying to send frame through a closed connection. Frame is #{frame.inspect}")
end
end
end
class ConnectionAlreadyClosed < Exception
def initialize
super('Connection has been already closed')
end
end
class ShutdownSignal < Exception
end
# Raised when RabbitMQ closes TCP connection before finishing connection
# sequence properly. This typically indicates an authentication issue.
class PossibleAuthenticationFailureError < Exception
#
# API
#
attr_reader :username, :vhost
def initialize(username, vhost, password_length)
@username = username
@vhost = vhost
super("Authentication with RabbitMQ failed. Please check your connection settings. Username: #{username}, vhost: #{vhost}, password length: #{password_length}")
end # initialize(settings)
end # PossibleAuthenticationFailureError
# Raised when RabbitMQ closes TCP connection due to an authentication failure.
# Relies on RabbitMQ 3.2 Authentication Failure Notifications extension:
# http://www.rabbitmq.com/auth-notification.html
class AuthenticationFailureError < PossibleAuthenticationFailureError
#
# API
#
attr_reader :username, :vhost
def initialize(username, vhost, password_length)
@username = username
@vhost = vhost
super(username, vhost, password_length)
end # initialize(settings)
end # AuthenticationFailureError
# backwards compatibility
# @private
ConnectionError = TCPConnectionFailed
# @private
ServerDownError = TCPConnectionFailed
# Raised when a channel is closed forcefully using rabbitmqctl
# or the management UI plugin
class ForcedChannelCloseError < ChannelLevelException; end
# Raised when a connection is closed forcefully using rabbitmqctl
# or the management UI plugin
class ForcedConnectionCloseError < ConnectionLevelException; end
# @private
class MessageError < ConnectionLevelException; end
# @private
class ProtocolError < ConnectionLevelException; end
# Raised when RabbitMQ reports and internal error
class InternalError < ConnectionLevelException; end
# Raised when read or write I/O operations time out (but only if
# a connection is configured to use them)
class ClientTimeout < Timeout::Error; end
# Raised on initial TCP connection timeout
class ConnectionTimeout < Timeout::Error; end
# Base exception class for data consistency and framing errors.
class InconsistentDataError < Exception
end
# Raised by adapters when frame does not end with {final octet AMQ::Protocol::Frame::FINAL_OCTET}.
# This suggest that there is a bug in adapter or AMQ broker implementation.
#
# @see https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf AMQP 0.9.1 specification (Section 2.3)
class NoFinalOctetError < InconsistentDataError
def initialize
super("Frame doesn't end with #{AMQ::Protocol::Frame::FINAL_OCTET} as it must, which means the size is miscalculated.")
end
end
# Raised by adapters when actual frame payload size in bytes is not equal
# to the size specified in that frame's header.
# This suggest that there is a bug in adapter or AMQ broker implementation.
#
# @see https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf AMQP 0.9.1 specification (Section 2.3)
class BadLengthError < InconsistentDataError
def initialize(expected_length, actual_length)
super("Frame payload should be #{expected_length} long, but it's #{actual_length} long.")
end
end
# Raised when a closed channel is used
class ChannelAlreadyClosed < Exception
attr_reader :channel
def initialize(message, ch)
super(message)
@channel = ch
end
end
# Raised when RabbitMQ responds with 406 PRECONDITION_FAILED
class PreconditionFailed < ChannelLevelException
end
# Raised when RabbitMQ responds with 404 NOT_FOUND
class NotFound < ChannelLevelException
end
# Raised when RabbitMQ responds with 405 RESOUCE_LOCKED
class ResourceLocked < ChannelLevelException
end
# Raised when RabbitMQ responds with 403 ACCESS_REFUSED
class AccessRefused < ChannelLevelException
end
# Raised when RabbitMQ responds with 504 CHANNEL_ERROR
class ChannelError < ConnectionLevelException
end
# Raised when RabbitMQ responds with 503 COMMAND_INVALID
class CommandInvalid < ConnectionLevelException
end
# Raised when RabbitMQ responds with 501 FRAME_ERROR
class FrameError < ConnectionLevelException
end
# Raised when RabbitMQ responds with 505 UNEXPECTED_FRAME
class UnexpectedFrame < ConnectionLevelException
end
# Raised when RabbitMQ responds with 506 RESOURCE_ERROR
class ResourceError < ConnectionLevelException
end
# @private
class NetworkErrorWrapper < Exception
attr_reader :other
def initialize(other)
super(other.message)
@other = other
end
end
# Raised when RabbitMQ responds with 302 CONNECTION_FORCED
# (which means the connection was closed using rabbitmqctl or
# RabbitMQ management UI)
class ConnectionForced < ConnectionLevelException
end
# @private
class MissingTLSCertificateFile < Exception
end
# @private
class MissingTLSKeyFile < Exception
end
end