karafka-core 2.5.6 → 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: db92a39f948cb06229746101158aa8ada484e51a85149312ef7c30944184f7aa
4
- data.tar.gz: 751901f07f172fa98d452c677fb419e842e5cb25acff07a116a7ef8475205ce8
3
+ metadata.gz: 67cafa1111ce6ff11e3639edc28f436ea538dc3acdbd7db59a3e85e2b16c3c79
4
+ data.tar.gz: 88501c54d507465eee6e438d58a51c3b1225b060c24649bb00d923c8d5eb7d9b
5
5
  SHA512:
6
- metadata.gz: 99918e4fcd414f28bf28c5acef4b47bcd971b15d6e657e69c498996de2aa6e23cb9dc8535def06e9ef0e6a08d55688bf286767e7135fe0d0910da86d4fda30d6
7
- data.tar.gz: 42fc4a7e016d2ce0c7f1bc024fe2cdb68c6bec26b9d9b4b9f613843033eec38aae5cd49cf76101f8c27a460fd987789c205e2e8a659775c85bae35fb96862478
6
+ metadata.gz: 421b6144707c52cb077c36e54bc1936692d27704d5af83b601827b3201a9db91d4abd0777373d60b9e21784f2769f50a3a27c00e94b38372e2986bde2e40cfbf
7
+ data.tar.gz: 0504c6cf7a700c0ebf8db610b9cf26ca93472b735269f78c03c17c2c176b14404625eaa009fb46d7b2013878e830e4cfc09408b7a6e76f0a08e436231729d824
@@ -26,7 +26,6 @@ jobs:
26
26
  - '3.4'
27
27
  - '3.3'
28
28
  - '3.2'
29
- - '3.1'
30
29
  include:
31
30
  - ruby: '3.4'
32
31
  coverage: 'true'
@@ -39,7 +38,7 @@ jobs:
39
38
  run: "[ -e $APT_DEPS ] || sudo apt-get install -y --no-install-recommends $APT_DEPS"
40
39
 
41
40
  - name: Set up Ruby
42
- uses: ruby/setup-ruby@efbf473cab83af4468e8606cc33eca9281bb213f # v1.256.0
41
+ uses: ruby/setup-ruby@1c58d16f1a2d74dc895c05f92d1e31ffe691110e # v1.261.0
43
42
  with:
44
43
  ruby-version: ${{matrix.ruby}}
45
44
  bundler: 'latest'
@@ -71,7 +70,7 @@ jobs:
71
70
  with:
72
71
  fetch-depth: 0
73
72
  - name: Set up Ruby
74
- uses: ruby/setup-ruby@efbf473cab83af4468e8606cc33eca9281bb213f # v1.256.0
73
+ uses: ruby/setup-ruby@1c58d16f1a2d74dc895c05f92d1e31ffe691110e # v1.261.0
75
74
  with:
76
75
  ruby-version: 3.4
77
76
  self-hosted: false
@@ -24,7 +24,7 @@ jobs:
24
24
  fetch-depth: 0
25
25
 
26
26
  - name: Set up Ruby
27
- uses: ruby/setup-ruby@efbf473cab83af4468e8606cc33eca9281bb213f # v1.256.0
27
+ uses: ruby/setup-ruby@1c58d16f1a2d74dc895c05f92d1e31ffe691110e # v1.261.0
28
28
  with:
29
29
  bundler-cache: false
30
30
 
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.4.5
1
+ 3.4.6
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
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
+
3
10
  ## 2.5.6 (2025-09-02)
4
11
  - [Change] Normalize how libs and dependencies are required (no functional change for the end user)
5
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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- karafka-core (2.5.6)
4
+ karafka-core (2.5.7)
5
5
  karafka-rdkafka (>= 0.20.0)
6
6
  logger (>= 1.6.0)
7
7
 
data/karafka-core.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
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.6'
7
+ VERSION = '2.5.7'
8
8
  end
9
9
  end
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.6
4
+ version: 2.5.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maciej Mensfeld
@@ -109,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
109
  requirements:
110
110
  - - ">="
111
111
  - !ruby/object:Gem::Version
112
- version: 3.1.0
112
+ version: 3.2.0
113
113
  required_rubygems_version: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - ">="