karafka-core 2.5.5 → 2.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d583d25d25a70ceea071ab47c211586de4fb25ea6dd8d609b25d3904029f60a1
4
- data.tar.gz: a8dc11866243ca0747fac738d884a4deeb1499ca0630188c9ad532ca1edcfd70
3
+ metadata.gz: 67cafa1111ce6ff11e3639edc28f436ea538dc3acdbd7db59a3e85e2b16c3c79
4
+ data.tar.gz: 88501c54d507465eee6e438d58a51c3b1225b060c24649bb00d923c8d5eb7d9b
5
5
  SHA512:
6
- metadata.gz: cea4620003a8fb79cab1015b51ee9fc3a812c6197818f28db563b4cfaada2dcb4c82e32491b785fc805a3b42120e7d3f273e64ca1cc6801312ddeddc9ee0e5ca
7
- data.tar.gz: 63a004ad0f785916ec8c995d6055fdba3c6a9dda328698084d4484028585b44ab4ece66c88c8a546cecf1b5112712ea888f09d00eefcb695894d6c05c4dff278
6
+ metadata.gz: 421b6144707c52cb077c36e54bc1936692d27704d5af83b601827b3201a9db91d4abd0777373d60b9e21784f2769f50a3a27c00e94b38372e2986bde2e40cfbf
7
+ data.tar.gz: 0504c6cf7a700c0ebf8db610b9cf26ca93472b735269f78c03c17c2c176b14404625eaa009fb46d7b2013878e830e4cfc09408b7a6e76f0a08e436231729d824
@@ -6,9 +6,7 @@ concurrency:
6
6
 
7
7
  on:
8
8
  pull_request:
9
- branches: [ main, master ]
10
- push:
11
- branches: [ main, master ]
9
+ branches: [ master ]
12
10
  schedule:
13
11
  - cron: '0 1 * * *'
14
12
 
@@ -28,12 +26,11 @@ jobs:
28
26
  - '3.4'
29
27
  - '3.3'
30
28
  - '3.2'
31
- - '3.1'
32
29
  include:
33
30
  - ruby: '3.4'
34
31
  coverage: 'true'
35
32
  steps:
36
- - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
33
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
37
34
  with:
38
35
  fetch-depth: 0
39
36
 
@@ -41,10 +38,11 @@ jobs:
41
38
  run: "[ -e $APT_DEPS ] || sudo apt-get install -y --no-install-recommends $APT_DEPS"
42
39
 
43
40
  - name: Set up Ruby
44
- uses: ruby/setup-ruby@bb6434c747fa7022e12fa1cae2a0951fcffcff26 # v1.253.0
41
+ uses: ruby/setup-ruby@1c58d16f1a2d74dc895c05f92d1e31ffe691110e # v1.261.0
45
42
  with:
46
43
  ruby-version: ${{matrix.ruby}}
47
44
  bundler: 'latest'
45
+ self-hosted: false
48
46
 
49
47
  - name: Install latest bundler
50
48
  run: |
@@ -68,13 +66,15 @@ jobs:
68
66
  strategy:
69
67
  fail-fast: false
70
68
  steps:
71
- - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
69
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
72
70
  with:
73
71
  fetch-depth: 0
74
72
  - name: Set up Ruby
75
- uses: ruby/setup-ruby@bb6434c747fa7022e12fa1cae2a0951fcffcff26 # v1.253.0
73
+ uses: ruby/setup-ruby@1c58d16f1a2d74dc895c05f92d1e31ffe691110e # v1.261.0
76
74
  with:
77
75
  ruby-version: 3.4
76
+ self-hosted: false
77
+
78
78
  - name: Install latest bundler
79
79
  run: gem install bundler --no-document
80
80
  - name: Install Diffend plugin
@@ -88,7 +88,7 @@ jobs:
88
88
  strategy:
89
89
  fail-fast: false
90
90
  steps:
91
- - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
91
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
92
92
  with:
93
93
  fetch-depth: 0
94
94
  - name: Download Coditsu script
@@ -105,3 +105,20 @@ jobs:
105
105
  fi
