karafka 2.0.0 → 2.1.0
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
- checksums.yaml.gz.sig +0 -0
- data/.github/FUNDING.yml +1 -0
- data/.github/workflows/ci.yml +40 -16
- data/.rspec +4 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +459 -796
- data/Gemfile +3 -2
- data/Gemfile.lock +44 -32
- data/LICENSE +1 -1
- data/README.md +22 -17
- data/bin/integrations +86 -26
- data/bin/karafka +1 -13
- data/bin/rspecs +6 -0
- data/bin/verify_license_integrity +37 -0
- data/certs/cert_chain.pem +26 -0
- data/config/{errors.yml → locales/errors.yml} +34 -6
- data/config/locales/pro_errors.yml +34 -0
- data/docker-compose.yml +4 -30
- data/karafka.gemspec +17 -10
- data/lib/active_job/karafka.rb +3 -7
- data/lib/active_job/queue_adapters/karafka_adapter.rb +7 -1
- data/lib/karafka/active_job/consumer.rb +29 -6
- data/lib/karafka/active_job/current_attributes/loading.rb +36 -0
- data/lib/karafka/active_job/current_attributes/persistence.rb +28 -0
- data/lib/karafka/active_job/current_attributes.rb +42 -0
- data/lib/karafka/active_job/dispatcher.rb +34 -3
- data/lib/karafka/active_job/job_options_contract.rb +13 -2
- data/lib/karafka/admin.rb +246 -0
- data/lib/karafka/app.rb +30 -7
- data/lib/karafka/base_consumer.rb +124 -82
- data/lib/karafka/cli/base.rb +20 -0
- data/lib/karafka/cli/console.rb +13 -8
- data/lib/karafka/cli/info.rb +3 -2
- data/lib/karafka/cli/server.rb +55 -8
- data/lib/karafka/cli/topics.rb +146 -0
- data/lib/karafka/connection/client.rb +118 -61
- data/lib/karafka/connection/consumer_group_coordinator.rb +48 -0
- data/lib/karafka/connection/listener.rb +78 -30
- data/lib/karafka/connection/listeners_batch.rb +18 -2
- data/lib/karafka/connection/rebalance_manager.rb +3 -0
- data/lib/karafka/contracts/config.rb +1 -1
- data/lib/karafka/contracts/consumer_group.rb +22 -9
- data/lib/karafka/contracts/server_cli_options.rb +71 -11
- data/lib/karafka/contracts/topic.rb +65 -0
- data/lib/karafka/contracts.rb +1 -1
- data/lib/karafka/embedded.rb +36 -0
- data/lib/karafka/errors.rb +6 -4
- data/lib/karafka/helpers/colorize.rb +6 -0
- data/lib/karafka/instrumentation/callbacks/error.rb +3 -4
- data/lib/karafka/instrumentation/callbacks/statistics.rb +14 -4
- data/lib/karafka/instrumentation/logger_listener.rb +151 -22
- data/lib/karafka/instrumentation/notifications.rb +26 -7
- data/lib/karafka/instrumentation/proctitle_listener.rb +7 -16
- data/lib/karafka/instrumentation/vendors/datadog/dashboard.json +1 -1
- data/lib/karafka/instrumentation/vendors/datadog/logger_listener.rb +153 -0
- data/lib/karafka/instrumentation/vendors/datadog/{listener.rb → metrics_listener.rb} +62 -35
- data/lib/karafka/instrumentation/vendors/kubernetes/liveness_listener.rb +166 -0
- data/lib/karafka/licenser.rb +53 -50
- data/lib/karafka/messages/builders/batch_metadata.rb +8 -8
- data/lib/karafka/messages/builders/messages.rb +6 -2
- data/lib/karafka/messages/message.rb +14 -2
- data/lib/karafka/messages/messages.rb +5 -0
- data/lib/karafka/messages/parser.rb +14 -0
- data/lib/karafka/patches/rdkafka/bindings.rb +132 -0
- data/lib/karafka/pro/active_job/consumer.rb +10 -9
- data/lib/karafka/pro/active_job/dispatcher.rb +28 -3
- data/lib/karafka/pro/active_job/job_options_contract.rb +16 -3
- data/lib/karafka/pro/encryption/cipher.rb +58 -0
- data/lib/karafka/pro/encryption/contracts/config.rb +79 -0
- data/lib/karafka/pro/encryption/errors.rb +24 -0
- data/lib/karafka/pro/encryption/messages/middleware.rb +46 -0
- data/lib/karafka/pro/encryption/messages/parser.rb +56 -0
- data/lib/karafka/pro/encryption/setup/config.rb +48 -0
- data/lib/karafka/pro/encryption.rb +47 -0
- data/lib/karafka/pro/iterator.rb +253 -0
- data/lib/karafka/pro/loader.rb +52 -26
- data/lib/karafka/pro/performance_tracker.rb +10 -6
- data/lib/karafka/pro/processing/collapser.rb +62 -0
- data/lib/karafka/pro/processing/coordinator.rb +92 -16
- data/lib/karafka/pro/processing/filters/base.rb +61 -0
- data/lib/karafka/pro/processing/filters/delayer.rb +70 -0
- data/lib/karafka/pro/processing/filters/expirer.rb +51 -0
- data/lib/karafka/pro/processing/filters/throttler.rb +84 -0
- data/lib/karafka/pro/processing/filters/virtual_limiter.rb +52 -0
- data/lib/karafka/pro/processing/filters_applier.rb +104 -0
- data/lib/karafka/pro/processing/jobs/consume_non_blocking.rb +7 -5
- data/lib/karafka/pro/processing/jobs/revoked_non_blocking.rb +37 -0
- data/lib/karafka/pro/processing/jobs_builder.rb +22 -4
- data/lib/karafka/pro/processing/partitioner.rb +33 -24
- data/lib/karafka/pro/processing/scheduler.rb +27 -8
- data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_lrj_mom.rb +68 -0
- data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_lrj_mom_vp.rb +74 -0
- data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_mom.rb +72 -0
- data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_mom_vp.rb +76 -0
- data/lib/karafka/pro/processing/strategies/aj/dlq_lrj_mom.rb +64 -0
- data/lib/karafka/pro/processing/strategies/aj/dlq_lrj_mom_vp.rb +68 -0
- data/lib/karafka/pro/processing/strategies/aj/dlq_mom.rb +64 -0
- data/lib/karafka/pro/processing/strategies/aj/dlq_mom_vp.rb +69 -0
- data/lib/karafka/pro/processing/strategies/aj/ftr_lrj_mom.rb +38 -0
- data/lib/karafka/pro/processing/strategies/aj/ftr_lrj_mom_vp.rb +64 -0
- data/lib/karafka/pro/processing/strategies/aj/ftr_mom.rb +38 -0
- data/lib/karafka/pro/processing/strategies/aj/ftr_mom_vp.rb +58 -0
- data/lib/karafka/pro/processing/strategies/aj/lrj_mom.rb +37 -0
- data/lib/karafka/pro/processing/strategies/aj/lrj_mom_vp.rb +79 -0
- data/lib/karafka/pro/processing/strategies/aj/mom.rb +36 -0
- data/lib/karafka/pro/processing/strategies/aj/mom_vp.rb +52 -0
- data/lib/karafka/pro/processing/strategies/base.rb +26 -0
- data/lib/karafka/pro/processing/strategies/default.rb +105 -0
- data/lib/karafka/pro/processing/strategies/dlq/default.rb +131 -0
- data/lib/karafka/pro/processing/strategies/dlq/ftr.rb +61 -0
- data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj.rb +75 -0
- data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj_mom.rb +71 -0
- data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj_mom_vp.rb +43 -0
- data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj_vp.rb +41 -0
- data/lib/karafka/pro/processing/strategies/dlq/ftr_mom.rb +69 -0
- data/lib/karafka/pro/processing/strategies/dlq/ftr_mom_vp.rb +41 -0
- data/lib/karafka/pro/processing/strategies/dlq/ftr_vp.rb +40 -0
- data/lib/karafka/pro/processing/strategies/dlq/lrj.rb +63 -0
- data/lib/karafka/pro/processing/strategies/dlq/lrj_mom.rb +63 -0
- data/lib/karafka/pro/processing/strategies/dlq/lrj_mom_vp.rb +36 -0
- data/lib/karafka/pro/processing/strategies/dlq/lrj_vp.rb +39 -0
- data/lib/karafka/pro/processing/strategies/dlq/mom.rb +68 -0
- data/lib/karafka/pro/processing/strategies/dlq/mom_vp.rb +37 -0
- data/lib/karafka/pro/processing/strategies/dlq/vp.rb +40 -0
- data/lib/karafka/pro/processing/strategies/ftr/default.rb +104 -0
- data/lib/karafka/pro/processing/strategies/ftr/vp.rb +40 -0
- data/lib/karafka/pro/processing/strategies/lrj/default.rb +87 -0
- data/lib/karafka/pro/processing/strategies/lrj/ftr.rb +69 -0
- data/lib/karafka/pro/processing/strategies/lrj/ftr_mom.rb +67 -0
- data/lib/karafka/pro/processing/strategies/lrj/ftr_mom_vp.rb +40 -0
- data/lib/karafka/pro/processing/strategies/lrj/ftr_vp.rb +39 -0
- data/lib/karafka/pro/processing/strategies/lrj/mom.rb +80 -0
- data/lib/karafka/pro/processing/strategies/lrj/mom_vp.rb +38 -0
- data/lib/karafka/pro/processing/strategies/lrj/vp.rb +36 -0
- data/lib/karafka/pro/processing/strategies/mom/default.rb +46 -0
- data/lib/karafka/pro/processing/strategies/mom/ftr.rb +53 -0
- data/lib/karafka/pro/processing/strategies/mom/ftr_vp.rb +37 -0
- data/lib/karafka/pro/processing/strategies/mom/vp.rb +35 -0
- data/lib/karafka/pro/processing/strategies/vp/default.rb +104 -0
- data/lib/karafka/pro/{contracts/base.rb → processing/strategies.rb} +6 -5
- data/lib/karafka/pro/processing/strategy_selector.rb +84 -0
- data/lib/karafka/pro/processing/virtual_offset_manager.rb +147 -0
- data/lib/karafka/pro/routing/features/base.rb +24 -0
- data/lib/karafka/pro/routing/features/dead_letter_queue/contract.rb +50 -0
- data/lib/karafka/pro/routing/features/dead_letter_queue.rb +27 -0
- data/lib/karafka/pro/routing/{builder_extensions.rb → features/delaying/config.rb} +8 -11
- data/lib/karafka/pro/routing/features/delaying/contract.rb +38 -0
- data/lib/karafka/pro/routing/features/delaying/topic.rb +59 -0
- data/lib/karafka/pro/routing/features/delaying.rb +29 -0
- data/lib/karafka/pro/routing/features/expiring/config.rb +27 -0
- data/lib/karafka/pro/routing/features/expiring/contract.rb +38 -0
- data/lib/karafka/pro/routing/features/expiring/topic.rb +59 -0
- data/lib/karafka/pro/routing/features/expiring.rb +27 -0
- data/lib/karafka/pro/routing/features/filtering/config.rb +40 -0
- data/lib/karafka/pro/routing/features/filtering/contract.rb +41 -0
- data/lib/karafka/pro/routing/features/filtering/topic.rb +51 -0
- data/lib/karafka/pro/routing/features/filtering.rb +27 -0
- data/lib/karafka/pro/routing/features/long_running_job/config.rb +28 -0
- data/lib/karafka/pro/routing/features/long_running_job/contract.rb +37 -0
- data/lib/karafka/pro/routing/features/long_running_job/topic.rb +42 -0
- data/lib/karafka/pro/routing/features/long_running_job.rb +28 -0
- data/lib/karafka/pro/routing/features/throttling/config.rb +32 -0
- data/lib/karafka/pro/routing/features/throttling/contract.rb +41 -0
- data/lib/karafka/pro/routing/features/throttling/topic.rb +69 -0
- data/lib/karafka/pro/routing/features/throttling.rb +30 -0
- data/lib/karafka/pro/routing/features/virtual_partitions/config.rb +30 -0
- data/lib/karafka/pro/routing/features/virtual_partitions/contract.rb +52 -0
- data/lib/karafka/pro/routing/features/virtual_partitions/topic.rb +56 -0
- data/lib/karafka/pro/routing/features/virtual_partitions.rb +27 -0
- data/lib/karafka/process.rb +23 -8
- data/lib/karafka/processing/coordinator.rb +102 -23
- data/lib/karafka/processing/coordinators_buffer.rb +5 -1
- data/lib/karafka/processing/executor.rb +51 -21
- data/lib/karafka/processing/executors_buffer.rb +10 -26
- data/lib/karafka/processing/jobs/base.rb +6 -2
- data/lib/karafka/processing/jobs/consume.rb +8 -5
- data/lib/karafka/processing/jobs/idle.rb +24 -0
- data/lib/karafka/processing/jobs_builder.rb +2 -3
- data/lib/karafka/processing/jobs_queue.rb +14 -8
- data/lib/karafka/processing/partitioner.rb +3 -1
- data/lib/karafka/processing/result.rb +14 -1
- data/lib/karafka/processing/strategies/aj_dlq_mom.rb +44 -0
- data/lib/karafka/processing/strategies/aj_mom.rb +21 -0
- data/lib/karafka/processing/strategies/base.rb +52 -0
- data/lib/karafka/processing/strategies/default.rb +142 -0
- data/lib/karafka/processing/strategies/dlq.rb +88 -0
- data/lib/karafka/processing/strategies/dlq_mom.rb +49 -0
- data/lib/karafka/processing/strategies/mom.rb +29 -0
- data/lib/karafka/processing/strategy_selector.rb +47 -0
- data/lib/karafka/processing/worker.rb +8 -3
- data/lib/karafka/railtie.rb +24 -12
- data/lib/karafka/routing/activity_manager.rb +84 -0
- data/lib/karafka/routing/builder.rb +20 -0
- data/lib/karafka/routing/consumer_group.rb +38 -4
- data/lib/karafka/routing/consumer_mapper.rb +0 -10
- data/lib/karafka/routing/features/active_job/builder.rb +33 -0
- data/lib/karafka/routing/features/active_job/config.rb +15 -0
- data/lib/karafka/routing/features/active_job/contract.rb +41 -0
- data/lib/karafka/routing/features/active_job/topic.rb +33 -0
- data/lib/karafka/routing/features/active_job.rb +13 -0
- data/lib/karafka/routing/features/base/expander.rb +53 -0
- data/lib/karafka/routing/features/base.rb +34 -0
- data/lib/karafka/routing/features/dead_letter_queue/config.rb +19 -0
- data/lib/karafka/routing/features/dead_letter_queue/contract.rb +42 -0
- data/lib/karafka/routing/features/dead_letter_queue/topic.rb +41 -0
- data/lib/karafka/routing/features/dead_letter_queue.rb +16 -0
- data/lib/karafka/routing/features/declaratives/config.rb +18 -0
- data/lib/karafka/routing/features/declaratives/contract.rb +30 -0
- data/lib/karafka/routing/features/declaratives/topic.rb +44 -0
- data/lib/karafka/routing/features/declaratives.rb +14 -0
- data/lib/karafka/routing/features/manual_offset_management/config.rb +15 -0
- data/lib/karafka/routing/features/manual_offset_management/contract.rb +24 -0
- data/lib/karafka/routing/features/manual_offset_management/topic.rb +35 -0
- data/lib/karafka/routing/features/manual_offset_management.rb +18 -0
- data/lib/karafka/routing/proxy.rb +18 -20
- data/lib/karafka/routing/router.rb +27 -2
- data/lib/karafka/routing/subscription_group.rb +43 -5
- data/lib/karafka/routing/subscription_groups_builder.rb +6 -1
- data/lib/karafka/routing/topic.rb +17 -5
- data/lib/karafka/routing/topics.rb +8 -0
- data/lib/karafka/runner.rb +1 -0
- data/lib/karafka/serialization/json/deserializer.rb +1 -0
- data/lib/karafka/server.rb +58 -28
- data/lib/karafka/setup/attributes_map.rb +344 -0
- data/lib/karafka/setup/config.rb +48 -19
- data/lib/karafka/status.rb +35 -7
- data/lib/karafka/templates/karafka.rb.erb +14 -6
- data/lib/karafka/time_trackers/base.rb +1 -6
- data/lib/karafka/time_trackers/pause.rb +49 -19
- data/lib/karafka/time_trackers/poll.rb +7 -3
- data/lib/karafka/version.rb +1 -1
- data/lib/karafka.rb +56 -3
- data/renovate.json +6 -0
- data.tar.gz.sig +0 -0
- metadata +189 -61
- metadata.gz.sig +0 -0
- data/bin/wait_for_kafka +0 -20
- data/certs/mensfeld.pem +0 -25
- data/lib/karafka/active_job/routing/extensions.rb +0 -31
- data/lib/karafka/contracts/consumer_group_topic.rb +0 -42
- data/lib/karafka/instrumentation.rb +0 -21
- data/lib/karafka/pro/base_consumer.rb +0 -82
- data/lib/karafka/pro/contracts/consumer_group.rb +0 -34
- data/lib/karafka/pro/contracts/consumer_group_topic.rb +0 -33
- data/lib/karafka/pro/routing/topic_extensions.rb +0 -38
|
@@ -3,8 +3,14 @@
|
|
|
3
3
|
module Karafka
|
|
4
4
|
module TimeTrackers
|
|
5
5
|
# Handles Kafka topic partition pausing and resuming with exponential back-offs.
|
|
6
|
+
# Since expiring and pausing can happen from both consumer and listener, this needs to be
|
|
7
|
+
# thread-safe.
|
|
8
|
+
#
|
|
9
|
+
# @note We do not have to worry about performance implications of a mutex wrapping most of the
|
|
10
|
+
# code here, as this is not a frequently used tracker. It is active only once per batch in
|
|
11
|
+
# case of long-running-jobs and upon errors.
|
|
6
12
|
class Pause < Base
|
|
7
|
-
attr_reader :
|
|
13
|
+
attr_reader :attempt, :current_timeout
|
|
8
14
|
|
|
9
15
|
# @param timeout [Integer] how long should we wait when anything went wrong (in ms)
|
|
10
16
|
# @param max_timeout [Integer, nil] if exponential is on, what is the max value we can reach
|
|
@@ -13,67 +19,91 @@ module Karafka
|
|
|
13
19
|
# timeout value
|
|
14
20
|
# @return [Karafka::TimeTrackers::Pause]
|
|
15
21
|
# @example
|
|
16
|
-
#
|
|
22
|
+
# options = { timeout: 1000, max_timeout: 1000, exponential_backoff: false }
|
|
23
|
+
# pause = Karafka::TimeTrackers::Pause.new(**options)
|
|
17
24
|
# pause.expired? #=> true
|
|
18
25
|
# pause.paused? #=> false
|
|
19
26
|
# pause.pause
|
|
27
|
+
# pause.increment
|
|
20
28
|
# sleep(1.1)
|
|
21
29
|
# pause.paused? #=> true
|
|
22
30
|
# pause.expired? #=> true
|
|
23
|
-
# pause.
|
|
31
|
+
# pause.attempt #=> 1
|
|
24
32
|
# pause.pause
|
|
25
|
-
# pause.
|
|
33
|
+
# pause.increment
|
|
34
|
+
# pause.attempt #=> 2
|
|
26
35
|
# pause.paused? #=> true
|
|
27
36
|
# pause.expired? #=> false
|
|
28
37
|
# pause.resume
|
|
29
|
-
# pause.
|
|
38
|
+
# pause.attempt #=> 2
|
|
30
39
|
# pause.paused? #=> false
|
|
31
40
|
# pause.reset
|
|
32
|
-
# pause.
|
|
41
|
+
# pause.attempt #=> 0
|
|
33
42
|
def initialize(timeout:, max_timeout:, exponential_backoff:)
|
|
34
43
|
@started_at = nil
|
|
35
|
-
@
|
|
44
|
+
@attempt = 0
|
|
36
45
|
@timeout = timeout
|
|
46
|
+
@current_timeout = timeout
|
|
37
47
|
@max_timeout = max_timeout
|
|
38
48
|
@exponential_backoff = exponential_backoff
|
|
49
|
+
@mutex = Mutex.new
|
|
39
50
|
super()
|
|
40
51
|
end
|
|
41
52
|
|
|
42
53
|
# Pauses the processing from now till the end of the interval (backoff or non-backoff)
|
|
43
|
-
# and records the
|
|
54
|
+
# and records the attempt.
|
|
44
55
|
# @param timeout [Integer] timeout value in milliseconds that overwrites the default timeout
|
|
45
56
|
# @note Providing this value can be useful when we explicitly want to pause for a certain
|
|
46
57
|
# period of time, outside of any regular pausing logic
|
|
47
58
|
def pause(timeout = backoff_interval)
|
|
48
|
-
@
|
|
49
|
-
|
|
50
|
-
|
|
59
|
+
@mutex.synchronize do
|
|
60
|
+
@current_timeout = timeout
|
|
61
|
+
@started_at = monotonic_now
|
|
62
|
+
@ends_at = @started_at + timeout
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Increments the number of attempt by 1
|
|
67
|
+
def increment
|
|
68
|
+
@mutex.synchronize do
|
|
69
|
+
@attempt += 1
|
|
70
|
+
end
|
|
51
71
|
end
|
|
52
72
|
|
|
53
73
|
# Marks the pause as resumed.
|
|
54
74
|
def resume
|
|
55
|
-
@
|
|
56
|
-
|
|
75
|
+
@mutex.synchronize do
|
|
76
|
+
@started_at = nil
|
|
77
|
+
@ends_at = nil
|
|
78
|
+
end
|
|
57
79
|
end
|
|
58
80
|
|
|
59
81
|
# Expires the pause, so it can be considered expired
|
|
60
82
|
def expire
|
|
61
|
-
@
|
|
83
|
+
@mutex.synchronize do
|
|
84
|
+
@ends_at = nil
|
|
85
|
+
end
|
|
62
86
|
end
|
|
63
87
|
|
|
64
88
|
# @return [Boolean] are we paused from processing
|
|
65
89
|
def paused?
|
|
66
|
-
|
|
90
|
+
@mutex.synchronize do
|
|
91
|
+
!@started_at.nil?
|
|
92
|
+
end
|
|
67
93
|
end
|
|
68
94
|
|
|
69
95
|
# @return [Boolean] did the pause expire
|
|
70
96
|
def expired?
|
|
71
|
-
@
|
|
97
|
+
@mutex.synchronize do
|
|
98
|
+
@ends_at ? monotonic_now >= @ends_at : true
|
|
99
|
+
end
|
|
72
100
|
end
|
|
73
101
|
|
|
74
|
-
# Resets the pause
|
|
102
|
+
# Resets the pause attempt count.
|
|
75
103
|
def reset
|
|
76
|
-
@
|
|
104
|
+
@mutex.synchronize do
|
|
105
|
+
@attempt = 0
|
|
106
|
+
end
|
|
77
107
|
end
|
|
78
108
|
|
|
79
109
|
private
|
|
@@ -81,7 +111,7 @@ module Karafka
|
|
|
81
111
|
# Computers the exponential backoff
|
|
82
112
|
# @return [Integer] backoff in milliseconds
|
|
83
113
|
def backoff_interval
|
|
84
|
-
backoff_factor = @exponential_backoff ? 2**@
|
|
114
|
+
backoff_factor = @exponential_backoff ? 2**@attempt : 1
|
|
85
115
|
|
|
86
116
|
timeout = backoff_factor * @timeout
|
|
87
117
|
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Karafka
|
|
4
4
|
module TimeTrackers
|
|
5
|
-
# Object used to keep track of time we've used running certain operations.
|
|
5
|
+
# Object used to keep track of time we've used running certain operations. Polling is
|
|
6
|
+
# running in a single thread, thus we do not have to worry about this being thread-safe.
|
|
6
7
|
#
|
|
7
8
|
# @example Keep track of sleeping and stop after 3 seconds of 0.1 sleep intervals
|
|
8
9
|
# time_poll = Poll.new(3000)
|
|
@@ -33,12 +34,12 @@ module Karafka
|
|
|
33
34
|
# Starts time tracking.
|
|
34
35
|
def start
|
|
35
36
|
@attempts += 1
|
|
36
|
-
@started_at =
|
|
37
|
+
@started_at = monotonic_now
|
|
37
38
|
end
|
|
38
39
|
|
|
39
40
|
# Stops time tracking of a given piece of code and updates the remaining time.
|
|
40
41
|
def checkpoint
|
|
41
|
-
@remaining -= (
|
|
42
|
+
@remaining -= (monotonic_now - @started_at)
|
|
42
43
|
end
|
|
43
44
|
|
|
44
45
|
# @return [Boolean] If anything went wrong, can we retry after a backoff period or not
|
|
@@ -50,6 +51,9 @@ module Karafka
|
|
|
50
51
|
# Sleeps for amount of time matching attempt, so we sleep more with each attempt in case of
|
|
51
52
|
# a retry.
|
|
52
53
|
def backoff
|
|
54
|
+
# backoff should not be included in the remaining time computation, otherwise it runs
|
|
55
|
+
# shortly, never back-offing beyond a small number because of the sleep
|
|
56
|
+
@remaining += backoff_interval
|
|
53
57
|
# Sleep requires seconds not ms
|
|
54
58
|
sleep(backoff_interval / 1_000.0)
|
|
55
59
|
end
|
data/lib/karafka/version.rb
CHANGED
data/lib/karafka.rb
CHANGED
|
@@ -13,7 +13,10 @@
|
|
|
13
13
|
openssl
|
|
14
14
|
base64
|
|
15
15
|
date
|
|
16
|
+
singleton
|
|
17
|
+
digest
|
|
16
18
|
zeitwerk
|
|
19
|
+
concurrent/atomic/atomic_fixnum
|
|
17
20
|
].each(&method(:require))
|
|
18
21
|
|
|
19
22
|
# Karafka framework main namespace
|
|
@@ -67,6 +70,19 @@ module Karafka
|
|
|
67
70
|
App.config.license.token != false
|
|
68
71
|
end
|
|
69
72
|
|
|
73
|
+
# @return [Boolean] Do we run within/with Rails. We use this to initialize Railtie and proxy
|
|
74
|
+
# the console invocation to Rails
|
|
75
|
+
def rails?
|
|
76
|
+
return @rails if instance_variable_defined?('@rails')
|
|
77
|
+
|
|
78
|
+
# Do not load Rails again if already loaded
|
|
79
|
+
Object.const_defined?('Rails::Railtie') || require('rails')
|
|
80
|
+
|
|
81
|
+
@rails = true
|
|
82
|
+
rescue LoadError
|
|
83
|
+
@rails = false
|
|
84
|
+
end
|
|
85
|
+
|
|
70
86
|
# @return [String] path to a default file that contains booting procedure etc
|
|
71
87
|
# @note By default it is a file called 'karafka.rb' but it can be specified as you wish if you
|
|
72
88
|
# have Karafka that is merged into a Sinatra/Rails app and karafka.rb is taken.
|
|
@@ -79,15 +95,52 @@ module Karafka
|
|
|
79
95
|
def boot_file
|
|
80
96
|
Pathname.new(ENV['KARAFKA_BOOT_FILE'] || File.join(Karafka.root, 'karafka.rb'))
|
|
81
97
|
end
|
|
98
|
+
|
|
99
|
+
# We need to be able to overwrite both monitor and logger after the configuration in case they
|
|
100
|
+
# would be changed because those two (with defaults) can be used prior to the setup and their
|
|
101
|
+
# state change should be reflected in the updated setup
|
|
102
|
+
#
|
|
103
|
+
# This method refreshes the things that might have been altered by the configuration
|
|
104
|
+
def refresh!
|
|
105
|
+
config = ::Karafka::App.config
|
|
106
|
+
|
|
107
|
+
@logger = config.logger
|
|
108
|
+
@producer = config.producer
|
|
109
|
+
@monitor = config.monitor
|
|
110
|
+
end
|
|
82
111
|
end
|
|
83
112
|
end
|
|
84
113
|
|
|
85
114
|
loader = Zeitwerk::Loader.for_gem
|
|
86
115
|
# Do not load Rails extensions by default, this will be handled by Railtie if they are needed
|
|
87
116
|
loader.ignore(Karafka.gem_root.join('lib/active_job'))
|
|
88
|
-
# Do not load
|
|
89
|
-
|
|
117
|
+
# Do not load CurrentAttributes components as they will be loaded if needed
|
|
118
|
+
# @note We have to exclude both the .rb file as well as the whole directory so users can require
|
|
119
|
+
# current attributes only when needed
|
|
120
|
+
loader.ignore(Karafka.gem_root.join('lib/karafka/active_job/current_attributes'))
|
|
121
|
+
loader.ignore(Karafka.gem_root.join('lib/karafka/active_job/current_attributes.rb'))
|
|
122
|
+
# Do not load Railtie. It will load if after everything is ready, so we don't have to load any
|
|
123
|
+
# Karafka components when we require this railtie. Railtie needs to be loaded last.
|
|
124
|
+
loader.ignore(Karafka.gem_root.join('lib/karafka/railtie'))
|
|
125
|
+
# Do not load pro components as they will be loaded if needed and allowed
|
|
126
|
+
loader.ignore(Karafka.core_root.join('pro/'))
|
|
90
127
|
# Do not load vendors instrumentation components. Those need to be required manually if needed
|
|
91
|
-
loader.ignore(Karafka.
|
|
128
|
+
loader.ignore(Karafka.core_root.join('instrumentation/vendors'))
|
|
92
129
|
loader.setup
|
|
93
130
|
loader.eager_load
|
|
131
|
+
|
|
132
|
+
# This will load features but since Pro are not loaded automatically, they will not be visible
|
|
133
|
+
# nor included here
|
|
134
|
+
::Karafka::Routing::Features::Base.load_all
|
|
135
|
+
|
|
136
|
+
# We need to detect and require (not setup) Pro components during the gem load, because we need
|
|
137
|
+
# to make pro components available in case anyone wants to use them as a base to their own
|
|
138
|
+
# custom components. Otherwise inheritance would not work.
|
|
139
|
+
Karafka::Licenser.detect do
|
|
140
|
+
require 'karafka/pro/loader'
|
|
141
|
+
|
|
142
|
+
Karafka::Pro::Loader.require_all
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# Load railtie after everything else is ready so we know we can rely on it.
|
|
146
|
+
require 'karafka/railtie'
|
data/renovate.json
ADDED
data.tar.gz.sig
CHANGED
|
Binary file
|