karafka 2.0.22 → 2.0.23

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: 6a096a44a1a2988ff394215b8d63f6f2e33b2a3e5100f68f75fcf33eeda4b490
4
- data.tar.gz: 2af0875b550f37ef9ea47b2a3011a3ed3e535adc3f6632ab10510d91bc69590c
3
+ metadata.gz: 84d8130c528081b283889f9f1ebe89b8829b800a2c5d1f4ca99f6d6ce9b4c9df
4
+ data.tar.gz: 3cc30f65586226bcb6d8ed4fdac912a72c1a4a7eb5691862b378629d9de1347f
5
5
  SHA512:
6
- metadata.gz: a81cf3305482e0e925f3a5aa48d978585766826e0990081d74f5f56bc535ae0a8a6be3a4ec986e6a7702d70d0d207ca9acc71b7aeb3909557b44518413ff9bc6
7
- data.tar.gz: 6c66140b258135367a120a5dac4eb8a08f4dc94e24fb3a714b32ec6ad909bc9f85bf5e160aefe5f5d307c9d554c6ecab61cbdebf315ce6953476303e9783122c
6
+ metadata.gz: 8e1f3fc0a3c73035fdb38093eb0594c999d0a715752f41ed95079b1d8f2e89a5a0fa0abdf054272891e89ffa4dd8d010dd2225540d4480067d8bc0359bf2b7b8
7
+ data.tar.gz: 7c1f3f958ef52682e46efb11e8a3ddcbe641ba85c62956fefb84ec6eacadbe9d28ee509bdfd61fcd73ea8f52b1ab867de4909990503024cc5c603788931264ca
checksums.yaml.gz.sig CHANGED
Binary file
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.1.2
1
+ 3.1.3
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Karafka framework changelog
2
2
 
3
+ ## 2.0.23 (2022-12-07)
4
+ - [Maintenance] Align with `waterdrop` and `karafka-core`
5
+ - [Improvement] Provide `Admin#read_topic` API to get topic data without subscribing.
6
+ - [Improvement] Upon an end user `#pause`, do not commit the offset in automatic offset management mode. This will prevent from a scenario where pause is needed but during it a rebalance occurs and a different assigned process starts not from the pause location but from the automatic offset that may be different. This still allows for using the `#mark_as_consumed`.
7
+ - [Fix] Fix a scenario where manual `#pause` would be overwritten by a resume initiated by the strategy.
8
+ - [Fix] Fix a scenario where manual `#pause` in LRJ would cause infinite pause.
9
+
3
10
  ## 2.0.22 (2022-12-02)
4
11
  - [Improvement] Load Pro components upon Karafka require so they can be altered prior to setup.
5
12
  - [Improvement] Do not run LRJ jobs that were added to the jobs queue but were revoked meanwhile.
data/Gemfile.lock CHANGED
@@ -1,11 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- karafka (2.0.22)
5
- karafka-core (>= 2.0.4, < 3.0.0)
6
- rdkafka (>= 0.12)
4
+ karafka (2.0.23)
5
+ karafka-core (>= 2.0.6, < 3.0.0)
7
6
  thor (>= 0.20)
8
- waterdrop (>= 2.4.1, < 3.0.0)
7
+ waterdrop (>= 2.4.3, < 3.0.0)
9
8
  zeitwerk (~> 2.3)
10
9
 
11
10
  GEM
@@ -30,8 +29,9 @@ GEM
30
29
  activesupport (>= 5.0)
31
30
  i18n (1.12.0)
32
31
  concurrent-ruby (~> 1.0)
33
- karafka-core (2.0.4)
32
+ karafka-core (2.0.6)
34
33
  concurrent-ruby (>= 1.1)
34
+ rdkafka (>= 0.12)
35
35
  mini_portile2 (2.8.0)
36
36
  minitest (5.16.3)
37
37
  rake (13.0.6)
@@ -61,9 +61,8 @@ GEM
61
61
  thor (1.2.1)
62
62
  tzinfo (2.0.5)
63
63
  concurrent-ruby (~> 1.0)
