sbmt-kafka_consumer 2.4.1 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3d328765bacde07e4c62f2a9844bb22ab61192ee180d2837a4fdfd1a5e4258dd
4
- data.tar.gz: a7b441d6e0a6d2aa29b1e1e3e8474cc0076463b00b56697b8b3cccc204567a14
3
+ metadata.gz: 6e41656d16c2a1b741868c2d079e4e83c3df397e5e7491680e417738231afe71
4
+ data.tar.gz: '09117d5de7194d45bf44235f731adfd4e6f60cc18d6c613c1fe2a3800048a89c'
5
5
  SHA512:
6
- metadata.gz: 61ecdb8df804c1fa008bb1421037f1f96c062d3ec3fb1ac3034ef0a45bfa9641e2bfef4b9bee364597781436e852661a3e04375a3c9236199e557c5abce521d5
7
- data.tar.gz: 4eb7926ffb74c3423c0d83a0066ba33d35e6f0f722e93c2dff9f4f953dc7c5988953e5cd55ca5ed71084ee3834c4a8530c940f550a1be88d140c01b82102bc9f
6
+ metadata.gz: 0ce2e28e58baf91e4e1612d02c37767399e643ed99c78f26adfcae1e23e77aab8f1af8bda64c6f91b16456e069b24f7db53812843347924b124b9e890d8f4e69
7
+ data.tar.gz: 3447e5c1c06c3f636d4c5f37070a9f349714aea586710ba7c87d2cd3248ba5ad686bfca28d1550ec0af86d18cd556315945596c7b7c069fa31a4d0db2e1425b9
data/CHANGELOG.md CHANGED
@@ -13,6 +13,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
13
13
 
14
14
  ### Fixed
15
15
 
16
+ ## [2.5.0] - 2024-06-24
17
+
18
+ ### Added
19
+
20
+ - Added option `max_error_count` for liveness probes, which is triggered when `librdkafka.error`
21
+
16
22
  ## [2.4.1] - 2024-06-15
17
23
 
18
24
  ### Fixed
data/README.md CHANGED
@@ -92,6 +92,7 @@ default: &default
92
92
  enabled: true
93
93
  path: "/liveness"
94
94
  timeout: 15
95
+ max_error_count: 15 # default 10
95
96
  metrics: # optional section
96
97
  port: 9090
97
98
  path: "/metrics"
@@ -8,4 +8,5 @@ class Sbmt::KafkaConsumer::Config::Probes::LivenessProbe < Dry::Struct
8
8
  .optional
9
9
  .default("/liveness")
10
10
  attribute :timeout, Sbmt::KafkaConsumer::Types::Coercible::Integer.optional.default(10)
11
+ attribute :max_error_count, Sbmt::KafkaConsumer::Types::Coercible::Integer.optional.default(10)
11
12
  end
@@ -7,9 +7,14 @@ module Sbmt
7
7
  include ListenerHelper
8
8
  include KafkaConsumer::Probes::Probe
9
9
 
10
- def initialize(timeout_sec: 10)
10
+ ERROR_TYPE = "Liveness probe error"
11
+
12
+ def initialize(timeout_sec: 10, max_error_count: 10)
11
13
  @consumer_groups = Karafka::App.routes.map(&:name)
12
14
  @timeout_sec = timeout_sec
15
+ @max_error_count = max_error_count
16
+ @error_count = 0
17
+ @error_backtrace = nil
13
18
  @polls = {}
14
19
 
15
20
  setup_subscription
@@ -18,9 +23,14 @@ module Sbmt
18
23
  def probe(_env)
19
24
  now = current_time
20
25
  timed_out_polls = select_timed_out_polls(now)
21
- return probe_ok groups: meta_from_polls(polls, now) if timed_out_polls.empty?
22
26
 
23
- probe_error failed_groups: meta_from_polls(timed_out_polls, now)
27
+ if timed_out_polls.empty? && @error_count < @max_error_count
28
+ probe_ok groups: meta_from_polls(polls, now) if timed_out_polls.empty?
29
+ elsif @error_count >= @max_error_count
30
+ probe_error error_type: ERROR_TYPE, failed_librdkafka: {error_count: @error_count, error_backtrace: @error_backtrace}
31
+ else
32
+ probe_error error_type: ERROR_TYPE, failed_groups: meta_from_polls(timed_out_polls, now)
33
+ end
24
34
  end
25
35
 
26
36
  def on_connection_listener_fetch_loop(event)
@@ -28,6 +38,16 @@ module Sbmt
28
38
  polls[consumer_group.name] = current_time
29
39
  end
30
40
 
41
+ def on_error_occurred(event)
42
+ type = event[:type]
43
+
44
+ return unless type == "librdkafka.error"
45
+ error = event[:error]
46
+
47
+ @error_backtrace ||= (error.backtrace || []).join("\n")
48
+ @error_count += 1
49
+ end
50
+
31
51
  private
32
52
 
33
53
  attr_reader :polls, :timeout_sec, :consumer_groups
@@ -23,7 +23,7 @@ module Sbmt
23
23
  liveness = config[:liveness]
24
24
  if liveness[:enabled]
25
25
  c.probe liveness[:path], Sbmt::KafkaConsumer::Instrumentation::LivenessListener.new(
26
- timeout_sec: liveness[:timeout]
26
+ timeout_sec: liveness[:timeout], max_error_count: liveness[:max_error_count]
27
27
  )
28
28
  end
29
29
 
@@ -19,6 +19,7 @@ module Sbmt
19
19
  end
20
20
 
21
21
  def probe_error(extra_meta = {})
22
+ KafkaConsumer.logger.error("probe error meta: #{meta.merge(extra_meta).inspect}")
22
23
  [500, HEADERS, [meta.merge(extra_meta).to_json]]
23
24
  end
24
25
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sbmt
4
4
  module KafkaConsumer
5
- VERSION = "2.4.1"
5
+ VERSION = "2.5.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sbmt-kafka_consumer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.1
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sbermarket Ruby-Platform Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-17 00:00:00.000000000 Z
11
+ date: 2024-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -570,7 +570,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
570
570
  - !ruby/object:Gem::Version
571
571
  version: '0'
572
572
  requirements: []
573
- rubygems_version: 3.5.11
573
+ rubygems_version: 3.1.6
574
574
  signing_key:
575
575
  specification_version: 4
576
576
  summary: Ruby gem for consuming Kafka messages