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 +4 -4
- data/.github/workflows/ci.yml +26 -9
- data/.github/workflows/push.yml +2 -2
- data/.github/workflows/verify-action-pins.yml +1 -1
- data/.ruby-version +1 -1
- data/CHANGELOG.md +11 -0
- data/Gemfile.lock +30 -3
- data/karafka-core.gemspec +2 -2
- data/lib/karafka/core/configurable/node.rb +10 -9
- data/lib/karafka/core/contractable/result.rb +6 -1
- data/lib/karafka/core/monitoring/notifications.rb +11 -4
- data/lib/karafka/core/monitoring/statistics_decorator.rb +4 -2
- data/lib/karafka/core/version.rb +1 -1
- data/lib/karafka-core.rb +22 -32
- metadata +4 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67cafa1111ce6ff11e3639edc28f436ea538dc3acdbd7db59a3e85e2b16c3c79
|
4
|
+
data.tar.gz: 88501c54d507465eee6e438d58a51c3b1225b060c24649bb00d923c8d5eb7d9b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 421b6144707c52cb077c36e54bc1936692d27704d5af83b601827b3201a9db91d4abd0777373d60b9e21784f2769f50a3a27c00e94b38372e2986bde2e40cfbf
|
7
|
+
data.tar.gz: 0504c6cf7a700c0ebf8db610b9cf26ca93472b735269f78c03c17c2c176b14404625eaa009fb46d7b2013878e830e4cfc09408b7a6e76f0a08e436231729d824
|
data/.github/workflows/ci.yml
CHANGED
@@ -6,9 +6,7 @@ concurrency:
|
|
6
6
|
|
7
7
|
on:
|
8
8
|
pull_request:
|
9
|
-
branches: [
|
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@
|
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@
|
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@
|
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@
|
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@
|
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!"
|
data/.github/workflows/push.yml
CHANGED
@@ -19,12 +19,12 @@ jobs:
|
|
19
19
|
id-token: write
|
20
20
|
|
21
21
|
steps:
|
22
|
-
- uses: actions/checkout@
|
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@
|
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@
|
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.
|
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
|
-
karafka-rdkafka (>= 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
|
-
|
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
|
+
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.
|
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
|
-
|
89
|
-
if value.is_a?(Leaf)
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
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
|
-
|
143
|
-
|
144
|
-
|
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
|
-
|
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[
|
110
|
+
current[delta_key] = result
|
109
111
|
end
|
110
112
|
end
|
111
113
|
end
|
data/lib/karafka/core/version.rb
CHANGED
data/lib/karafka-core.rb
CHANGED
@@ -1,37 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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.
|
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
|
-
- - "<"
|
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.
|
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.
|
112
|
+
version: 3.2.0
|
119
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
114
|
requirements:
|
121
115
|
- - ">="
|