64
- waterdrop (2.4.2)
65
- karafka-core (>= 2.0.2, < 3.0.0)
66
- rdkafka (>= 0.10)
64
+ waterdrop (2.4.3)
65
+ karafka-core (>= 2.0.6, < 3.0.0)
67
66
  zeitwerk (~> 2.3)
68
67
  zeitwerk (2.6.6)
69
68
 
data/karafka.gemspec CHANGED
@@ -21,10 +21,9 @@ Gem::Specification.new do |spec|
21
21
  without having to focus on things that are not your business domain.
22
22
  DESC
23
23
 
24
- spec.add_dependency 'karafka-core', '>= 2.0.4', '< 3.0.0'
25
- spec.add_dependency 'rdkafka', '>= 0.12'
24
+ spec.add_dependency 'karafka-core', '>= 2.0.6', '< 3.0.0'
26
25
  spec.add_dependency 'thor', '>= 0.20'
27
- spec.add_dependency 'waterdrop', '>= 2.4.1', '< 3.0.0'
26
+ spec.add_dependency 'waterdrop', '>= 2.4.3', '< 3.0.0'
28
27
  spec.add_dependency 'zeitwerk', '~> 2.3'
29
28
 
30
29
  spec.required_ruby_version = '>= 2.7.0'
data/lib/karafka/admin.rb CHANGED
@@ -9,7 +9,70 @@ module Karafka
9
9
  # @note It always uses the primary defined cluster and does not support multi-cluster work.
10
10
  # If you need this, just replace the cluster info for the time you use this
11
11
  module Admin
12
+ # A fake admin topic representation that we use for messages fetched using this API
13
+ # We cannot use the topics directly because we may want to request data from topics that we
14
+ # do not have in the routing
15
+ Topic = Struct.new(:name, :deserializer)
16
+
17
+ # Defaults for config
18
+ CONFIG_DEFAULTS = {
19
+ 'group.id': 'karafka_admin',
20
+ # We want to know when there is no more data not to end up with an endless loop
21
+ 'enable.partition.eof': true,
22
+ 'statistics.interval.ms': 0
23
+ }.freeze
24
+
25
+ private_constant :Topic, :CONFIG_DEFAULTS
26
+
12
27
  class << self
28
+ # Allows us to read messages from the topic
29
+ #
30
+ # @param name [String, Symbol] topic name
31
+ # @param partition [Integer] partition
32
+ # @param count [Integer] how many messages we want to get at most
33
+ # @param offset [Integer] offset from which we should start. If -1 is provided (default) we
34
+ # will start from the latest offset
35
+ #
36
+ # @return [Array<Karafka::Messages::Message>] array with messages
37
+ def read_topic(name, partition, count, offset = -1)
38
+ messages = []
39
+ tpl = Rdkafka::Consumer::TopicPartitionList.new
40
+
41
+ with_consumer do |consumer|
42
+ if offset.negative?
43
+ offsets = consumer.query_watermark_offsets(name, partition)
44
+ offset = offsets.last - count
45
+ end
46
+
47
+ offset = offset.negative? ? 0 : offset
48
+
49
+ tpl.add_topic_and_partitions_with_offsets(name, partition => offset)
50
+ consumer.assign(tpl)
51
+
52
+ # We should poll as long as we don't have all the messages that we need or as long as
53
+ # we do not read all the messages from the topic
54
+ loop do
55
+ break if messages.size >= count
56
+
57
+ message = consumer.poll(200)
58
+ messages << message if message
59
+ rescue Rdkafka::RdkafkaError => e
60
+ # End of partition
61
+ break if e.code == :partition_eof
62
+
63
+ raise e
64
+ end
65
+ end
66
+
67
+ messages.map do |message|
68
+ Messages::Builders::Message.call(
69
+ message,
70
+ Topic.new(name, Karafka::App.config.deserializer),
71
+ Time.now
72
+ )
73
+ end
74
+ end
75
+
13
76
  # Creates Kafka topic with given settings
14
77
  #
15
78
  # @param name [String] topic name
@@ -52,15 +115,32 @@ module Karafka
52
115
 
53
116
  # Creates admin instance and yields it. After usage it closes the admin instance
54
117
  def with_admin