106
106
  - name: Run Coditsu
107
107
  run: ./coditsu_script.sh
108
+
109
+ ci-success:
110
+ name: CI Success
111
+ runs-on: ubuntu-latest
112
+ if: always()
113
+ needs:
114
+ - diffend
115
+ - coditsu
116
+ - specs
117
+ steps:
118
+ - name: Check all jobs passed
119
+ if: |
120
+ contains(needs.*.result, 'failure') ||
121
+ contains(needs.*.result, 'cancelled') ||
122
+ contains(needs.*.result, 'skipped')
123
+ run: exit 1
124
+ - run: echo "All CI checks passed!"
@@ -19,12 +19,12 @@ jobs:
19
19
  id-token: write
20
20
 
21
21
  steps:
22
- - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
22
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
23
23
  with:
24
24
  fetch-depth: 0
25
25
 
26
26
  - name: Set up Ruby
27
- uses: ruby/setup-ruby@bb6434c747fa7022e12fa1cae2a0951fcffcff26 # v1.253.0
27
+ uses: ruby/setup-ruby@1c58d16f1a2d74dc895c05f92d1e31ffe691110e # v1.261.0
28
28
  with:
29
29
  bundler-cache: false
30
30
 
@@ -7,7 +7,7 @@ jobs:
7
7
  verify_action_pins:
8
8
  runs-on: ubuntu-latest
9
9
  steps:
10
- - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
10
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
11
11
  - name: Check SHA pins
12
12
  run: |
13
13
  if grep -E -r "uses: .*/.*@(v[0-9]+|main|master)($|[[:space:]]|$)" --include="*.yml" --include="*.yaml" .github/workflows/ | grep -v "#"; then
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.4.5
1
+ 3.4.6
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Karafka Core Changelog
2
2
 
3
+ ## 2.5.7 (2025-09-28)
4
+ - [Enhancement] Optimize `Node#deep_dup` to reduce array allocations during configuration deep copying.
5
+ - [Enhancement] Optimize `Result#initialize` to use shared `EMPTY_HASH` constant for successful validations.
6
+ - [Enhancement] Optimize `StatisticsDecorator#append` string concatenation to reduce allocations.
7
+ - [Enhancement] Optimize `Notifications#instrument` payload handling to avoid unnecessary hash merges for empty payloads.
8
+ - [Change] Remove Ruby 3.1 support due to EOL.
9
+
10
+ ## 2.5.6 (2025-09-02)
11
+ - [Change] Normalize how libs and dependencies are required (no functional change for the end user)
12
+ - [Change] Set minimum `karafka-rdkafka` on `0.20.0` to support new features and allow for open range as both `waterdrop` and `karafka` manage this.
13
+
3
14
  ## 2.5.5 (2025-08-04)
4
15
  - [Enhancement] Remove reliance on `Set` class.
5
16
 
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- karafka-core (2.5.5)
5
- karafka-rdkafka (>= 0.19.2, < 0.21.0)
4
+ karafka-core (2.5.7)
5
+ karafka-rdkafka (>= 0.20.0)
6
6
  logger (>= 1.6.0)
7
7
 
8
8
  GEM
@@ -22,8 +22,35 @@ GEM
22
22
  ffi (1.17.2-x86_64-darwin)
23
23
  ffi (1.17.2-x86_64-linux-gnu)
24
24
  ffi (1.17.2-x86_64-linux-musl)
25
- karafka-rdkafka (0.19.5)
25
+ json (2.13.2)
26
+ karafka-rdkafka (0.21.0)
26
27
  ffi (~> 1.15)
