Sha256: ba17654a991b9312cc6cc0debca7ea6e330b128b77eb58116e3327b4a93e4fef

Contents?: true

Size: 1.62 KB

Versions: 2

Compression:

Stored size: 1.62 KB

Contents

module Rdkafka
  # Error returned by the underlying rdkafka library.
  class RdkafkaError < RuntimeError
    # The underlying raw error response
    # @return [Integer]
    attr_reader :rdkafka_response, :message_prefix

    # @private
    def initialize(response, message_prefix=nil)
      raise TypeError.new("Response has to be an integer") unless response.is_a? Integer
      @rdkafka_response = response
      @message_prefix = message_prefix
    end

    # This error's code, for example `:partition_eof`, `:msg_size_too_large`.
    # @return [Symbol]
    def code
      code = Rdkafka::Bindings.rd_kafka_err2name(@rdkafka_response).downcase
      if code[0] == "_"
        code[1..-1].to_sym
      else
        code.to_sym
      end
    end

    # Human readable representation of this error.
    # @return [String]
    def to_s
      message_prefix_part = if message_prefix
                       "#{message_prefix} - "
                     else
                       ''
                     end
      "#{message_prefix_part}#{Rdkafka::Bindings.rd_kafka_err2str(@rdkafka_response)} (#{code})"
    end

    # Whether this error indicates the partition is EOF.
    # @return [Boolean]
    def is_partition_eof?
      code == :partition_eof
    end
  end

  # Error with potic partition list returned by the underlying rdkafka library.
  class RdkafkaTopicPartitionListError < RdkafkaError
    # @return [TopicPartitionList]
    attr_reader :topic_partition_list

    # @private
    def initialize(response, topic_partition_list, message_prefix=nil)
      super(response, message_prefix)
      @topic_partition_list = topic_partition_list
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rdkafka-0.6.0 lib/rdkafka/error.rb
rdkafka-0.5.0 lib/rdkafka/error.rb