55
- # Admin needs a producer config
56
- config = Karafka::Setup::AttributesMap.producer(Karafka::App.config.kafka.dup)
57
-
58
- admin = ::Rdkafka::Config.new(config).admin
118
+ admin = config(:producer).admin
59
119
  result = yield(admin)
60
120
  result
61
121
  ensure
62
122
  admin&.close
63
123
  end
124
+
125
+ # Creates consumer instance and yields it. After usage it closes the consumer instance
126
+ def with_consumer
127
+ consumer = config(:consumer).consumer
128
+ result = yield(consumer)
129
+ result
130
+ ensure
131
+ consumer&.close
132
+ end
133
+
134
+ # @param type [Symbol] type of config we want
135
+ # @return [::Rdkafka::Config] rdkafka config
136
+ def config(type)
137
+ config_hash = Karafka::Setup::AttributesMap.public_send(
138
+ type,
139
+ Karafka::App.config.kafka.dup.merge(CONFIG_DEFAULTS)
140
+ )
141
+
142
+ ::Rdkafka::Config.new(config_hash)
143
+ end
64
144
  end
65
145
  end
66
146
  end
@@ -190,7 +190,10 @@ module Karafka
190
190
  # @param offset [Integer] offset from which we want to restart the processing
191
191
  # @param timeout [Integer, nil] how long in milliseconds do we want to pause or nil to use the
192
192
  # default exponential pausing strategy defined for retries
193
- def pause(offset, timeout = nil)
193
+ # @param manual_pause [Boolean] Flag to differentiate between user pause and system/strategy
194
+ # based pause. While they both pause in exactly the same way, the strategy application
195
+ # may need to differentiate between them.
196
+ def pause(offset, timeout = nil, manual_pause = true)
194
197
  timeout ? coordinator.pause_tracker.pause(timeout) : coordinator.pause_tracker.pause
195
198
 
196
199
  client.pause(
@@ -198,6 +201,9 @@ module Karafka
198
201
  messages.metadata.partition,
199
202
  offset
200
203
  )
204
+
205
+ # Indicate, that user took a manual action of pausing
206
+ coordinator.manual_pause if manual_pause
201
207
  end
202
208
 
203
209
  # Resumes processing of the current topic partition
@@ -308,8 +308,8 @@ module Karafka
308
308
  @closed = true
309
309
 
310
310
  # Remove callbacks runners that were registered
311
- ::Karafka::Instrumentation.statistics_callbacks.delete(@subscription_group.id)
312
- ::Karafka::Instrumentation.error_callbacks.delete(@subscription_group.id)
311
+ ::Karafka::Core::Instrumentation.statistics_callbacks.delete(@subscription_group.id)
312
+ ::Karafka::Core::Instrumentation.error_callbacks.delete(@subscription_group.id)
313
313
 
314
314
  @kafka.close
315
315
  @buffer.clear
@@ -397,7 +397,7 @@ module Karafka
397
397
  @name = consumer.name
398
398
 
399
399
  # Register statistics runner for this particular type of callbacks