28
+ json (> 2.0)
29
+ logger
30
+ mini_portile2 (~> 2.6)
31
+ rake (> 12)
32
+ karafka-rdkafka (0.21.0-aarch64-linux-gnu)
33
+ ffi (~> 1.15)
34
+ json (> 2.0)
35
+ logger
36
+ mini_portile2 (~> 2.6)
37
+ rake (> 12)
38
+ karafka-rdkafka (0.21.0-arm64-darwin)
39
+ ffi (~> 1.15)
40
+ json (> 2.0)
41
+ logger
42
+ mini_portile2 (~> 2.6)
43
+ rake (> 12)
44
+ karafka-rdkafka (0.21.0-x86_64-linux-gnu)
45
+ ffi (~> 1.15)
46
+ json (> 2.0)
47
+ logger
48
+ mini_portile2 (~> 2.6)
49
+ rake (> 12)
50
+ karafka-rdkafka (0.21.0-x86_64-linux-musl)
51
+ ffi (~> 1.15)
52
+ json (> 2.0)
53
+ logger
27
54
  mini_portile2 (~> 2.6)
28
55
  rake (> 12)
29
56
  logger (1.7.0)
data/karafka-core.gemspec CHANGED
@@ -16,10 +16,10 @@ Gem::Specification.new do |spec|
16
16
  spec.description = 'A toolset of small support modules used throughout the Karafka ecosystem'
17
17
  spec.licenses = %w[MIT]
18
18
 
19
- spec.add_dependency 'karafka-rdkafka', '>= 0.19.2', '< 0.21.0'
19
+ spec.add_dependency 'karafka-rdkafka', '>= 0.20.0'
20
20
  spec.add_dependency 'logger', '>= 1.6.0'
21
21
 
22
- spec.required_ruby_version = '>= 3.1.0'
22
+ spec.required_ruby_version = '>= 3.2.0'
23
23
 
24
24
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
25
25
  spec.require_paths = %w[lib]
@@ -85,15 +85,16 @@ module Karafka
85
85
  def deep_dup
86
86
  dupped = Node.new(node_name, nestings)
87
87
 
88
- dupped.children += children.map do |value|
89
- if value.is_a?(Leaf)
90
- # After inheritance we need to reload the state so the leafs are recompiled again
91
- value = value.dup
92
- value.compiled = false
93
- value
94
- else
95
- value.deep_dup
96
- end
88
+ children.each do |value|
89
+ dupped.children << if value.is_a?(Leaf)
90
+ # After inheritance we need to reload the state so the leafs are
91
+ # recompiled again
92
+ value = value.dup
93
+ value.compiled = false
94
+ value
95
+ else
96
+ value.deep_dup
97
+ end
97
98
  end
98
99
 
99
100
  dupped
@@ -7,6 +7,11 @@ module Karafka
7
7
  class Result
8
8
  attr_reader :errors
9
9
 
10
+ # Empty hash that we use when no errors to save on allocations
11
+ EMPTY_HASH = {}.freeze
12
+
13
+ private_constant :EMPTY_HASH
14
+
10
15
  # Builds a result object and remaps (if needed) error keys to proper error messages
11
16
  #
12
17
  # @param errors [Array<Array>] array with sub-arrays with paths and error keys
@@ -14,7 +19,7 @@ module Karafka
14
19
  def initialize(errors, contract)
15
20
  # Short track to skip object allocation for the happy path
16
21
  if errors.empty?
17
- @errors = {}
22
+ @errors = EMPTY_HASH
18
23
  return
19
24
  end
20
25
 
@@ -139,10 +139,17 @@ module Karafka
139
139
  return
140
140
  end
141
141
 
142
- event = Event.new(
143
- event_id,
144
- time ? payload.merge(time: time) : payload
145
- )
142
+ final_payload = if time
143
+ if payload.empty?
144
+ { time: time }
145
+ else
146
+ payload.merge(time: time)
147
+ end
148
+ else
149
+ payload
150
+ end
151
+
152
+ event = Event.new(event_id, final_payload)
146
153
 
147
154
  assigned_listeners.each do |listener|
148
155
  if listener.is_a?(Proc)
@@ -96,7 +96,9 @@ module Karafka
96
96
  return unless result.is_a?(Numeric)
97
97
  return if current.frozen?
98
98
 
99
- freeze_duration_key = "#{key}_fd"
99
+ key_str = key.to_s
100
+ freeze_duration_key = "#{key_str}_fd"
101
+ delta_key = "#{key_str}_d"
100
102
 
