deimos-ruby 2.0.0.pre.alpha2 → 2.0.0.pre.alpha3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/docs/CONFIGURATION.md +15 -14
- data/docs/UPGRADING.md +1 -0
- data/lib/deimos/active_record_producer.rb +1 -1
- data/lib/deimos/ext/consumer_route.rb +2 -1
- data/lib/deimos/ext/producer_route.rb +13 -5
- data/lib/deimos/producer.rb +1 -1
- data/lib/deimos/test_helpers.rb +18 -8
- data/lib/deimos/transcoder.rb +4 -2
- data/lib/deimos/version.rb +1 -1
- data/lib/deimos.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78560957e1493d4868ec357a218c517d6477ccd59b5edb0b2bd50f3dbde91a24
|
4
|
+
data.tar.gz: 0ea590bca094fdf2514f3f9e15bc7b076fb10402091b1006e14c9e3bb39fff02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff82889fd33ab1de8a1d862e17d22b6dd649fbd0427c58f2ea8bc419b875e2b0468e76ef1b37a1c584ce672468d1a760aad9e73a867910814adac2c5f8e52c31
|
7
|
+
data.tar.gz: 483d54246596bf3f5c0d9a91880ede39826319eb821f26ac100aa5875975e353a380de72a34d2f0b2d3407610fd334ae1b5b221d005be99295ad55135727d6e8
|
data/Gemfile
CHANGED
data/docs/CONFIGURATION.md
CHANGED
@@ -86,21 +86,22 @@ Deimos.configure do
|
|
86
86
|
end
|
87
87
|
```
|
88
88
|
|
89
|
-
| Config name | Default
|
90
|
-
|
91
|
-
| producer_class | nil
|
92
|
-
|
|
93
|
-
|
|
89
|
+
| Config name | Default | Description |
|
90
|
+
|--------------------------|--------------|---------------------------------------------------------------------------------------------------------------------------------------|
|
91
|
+
| producer_class | nil | ActiveRecordProducer class to use for sending messages. |
|
92
|
+
| producer_classes | [] | Array of ActiveRecordProducer classes to use for sending messages. You can use this instead of `producer_class`. |
|
93
|
+
| mode | :time_based | Whether to use time-based polling or state-based polling. |
|
94
|
+
| run_every | 60 | Amount of time in seconds to wait between runs. |
|
94
95
|
| timestamp_column | `:updated_at` | Name of the column to query. Remember to add an index to this column! |
|
95
|
-
| delay_time | 2
|
96
|
-
| retries | 1
|
97
|
-
| full_table | false
|
98
|
-
| start_from_beginning | true
|
99
|
-
| state_column | nil
|
100
|
-
| publish_timestamp_column | nil
|
101
|
-
| published_state | nil
|
102
|
-
| failed_state | nil
|
103
|
-
| poller_class | nil
|
96
|
+
| delay_time | 2 | Amount of time in seconds to wait before picking up records, to allow for transactions to finish. |
|
97
|
+
| retries | 1 | The number of times to retry for a *non-Kafka* error. |
|
98
|
+
| full_table | false | If set to true, do a full table dump to Kafka each run. Good for very small tables. Time-based only. |
|
99
|
+
| start_from_beginning | true | If false, start from the current time instead of the beginning of time if this is the first time running the poller. Time-based only. |
|
100
|
+
| state_column | nil | If set, this represents the DB column to use to update publishing status. State-based only. |
|
101
|
+
| publish_timestamp_column | nil | If set, this represents the DB column to use to update when publishing is done. State-based only. |
|
102
|
+
| published_state | nil | If set, the poller will update the `state_column` to this value when publishing succeeds. State-based only. |
|
103
|
+
| failed_state | nil | If set, the poller will update the `state_column` to this value when publishing fails. State-based only. |
|
104
|
+
| poller_class | nil | Poller subclass name to use for publishing to multiple kafka topics from a single poller. |
|
104
105
|
|
105
106
|
## Karafka Routing
|
106
107
|
|
data/docs/UPGRADING.md
CHANGED
@@ -216,6 +216,7 @@ The following events have been **renamed**:
|
|
216
216
|
|
217
217
|
### Additional breaking changes
|
218
218
|
* `key_config` now defaults to `{none: true}` instead of erroring out if not set.
|
219
|
+
* `reraise_errors` now defaults to true if the Rails env is set to `test`, and false otherwise.
|
219
220
|
* `fatal_error?` now receives a Karafka `messages` object instead of a payload hash or array of hashes.
|
220
221
|
* `watched_attributes` has been moved from the corresponding ActiveRecord class to the ActiveRecordProducer class. The object being watched is passed into the method.
|
221
222
|
* Removed `TestHelpers.full_integration_test!` and `kafka_test!` as Karafka does not currently support these use cases. If we need them back, we will need to put in changes to the testing library to support them.
|
@@ -19,10 +19,11 @@ module Deimos
|
|
19
19
|
bulk_import_id_column: :bulk_import_id,
|
20
20
|
replace_associations: true,
|
21
21
|
each_message: false,
|
22
|
+
reraise_errors: Rails.env.test?,
|
22
23
|
bulk_import_id_generator: proc { SecureRandom.uuid },
|
23
24
|
fatal_error: proc { false }
|
24
25
|
)
|
25
|
-
if args.
|
26
|
+
if args.size.positive?
|
26
27
|
@deimos_config.public_send("#{field}=", args[0])
|
27
28
|
end
|
28
29
|
@deimos_config[field]
|
@@ -1,18 +1,26 @@
|
|
1
1
|
module Deimos
|
2
2
|
class ProducerRoute < Karafka::Routing::Features::Base
|
3
|
-
FIELDS = %i(
|
3
|
+
FIELDS = %i(producer_classes payload_log disabled)
|
4
4
|
|
5
|
-
Config = Struct.new(*FIELDS, keyword_init: true)
|
5
|
+
Config = Struct.new(*FIELDS, keyword_init: true) do
|
6
|
+
def producer_class=(val)
|
7
|
+
self.producer_classes = [val]
|
8
|
+
end
|
9
|
+
|
10
|
+
def producer_class
|
11
|
+
self.producer_classes.first
|
12
|
+
end
|
13
|
+
end
|
6
14
|
module Topic
|
7
|
-
FIELDS.each do |field|
|
15
|
+
(FIELDS + [:producer_class]).each do |field|
|
8
16
|
define_method(field) do |*args|
|
9
|
-
active(false) if field
|
17
|
+
active(false) if %i(producer_class producer_classes).include?(field)
|
10
18
|
@deimos_producer_config ||= Config.new
|
11
19
|
if args.any?
|
12
20
|
@deimos_producer_config.public_send("#{field}=", args[0])
|
13
21
|
_deimos_setup_transcoders if schema && namespace
|
14
22
|
end
|
15
|
-
@deimos_producer_config
|
23
|
+
@deimos_producer_config.send(field)
|
16
24
|
end
|
17
25
|
end
|
18
26
|
end
|
data/lib/deimos/producer.rb
CHANGED
data/lib/deimos/test_helpers.rb
CHANGED
@@ -98,6 +98,8 @@ module Deimos
|
|
98
98
|
message_key = Deimos::TestHelpers.normalize_message(key)
|
99
99
|
hash_matcher = RSpec::Matchers::BuiltIn::Match.new(message)
|
100
100
|
Deimos::TestHelpers.sent_messages.any? do |m|
|
101
|
+
message.delete(:payload_key) if message.respond_to?(:[]) && message[:payload_key].nil?
|
102
|
+
m[:payload].delete(:payload_key) if m.respond_to?(:[]) && m[:payload]&.respond_to?(:[]) && m[:payload][:payload_key].nil?
|
101
103
|
hash_matcher.send(:match, message, m[:payload]) &&
|
102
104
|
topic == m[:topic] &&
|
103
105
|
(key.present? ? message_key == m[:key] : true) &&
|
@@ -171,6 +173,7 @@ module Deimos
|
|
171
173
|
unless call_original.nil?
|
172
174
|
puts "test_consume_batch(call_original: true) is deprecated and will be removed in the future. You can remove the call_original parameter."
|
173
175
|
end
|
176
|
+
karafka.consumer_messages.clear
|
174
177
|
consumer = nil
|
175
178
|
topic_name = nil
|
176
179
|
if handler_class_or_topic.is_a?(String)
|
@@ -183,15 +186,22 @@ module Deimos
|
|
183
186
|
|
184
187
|
Deimos.karafka_config_for(topic: topic_name).each_message(single)
|
185
188
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
189
|
+
# don't record messages sent with test_consume_batch
|
190
|
+
original_messages = karafka.produced_messages.dup
|
191
|
+
payloads.each_with_index do |payload, i|
|
192
|
+
karafka.produce(payload, {key: keys[i], partition_key: partition_keys[i], topic: consumer.topic.name})
|
193
|
+
end
|
194
|
+
if block_given?
|
195
|
+
allow_any_instance_of(consumer_class).to receive(:consume_batch) do
|
196
|
+
yield
|
193
197
|
end
|
194
|
-
consumer.consume
|
195
198
|
end
|
199
|
+
|
200
|
+
# sent_messages should only include messages sent by application code, not this method
|
201
|
+
karafka.produced_messages.clear
|
202
|
+
karafka.produced_messages.concat(original_messages)
|
203
|
+
|
204
|
+
consumer.consume
|
205
|
+
end
|
196
206
|
end
|
197
207
|
end
|
data/lib/deimos/transcoder.rb
CHANGED
@@ -38,9 +38,11 @@ module Deimos
|
|
38
38
|
return nil if key.nil? || self.key_field.nil?
|
39
39
|
|
40
40
|
decoded_key = self.backend.decode_key(key, self.key_field)
|
41
|
-
return decoded_key
|
41
|
+
return decoded_key if self.key_field || !@use_schema_classes
|
42
42
|
|
43
|
-
|
43
|
+
schema_key = decoded_key.is_a?(Hash) ? decoded_key : { self.key_field => decoded_key }
|
44
|
+
|
45
|
+
Utils::SchemaClass.instance(schema_key,
|
44
46
|
"#{@schema}_key",
|
45
47
|
@namespace)
|
46
48
|
end
|
data/lib/deimos/version.rb
CHANGED
data/lib/deimos.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deimos-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.pre.
|
4
|
+
version: 2.0.0.pre.alpha3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Orner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: avro_turf
|