400
- ::Karafka::Instrumentation.statistics_callbacks.add(
400
+ ::Karafka::Core::Instrumentation.statistics_callbacks.add(
401
401
  @subscription_group.id,
402
402
  Instrumentation::Callbacks::Statistics.new(
403
403
  @subscription_group.id,
@@ -408,7 +408,7 @@ module Karafka
408
408
  )
409
409
 
410
410
  # Register error tracking callback
411
- ::Karafka::Instrumentation.error_callbacks.add(
411
+ ::Karafka::Core::Instrumentation.error_callbacks.add(
412
412
  @subscription_group.id,
413
413
  Instrumentation::Callbacks::Error.new(
414
414
  @subscription_group.id,
@@ -53,7 +53,7 @@ module Karafka
53
53
  private
54
54
 
55
55
  # Sets proper config options to use pro components
56
- # @param config [WaterDrop::Configurable::Node] root config node
56
+ # @param config [::Karafka::Core::Configurable::Node] root config node
57
57
  def reconfigure(config)
58
58
  icfg = config.internal
59
59
 
@@ -42,7 +42,7 @@ module Karafka
42
42
  # Do NOT commit offsets, they are comitted after each job in the AJ consumer.
43
43
  coordinator.pause_tracker.reset
44
44
  elsif coordinator.pause_tracker.attempt <= topic.dead_letter_queue.max_retries
45
- pause(coordinator.seek_offset)
45
+ pause(coordinator.seek_offset, nil, false)
46
46
  else
47
47
  coordinator.pause_tracker.reset
48
48
  skippable_message = find_skippable_message
@@ -51,7 +51,7 @@ module Karafka
51
51
  # since AJ consumer commits the offset after each job, we also know that the
52
52
  # previous job was successful
53
53
  mark_as_consumed(skippable_message)
54
- pause(coordinator.seek_offset)
54
+ pause(coordinator.seek_offset, nil, false)
55
55
  end
56
56
  end
57
57
  end
@@ -33,7 +33,7 @@ module Karafka
33
33
  # No actions needed for the standard flow here
34
34
  def handle_before_enqueue
35
35
  coordinator.on_enqueued do
36
- pause(coordinator.seek_offset, Lrj::MAX_PAUSE_TIME)
36
+ pause(coordinator.seek_offset, Lrj::MAX_PAUSE_TIME, false)
37
37
  end
38
38
  end
39
39
 
@@ -51,7 +51,7 @@ module Karafka
51
51
  # If processing failed, we need to pause
52
52
  # For long running job this will overwrite the default never-ending pause and will
53
53
  # cause the processing to keep going after the error backoff
54
- pause(coordinator.seek_offset)
54
+ pause(coordinator.seek_offset, nil, false)
55
55
  end
56
56
  end
57
57
  end
@@ -47,7 +47,7 @@ module Karafka
47
47
 
48
48
  mark_as_consumed(last_group_message)
49
49
  else
50
- pause(coordinator.seek_offset)
50
+ pause(coordinator.seek_offset, nil, false)
51
51
  end
52
52
  end
53
53
  end
@@ -73,9 +73,13 @@ module Karafka
73
73
  if coordinator.success?
74
74
  coordinator.pause_tracker.reset
75
75
 
76
+ # Do not mark last message if pause happened. This prevents a scenario where pause
77
+ # is overridden upon rebalance by marking
78
+ return if coordinator.manual_pause?
79
+
76
80
  mark_as_consumed(last_group_message)
77
81
  else
78
- pause(coordinator.seek_offset)
82
+ pause(coordinator.seek_offset, nil, false)
79
83
  end
80
84
  end
81
85
  end
@@ -32,9 +32,11 @@ module Karafka
32
32
  if coordinator.success?
33
33
  coordinator.pause_tracker.reset
34
34
 
35
+ return if coordinator.manual_pause?
36
+
35
37
  mark_as_consumed(messages.last)
36
38
  elsif coordinator.pause_tracker.attempt <= topic.dead_letter_queue.max_retries
37
- pause(coordinator.seek_offset)
39
+ pause(coordinator.seek_offset, nil, false)
38
40
  # If we've reached number of retries that we could, we need to skip the first message
39
41
  # that was not marked as consumed, pause and continue, while also moving this message
40
42
  # to the dead topic
@@ -44,7 +46,7 @@ module Karafka
44
46
  skippable_message = find_skippable_message
45
47
  dispatch_to_dlq(skippable_message) if dispatch_to_dlq?
46
48
  mark_as_consumed(skippable_message)
47
- pause(coordinator.seek_offset)
49
+ pause(coordinator.seek_offset, nil, false)
48
50
  end
49
51
  end
50
52
  end
@@ -34,12 +34,14 @@ module Karafka
34
34
  if coordinator.success?
35
35
  coordinator.pause_tracker.reset
36
36
 
37
+ return if coordinator.manual_pause?
38
+
37
39
  mark_as_consumed(last_group_message) unless revoked?
38
40
  seek(coordinator.seek_offset) unless revoked?
39
41
 
40
42
  resume
41
43
  elsif coordinator.pause_tracker.attempt <= topic.dead_letter_queue.max_retries
42
- pause(coordinator.seek_offset)
44
+ pause(coordinator.seek_offset, nil, false)
43
45
  else
44
46
  coordinator.pause_tracker.reset
45
47
 
@@ -38,7 +38,7 @@ module Karafka
38
38
 
39
39
  resume
40
40
  elsif coordinator.pause_tracker.attempt <= topic.dead_letter_queue.max_retries
41
- pause(coordinator.seek_offset)
41
+ pause(coordinator.seek_offset, nil, false)
42
42
  else
43
43
  coordinator.pause_tracker.reset
44
44
 
@@ -35,7 +35,7 @@ module Karafka
35
35
  if coordinator.success?
36
36
  coordinator.pause_tracker.reset
37
37
  elsif coordinator.pause_tracker.attempt <= topic.dead_letter_queue.max_retries
38
- pause(coordinator.seek_offset)
38
+ pause(coordinator.seek_offset, nil, false)
39
39
  # If we've reached number of retries that we could, we need to skip the first message
40
40
  # that was not marked as consumed, pause and continue, while also moving this message
41
41
  # to the dead topic.
@@ -51,7 +51,7 @@ module Karafka
51
51
  dispatch_to_dlq(skippable_message)
52
52
  end
53
53
 
54
- pause(coordinator.seek_offset)
54
+ pause(coordinator.seek_offset, nil, false)
55
55
  end
56
56
  end
57
57
  end
@@ -37,7 +37,7 @@ module Karafka
37
37
  #
38
38
  # For VP it applies the same way and since VP cannot be used with MOM we should not
39
39
  # have any edge cases here.
40
- pause(coordinator.seek_offset, MAX_PAUSE_TIME)
40
+ pause(coordinator.seek_offset, MAX_PAUSE_TIME, false)
41
41
  end
42
42
  end
43
43
 
@@ -47,6 +47,8 @@ module Karafka
47
47
  if coordinator.success?
48
48
  coordinator.pause_tracker.reset
49
49
 
50
+ return if coordinator.manual_pause?
51
+
50
52
  mark_as_consumed(last_group_message) unless revoked?
51
53
  seek(coordinator.seek_offset) unless revoked?
52
54
 
@@ -55,7 +57,7 @@ module Karafka
55
57
  # If processing failed, we need to pause
56
58
  # For long running job this will overwrite the default never-ending pause and will
57
59
  # cause the processing to keep going after the error backoff
58
- pause(coordinator.seek_offset)
60
+ pause(coordinator.seek_offset, nil, false)
59
61
  end
60
62
  end
61
63
  end
@@ -36,7 +36,7 @@ module Karafka
36
36
  #
37
37
  # For VP it applies the same way and since VP cannot be used with MOM we should not
38
38
  # have any edge cases here.
39
- pause(coordinator.seek_offset, Lrj::MAX_PAUSE_TIME)
39
+ pause(coordinator.seek_offset, Lrj::MAX_PAUSE_TIME, false)
40
40
  end
41
41
  end
42
42
 
@@ -50,7 +50,7 @@ module Karafka
50
50
 
51
51
  resume
52
52
  else
53
- pause(coordinator.seek_offset)
53
+ pause(coordinator.seek_offset, false)
54
54
  end
55
55
  end
56
56
  end
@@ -32,7 +32,7 @@ module Karafka
32
32
  if coordinator.success?
33
33
  coordinator.pause_tracker.reset
34
34
  else
35
- pause(coordinator.seek_offset)
35
+ pause(coordinator.seek_offset, nil, false)
36
36
  end
37
37
  end
38
38
  end
@@ -21,6 +21,7 @@ module Karafka
21
21
  @revoked = false
22
22
  @consumptions = {}
23
23
  @running_jobs = 0
24
+ @manual_pause = false
24
25
  @mutex = Mutex.new
25
26
  end
26
27
 
@@ -34,6 +35,9 @@ module Karafka
34
35
  # consumption results of consumer instances we no longer control
35
36
  @consumptions.clear
36
37
 
38
+ # When starting to run, no pause is expected and no manual pause as well
39
+ @manual_pause = false
40
+
37
41
  # We set it on the first encounter and never again, because then the offset setting
38
42
  # should be up to the consumers logic (our or the end user)
39
43
  # Seek offset needs to be always initialized as for case where manual offset management
@@ -98,6 +102,17 @@ module Karafka
98
102
  def revoked?
99
103
  @revoked
100
104
  end
105
+
106
+ # Store in the coordinator info, that this pause was done manually by the end user and not
107
+ # by the system itself
108
+ def manual_pause
109
+ @mutex.synchronize { @manual_pause = true }
110
+ end
111
+
112
+ # @return [Boolean] are we in a pause that was initiated by the user
113
+ def manual_pause?
114
+ @pause_tracker.paused? && @manual_pause
115
+ end
101
116
  end
102
117
  end
103
118
  end
@@ -26,7 +26,7 @@ module Karafka
26
26
  # Do NOT commit offsets, they are comitted after each job in the AJ consumer.
27
27
  coordinator.pause_tracker.reset
28
28
  elsif coordinator.pause_tracker.attempt <= topic.dead_letter_queue.max_retries
29
- pause(coordinator.seek_offset)
29
+ pause(coordinator.seek_offset, nil, false)
30
30
  else
31
31
  coordinator.pause_tracker.reset
32
32
  skippable_message = find_skippable_message
@@ -35,7 +35,7 @@ module Karafka
35
35
  # since AJ consumer commits the offset after each job, we also know that the
36
36
  # previous job was successful
37
37
  mark_as_consumed(skippable_message)
38
- pause(coordinator.seek_offset)
38
+ pause(coordinator.seek_offset, nil, false)
39
39
  end
40
40
  end
41
41
  end
@@ -51,9 +51,15 @@ module Karafka
51
51
  if coordinator.success?
52
52
  coordinator.pause_tracker.reset
53
53
 
54
+ # We should not move the offset automatically when the partition was paused
55
+ # If we would not do this upon a revocation during the pause time, a different process
56
+ # would pick not from the place where we paused but from the offset that would be
57
+ # automatically committed here
58
+ return if coordinator.manual_pause?
59
+
54
60
  mark_as_consumed(messages.last)
55
61
  else
56
- pause(coordinator.seek_offset)
62
+ pause(coordinator.seek_offset, nil, false)
57
63
  end
58
64
  end
59
65
 
@@ -22,9 +22,11 @@ module Karafka
22
22
  if coordinator.success?
23
23
  coordinator.pause_tracker.reset
24
24
 
25
+ return if coordinator.manual_pause?
26
+
25
27
  mark_as_consumed(messages.last)
26
28
  elsif coordinator.pause_tracker.attempt <= topic.dead_letter_queue.max_retries
27
- pause(coordinator.seek_offset)
29
+ pause(coordinator.seek_offset, nil, false)
28
30
  # If we've reached number of retries that we could, we need to skip the first message
29
31
  # that was not marked as consumed, pause and continue, while also moving this message
30
32
  # to the dead topic
@@ -43,7 +45,7 @@ module Karafka
43
45
  return if revoked?
44
46
 
45
47
  # We pause to backoff once just in case.
46
- pause(coordinator.seek_offset)
48
+ pause(coordinator.seek_offset, nil, false)
47
49
  end
48
50
  end
49
51
 
@@ -21,7 +21,7 @@ module Karafka
21
21
  if coordinator.success?
22
22
  coordinator.pause_tracker.reset
23
23
  elsif coordinator.pause_tracker.attempt <= topic.dead_letter_queue.max_retries
24
- pause(coordinator.seek_offset)
24
+ pause(coordinator.seek_offset, nil, false)
25
25
  # If we've reached number of retries that we could, we need to skip the first message
26
26
  # that was not marked as consumed, pause and continue, while also moving this message
27
27
  # to the dead topic
@@ -33,7 +33,7 @@ module Karafka
33
33
  dispatch_to_dlq(skippable_message)
34
34
 
35
35
  # We pause to backoff once just in case.
36
- pause(coordinator.seek_offset)
36
+ pause(coordinator.seek_offset, nil, false)
37
37
  end
38
38
  end
39
39
  end
@@ -20,7 +20,7 @@ module Karafka
20
20
  if coordinator.success?
21
21
  coordinator.pause_tracker.reset
22
22
  else
23
- pause(coordinator.seek_offset)
23
+ pause(coordinator.seek_offset, nil, false)
24
24
  end
25
25
  end
26
26
  end
@@ -3,5 +3,5 @@
3
3
  # Main module namespace
4
4
  module Karafka
5
5
  # Current Karafka version
6
- VERSION = '2.0.22'
6
+ VERSION = '2.0.23'
7
7
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: karafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.22
4
+ version: 2.0.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maciej Mensfeld
@@ -35,7 +35,7 @@ cert_chain:
35
35
  Qf04B9ceLUaC4fPVEz10FyobjaFoY4i32xRto3XnrzeAgfEe4swLq8bQsR3w/EF3
36
36
  MGU0FeSV2Yj7Xc2x/7BzLK8xQn5l7Yy75iPF+KP3vVmDHnNl
37
37
  -----END CERTIFICATE-----
38
- date: 2022-12-02 00:00:00.000000000 Z
38
+ date: 2022-12-07 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: karafka-core
@@ -43,7 +43,7 @@ dependencies:
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 2.0.4
46
+ version: 2.0.6
47
47
  - - "<"
48
48
  - !ruby/object:Gem::Version
49
49
  version: 3.0.0
@@ -53,24 +53,10 @@ dependencies:
53
53
  requirements:
54
54
  - - ">="
55
55
  - !ruby/object:Gem::Version
56
- version: 2.0.4
56
+ version: 2.0.6
57
57
  - - "<"
58
58
  - !ruby/object:Gem::Version
59
59
  version: 3.0.0
60
- - !ruby/object:Gem::Dependency
61
- name: rdkafka
62
- requirement: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: '0.12'
67
- type: :runtime
68
- prerelease: false
69
- version_requirements: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- version: '0.12'
74
60
  - !ruby/object:Gem::Dependency
75
61
  name: thor
76
62
  requirement: !ruby/object:Gem::Requirement
@@ -91,7 +77,7 @@ dependencies:
91
77
  requirements:
92
78
  - - ">="
93
79
  - !ruby/object:Gem::Version
94
- version: 2.4.1
80
+ version: 2.4.3
95
81
  - - "<"
96
82
  - !ruby/object:Gem::Version
97
83
  version: 3.0.0
@@ -101,7 +87,7 @@ dependencies:
101
87
  requirements:
102
88
  - - ">="
103
89
  - !ruby/object:Gem::Version
104
- version: 2.4.1
90
+ version: 2.4.3
105
91
  - - "<"
106
92
  - !ruby/object:Gem::Version
107
93
  version: 3.0.0
@@ -200,7 +186,6 @@ files:
200
186
  - lib/karafka/helpers/async.rb
201
187
  - lib/karafka/helpers/colorize.rb
202
188
  - lib/karafka/helpers/multi_delegator.rb
203
- - lib/karafka/instrumentation.rb
204
189
  - lib/karafka/instrumentation/callbacks/error.rb
205
190
  - lib/karafka/instrumentation/callbacks/statistics.rb
206
191
  - lib/karafka/instrumentation/logger.rb
@@ -355,7 +340,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
355
340
  - !ruby/object:Gem::Version
356
341
  version: '0'
357
342
  requirements: []
358
- rubygems_version: 3.3.7
343
+ rubygems_version: 3.3.26
359
344
  signing_key:
360
345
  specification_version: 4
361
346
  summary: Karafka is Ruby and Rails efficient Kafka processing framework.
metadata.gz.sig CHANGED
Binary file
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- # @note Since we can only have one statistics callbacks manager and one error callbacks manager
5
- # we use WaterDrops one that is already configured.
6
- module Instrumentation
7
- class << self
8
- # Returns a manager for statistics callbacks
9
- # @return [::WaterDrop::CallbacksManager]
10
- def statistics_callbacks
11
- ::WaterDrop::Instrumentation.statistics_callbacks
12
- end
13
-
14
- # Returns a manager for error callbacks
15
- # @return [::WaterDrop::CallbacksManager]
16
- def error_callbacks
17
- ::WaterDrop::Instrumentation.error_callbacks
18
- end
19
- end
20
- end
21
- end