101
103
  if result.zero?
102
104
  current[freeze_duration_key] = previous[freeze_duration_key] || 0
@@ -105,7 +107,7 @@ module Karafka
105
107
  current[freeze_duration_key] = 0
106
108
  end
107
109
 
108
- current["#{key}_d"] = result
110
+ current[delta_key] = result
109
111
  end
110
112
  end
111
113
  end
@@ -4,6 +4,6 @@ module Karafka
4
4
  module Core
5
5
  # Current Karafka::Core version
6
6
  # We follow the versioning schema of given Karafka version
7
- VERSION = '2.5.5'
7
+ VERSION = '2.5.7'
8
8
  end
9
9
  end
data/lib/karafka-core.rb CHANGED
@@ -1,37 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- %w[
4
- logger
5
- yaml
6
- rdkafka
7
-
8
- karafka/core
9
- karafka/core/version
10
-
11
- karafka/core/helpers/time
12
-
13
- karafka/core/monitoring
14
- karafka/core/monitoring/event
15
- karafka/core/monitoring/monitor
16
- karafka/core/monitoring/notifications
17
- karafka/core/monitoring/statistics_decorator
18
-
19
- karafka/core/configurable
20
- karafka/core/configurable/leaf
21
- karafka/core/configurable/node
22
-
23
- karafka/core/contractable/contract
24
- karafka/core/contractable/result
25
- karafka/core/contractable/rule
26
-
27
- karafka/core/instrumentation
28
- karafka/core/instrumentation/callbacks_manager
29
-
30
- karafka/core/taggable
31
- karafka/core/taggable/tags
32
-
33
- karafka/core/patches/rdkafka/bindings
34
- ].each { |dependency| require dependency }
3
+ require 'logger'
4
+ require 'yaml'
5
+ require 'rdkafka'
6
+ require 'karafka/core'
7
+ require 'karafka/core/version'
8
+ require 'karafka/core/helpers/time'
9
+ require 'karafka/core/monitoring'
10
+ require 'karafka/core/monitoring/event'
11
+ require 'karafka/core/monitoring/monitor'
12
+ require 'karafka/core/monitoring/notifications'
13
+ require 'karafka/core/monitoring/statistics_decorator'
14
+ require 'karafka/core/configurable'
15
+ require 'karafka/core/configurable/leaf'
16
+ require 'karafka/core/configurable/node'
17
+ require 'karafka/core/contractable/contract'
18
+ require 'karafka/core/contractable/result'
19
+ require 'karafka/core/contractable/rule'
20
+ require 'karafka/core/instrumentation'
21
+ require 'karafka/core/instrumentation/callbacks_manager'
22
+ require 'karafka/core/taggable'
23
+ require 'karafka/core/taggable/tags'
24
+ require 'karafka/core/patches/rdkafka/bindings'
35
25
 
36
26
  # Karafka framework main namespace
37
27
  module Karafka
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: karafka-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.5
4
+ version: 2.5.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maciej Mensfeld
@@ -15,20 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 0.19.2
19
- - - "<"
20
- - !ruby/object:Gem::Version
21
- version: 0.21.0
18
+ version: 0.20.0
22
19
  type: :runtime
23
20
  prerelease: false
24
21
  version_requirements: !ruby/object:Gem::Requirement
25
22
  requirements:
26
23
  - - ">="
27
24
  - !ruby/object:Gem::Version
28
- version: 0.19.2
29
- - - "<"
30
- - !ruby/object:Gem::Version
31
- version: 0.21.0
25
+ version: 0.20.0
32
26
  - !ruby/object:Gem::Dependency
33
27
  name: logger
34
28
  requirement: !ruby/object:Gem::Requirement
@@ -115,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
115
109
  requirements:
116
110
  - - ">="
117
111
  - !ruby/object:Gem::Version
118
- version: 3.1.0
112
+ version: 3.2.0
119
113
  required_rubygems_version: !ruby/object:Gem::Requirement
120
114
  requirements:
121
115
  - - ">="