Class: WaterDrop::Instrumentation::Callbacks::Error

Inherits:
Object
  • Object
show all
Defined in:
lib/waterdrop/instrumentation/callbacks/error.rb

Overview

Callback that kicks in when error occurs and is published in a background thread

Instance Method Summary collapse

Constructor Details

#initialize(producer_id, client_name, monitor) ⇒ Error

Returns a new instance of Error.

Parameters:



11
12
13
14
15
# File 'lib/waterdrop/instrumentation/callbacks/error.rb', line 11

def initialize(producer_id, client_name, monitor)
  @producer_id = producer_id
  @client_name = client_name
  @monitor = monitor
end

Instance Method Details

#call(client_name, error) ⇒ Object

Note:

It will only instrument on errors of the client of our producer

Note:

When there is a particular message produce error (not internal error), the error is shipped via the delivery callback, not via error callback.

Runs the instrumentation monitor with error

Parameters:

  • client_name (String)

    rdkafka client name

  • error (Rdkafka::Error)

    error that occurred



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/waterdrop/instrumentation/callbacks/error.rb', line 23

def call(client_name, error)
  # Emit only errors related to our client
  # Same as with statistics (mor explanation there)
  return unless @client_name == client_name

  @monitor.instrument(
    'error.occurred',
    caller: self,
    error: error,
    producer_id: @producer_id,
    type: 'librdkafka.error'
  )
# This runs from the rdkafka thread, thus we want to safe-guard it and prevent absolute
# crashes even if the instrumentation code fails. If it would bubble-up, it could crash
# the rdkafka background thread
rescue StandardError => e
  @monitor.instrument(
    'error.occurred',
    caller: self,
    error: e,
    producer_id: @producer_id,
    type: 'callbacks.error.error'
  )
end