deimos-ruby 1.7.0.pre.beta1 → 1.8.0.pre.beta1
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/CHANGELOG.md +13 -0
- data/Gemfile.lock +8 -2
- data/README.md +69 -15
- data/deimos-ruby.gemspec +2 -0
- data/docs/ARCHITECTURE.md +144 -0
- data/docs/CONFIGURATION.md +4 -0
- data/lib/deimos.rb +6 -6
- data/lib/deimos/active_record_consume/batch_consumption.rb +159 -0
- data/lib/deimos/active_record_consume/batch_slicer.rb +27 -0
- data/lib/deimos/active_record_consume/message_consumption.rb +58 -0
- data/lib/deimos/active_record_consume/schema_model_converter.rb +52 -0
- data/lib/deimos/active_record_consumer.rb +33 -75
- data/lib/deimos/batch_consumer.rb +2 -142
- data/lib/deimos/config/configuration.rb +8 -10
- data/lib/deimos/consume/batch_consumption.rb +148 -0
- data/lib/deimos/consume/message_consumption.rb +93 -0
- data/lib/deimos/consumer.rb +79 -72
- data/lib/deimos/kafka_message.rb +1 -1
- data/lib/deimos/message.rb +6 -1
- data/lib/deimos/utils/db_poller.rb +6 -6
- data/lib/deimos/utils/db_producer.rb +6 -2
- data/lib/deimos/utils/deadlock_retry.rb +68 -0
- data/lib/deimos/utils/lag_reporter.rb +19 -26
- data/lib/deimos/version.rb +1 -1
- data/spec/active_record_batch_consumer_spec.rb +481 -0
- data/spec/active_record_consume/batch_slicer_spec.rb +42 -0
- data/spec/active_record_consume/schema_model_converter_spec.rb +105 -0
- data/spec/active_record_consumer_spec.rb +3 -11
- data/spec/batch_consumer_spec.rb +23 -7
- data/spec/config/configuration_spec.rb +4 -0
- data/spec/consumer_spec.rb +6 -6
- data/spec/deimos_spec.rb +57 -49
- data/spec/handlers/my_batch_consumer.rb +6 -1
- data/spec/handlers/my_consumer.rb +6 -1
- data/spec/message_spec.rb +19 -0
- data/spec/schemas/com/my-namespace/MySchemaCompound-key.avsc +18 -0
- data/spec/schemas/com/my-namespace/Wibble.avsc +43 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/utils/db_poller_spec.rb +2 -2
- data/spec/utils/deadlock_retry_spec.rb +74 -0
- data/spec/utils/lag_reporter_spec.rb +29 -22
- metadata +57 -16
- data/lib/deimos/base_consumer.rb +0 -100
- data/lib/deimos/utils/executor.rb +0 -124
- data/lib/deimos/utils/platform_schema_validation.rb +0 -0
- data/lib/deimos/utils/signal_handler.rb +0 -68
- data/spec/utils/executor_spec.rb +0 -53
- data/spec/utils/signal_handler_spec.rb +0 -16
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe(Deimos::Message) do
|
4
|
+
it 'should detect tombstones' do
|
5
|
+
expect(described_class.new(nil, nil, key: 'key1')).
|
6
|
+
to be_tombstone
|
7
|
+
expect(described_class.new({ v: 'val1' }, nil, key: 'key1')).
|
8
|
+
not_to be_tombstone
|
9
|
+
expect(described_class.new({ v: '' }, nil, key: 'key1')).
|
10
|
+
not_to be_tombstone
|
11
|
+
expect(described_class.new({ v: 'val1' }, nil, key: nil)).
|
12
|
+
not_to be_tombstone
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'can support complex keys/values' do
|
16
|
+
expect { described_class.new({ a: 1, b: 2 }, nil, key: { c: 3, d: 4 }) }.
|
17
|
+
not_to raise_exception
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"namespace": "com.my-namespace",
|
3
|
+
"name": "MySchemaCompound-key",
|
4
|
+
"type": "record",
|
5
|
+
"doc": "Test schema",
|
6
|
+
"fields": [
|
7
|
+
{
|
8
|
+
"name": "part_one",
|
9
|
+
"type": "string",
|
10
|
+
"doc": "test string one"
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"name": "part_two",
|
14
|
+
"type": "string",
|
15
|
+
"doc": "test string two"
|
16
|
+
}
|
17
|
+
]
|
18
|
+
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
{
|
2
|
+
"namespace": "com.my-namespace",
|
3
|
+
"name": "Wibble",
|
4
|
+
"type": "record",
|
5
|
+
"fields": [
|
6
|
+
{
|
7
|
+
"name": "id",
|
8
|
+
"type": "long"
|
9
|
+
},
|
10
|
+
{
|
11
|
+
"name": "wibble_id",
|
12
|
+
"type": "long"
|
13
|
+
},
|
14
|
+
{
|
15
|
+
"name": "name",
|
16
|
+
"type": "string"
|
17
|
+
},
|
18
|
+
{
|
19
|
+
"name": "floop",
|
20
|
+
"type": "string"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"name": "birthday_int",
|
24
|
+
"type": "int"
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"name": "birthday_long",
|
28
|
+
"type": "long"
|
29
|
+
},
|
30
|
+
{
|
31
|
+
"name": "birthday_optional",
|
32
|
+
"type": ["null", "int"]
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"name": "updated_at",
|
36
|
+
"type": "long"
|
37
|
+
},
|
38
|
+
{
|
39
|
+
"name": "created_at",
|
40
|
+
"type": "long"
|
41
|
+
}
|
42
|
+
]
|
43
|
+
}
|
data/spec/spec_helper.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
$LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
|
4
4
|
require 'active_record'
|
5
|
+
require 'database_cleaner'
|
5
6
|
require 'deimos'
|
6
7
|
require 'deimos/metrics/mock'
|
7
8
|
require 'deimos/tracing/mock'
|
@@ -147,6 +148,9 @@ RSpec.configure do |config|
|
|
147
148
|
# true by default for RSpec 4.0
|
148
149
|
config.shared_context_metadata_behavior = :apply_to_host_groups
|
149
150
|
|
151
|
+
config.filter_run(focus: true)
|
152
|
+
config.run_all_when_everything_filtered = true
|
153
|
+
|
150
154
|
config.before(:all) do
|
151
155
|
Time.zone = 'Eastern Time (US & Canada)'
|
152
156
|
ActiveRecord::Base.logger = Logger.new('/dev/null')
|
@@ -159,6 +163,9 @@ RSpec.configure do |config|
|
|
159
163
|
config.include ActiveSupport::Testing::TimeHelpers
|
160
164
|
config.before(:suite) do
|
161
165
|
setup_db(DbConfigs::DB_OPTIONS.last)
|
166
|
+
|
167
|
+
DatabaseCleaner.strategy = :transaction
|
168
|
+
DatabaseCleaner.clean_with(:truncation)
|
162
169
|
end
|
163
170
|
|
164
171
|
config.mock_with(:rspec) do |mocks|
|
@@ -179,6 +186,16 @@ RSpec.configure do |config|
|
|
179
186
|
deimos_config.schema.backend = :avro_validation
|
180
187
|
end
|
181
188
|
end
|
189
|
+
|
190
|
+
config.around(:each) do |example|
|
191
|
+
use_cleaner = !example.metadata[:integration]
|
192
|
+
|
193
|
+
DatabaseCleaner.start if use_cleaner
|
194
|
+
|
195
|
+
example.run
|
196
|
+
|
197
|
+
DatabaseCleaner.clean if use_cleaner
|
198
|
+
end
|
182
199
|
end
|
183
200
|
|
184
201
|
RSpec.shared_context('with widgets') do
|
@@ -48,8 +48,8 @@ each_db_config(Deimos::Utils::DbPoller) do
|
|
48
48
|
end
|
49
49
|
|
50
50
|
allow(Deimos::Utils::DbPoller).to receive(:new)
|
51
|
-
signal_double = instance_double(
|
52
|
-
allow(
|
51
|
+
signal_double = instance_double(Sigurd::SignalHandler, run!: nil)
|
52
|
+
allow(Sigurd::SignalHandler).to receive(:new).and_return(signal_double)
|
53
53
|
described_class.start!
|
54
54
|
expect(Deimos::Utils::DbPoller).to have_received(:new).twice
|
55
55
|
expect(Deimos::Utils::DbPoller).to have_received(:new).
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Deimos::Utils::DeadlockRetry do
|
4
|
+
include_context 'with widgets'
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
allow(described_class).to receive(:sleep)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'deadlock handling' do
|
11
|
+
let(:batch) { [{ key: 1, payload: { test_id: 'abc', some_int: 3 } }] }
|
12
|
+
|
13
|
+
it 'should retry deadlocks 3 times' do
|
14
|
+
# Should receive original attempt + 2 retries
|
15
|
+
expect(Widget).
|
16
|
+
to receive(:create).
|
17
|
+
and_raise(ActiveRecord::Deadlocked.new('Lock wait timeout exceeded')).
|
18
|
+
exactly(3).times
|
19
|
+
|
20
|
+
# After 3 tries, should let it bubble up
|
21
|
+
expect {
|
22
|
+
described_class.wrap do
|
23
|
+
Widget.create(test_id: 'abc')
|
24
|
+
end
|
25
|
+
}.to raise_error(ActiveRecord::Deadlocked)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should stop retrying deadlocks after success' do
|
29
|
+
allow(Widget).
|
30
|
+
to receive(:create).
|
31
|
+
with(hash_including(test_id: 'first')).
|
32
|
+
and_call_original
|
33
|
+
|
34
|
+
# Fail on first attempt, succeed on second
|
35
|
+
expect(Widget).
|
36
|
+
to receive(:create).
|
37
|
+
with(hash_including(test_id: 'second')).
|
38
|
+
and_raise(ActiveRecord::Deadlocked.new('Deadlock found when trying to get lock')).
|
39
|
+
once.
|
40
|
+
ordered
|
41
|
+
|
42
|
+
expect(Widget).
|
43
|
+
to receive(:create).
|
44
|
+
with(hash_including(test_id: 'second')).
|
45
|
+
once.
|
46
|
+
ordered.
|
47
|
+
and_call_original
|
48
|
+
|
49
|
+
# Should not raise anything
|
50
|
+
described_class.wrap do
|
51
|
+
Widget.create(test_id: 'first')
|
52
|
+
Widget.create(test_id: 'second')
|
53
|
+
end
|
54
|
+
|
55
|
+
expect(Widget.all).to match_array([
|
56
|
+
have_attributes(test_id: 'first'),
|
57
|
+
have_attributes(test_id: 'second')
|
58
|
+
])
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should not retry non-deadlock exceptions' do
|
62
|
+
expect(Widget).
|
63
|
+
to receive(:create).
|
64
|
+
and_raise(ActiveRecord::StatementInvalid.new('Oops!!')).
|
65
|
+
once
|
66
|
+
|
67
|
+
expect {
|
68
|
+
described_class.wrap do
|
69
|
+
Widget.create(test_id: 'abc')
|
70
|
+
end
|
71
|
+
}.to raise_error(ActiveRecord::StatementInvalid, 'Oops!!')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -2,8 +2,11 @@
|
|
2
2
|
|
3
3
|
describe Deimos::Utils::LagReporter do
|
4
4
|
|
5
|
+
let(:kafka_client) { instance_double(Kafka::Client) }
|
6
|
+
let(:partition1_tags) { %w(consumer_group:group1 partition:1 topic:my-topic) }
|
7
|
+
let(:partition2_tags) { %w(consumer_group:group1 partition:2 topic:my-topic) }
|
8
|
+
|
5
9
|
before(:each) do
|
6
|
-
kafka_client = instance_double(Kafka::Client)
|
7
10
|
allow(kafka_client).to receive(:last_offset_for).and_return(100)
|
8
11
|
allow(Phobos).to receive(:create_kafka_client).and_return(kafka_client)
|
9
12
|
Deimos.configure { |c| c.consumers.report_lag = true }
|
@@ -20,38 +23,22 @@ describe Deimos::Utils::LagReporter do
|
|
20
23
|
'heartbeat.consumer.kafka',
|
21
24
|
group_id: 'group1', topic_partitions: { 'my-topic': [1] }
|
22
25
|
)
|
23
|
-
|
24
26
|
end
|
25
27
|
|
26
28
|
it 'should report lag' do
|
27
29
|
expect(Deimos.config.metrics).to receive(:gauge).ordered.twice.
|
28
|
-
with('consumer_lag', 95,
|
29
|
-
tags: %w(
|
30
|
-
consumer_group:group1
|
31
|
-
partition:1
|
32
|
-
topic:my-topic
|
33
|
-
))
|
30
|
+
with('consumer_lag', 95, tags: partition1_tags)
|
34
31
|
expect(Deimos.config.metrics).to receive(:gauge).ordered.once.
|
35
|
-
with('consumer_lag', 80,
|
36
|
-
tags: %w(
|
37
|
-
consumer_group:group1
|
38
|
-
partition:2
|
39
|
-
topic:my-topic
|
40
|
-
))
|
32
|
+
with('consumer_lag', 80, tags: partition2_tags)
|
41
33
|
expect(Deimos.config.metrics).to receive(:gauge).ordered.once.
|
42
|
-
with('consumer_lag', 0,
|
43
|
-
tags: %w(
|
44
|
-
consumer_group:group1
|
45
|
-
partition:2
|
46
|
-
topic:my-topic
|
47
|
-
))
|
34
|
+
with('consumer_lag', 0, tags: partition2_tags)
|
48
35
|
ActiveSupport::Notifications.instrument(
|
49
36
|
'seek.consumer.kafka',
|
50
37
|
offset: 5, topic: 'my-topic', group_id: 'group1', partition: 1
|
51
38
|
)
|
52
39
|
ActiveSupport::Notifications.instrument(
|
53
40
|
'start_process_message.consumer.kafka',
|
54
|
-
|
41
|
+
offset: 20, topic: 'my-topic', group_id: 'group1', partition: 2
|
55
42
|
)
|
56
43
|
ActiveSupport::Notifications.instrument(
|
57
44
|
'heartbeat.consumer.kafka',
|
@@ -59,8 +46,28 @@ describe Deimos::Utils::LagReporter do
|
|
59
46
|
)
|
60
47
|
ActiveSupport::Notifications.instrument(
|
61
48
|
'start_process_batch.consumer.kafka',
|
62
|
-
|
49
|
+
last_offset: 100, topic: 'my-topic', group_id: 'group1', partition: 2
|
50
|
+
)
|
51
|
+
ActiveSupport::Notifications.instrument(
|
52
|
+
'heartbeat.consumer.kafka',
|
53
|
+
group_id: 'group1', topic_partitions: { 'my-topic': [1, 2] }
|
54
|
+
)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should update lag after heartbeat' do
|
58
|
+
expect(Deimos.config.metrics).to receive(:gauge).ordered.once.
|
59
|
+
with('consumer_lag', 94, tags: partition2_tags)
|
60
|
+
expect(Deimos.config.metrics).to receive(:gauge).ordered.once.
|
61
|
+
with('consumer_lag', 95, tags: partition2_tags)
|
62
|
+
ActiveSupport::Notifications.instrument(
|
63
|
+
'seek.consumer.kafka',
|
64
|
+
offset: 6, topic: 'my-topic', group_id: 'group1', partition: 2
|
65
|
+
)
|
66
|
+
ActiveSupport::Notifications.instrument(
|
67
|
+
'heartbeat.consumer.kafka',
|
68
|
+
group_id: 'group1', topic_partitions: { 'my-topic': [1, 2] }
|
63
69
|
)
|
70
|
+
allow(kafka_client).to receive(:last_offset_for).and_return(101)
|
64
71
|
ActiveSupport::Notifications.instrument(
|
65
72
|
'heartbeat.consumer.kafka',
|
66
73
|
group_id: 'group1', topic_partitions: { 'my-topic': [1, 2] }
|
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: 1.
|
4
|
+
version: 1.8.0.pre.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Orner
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: avro_turf
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.7'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: sigurd
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.0.1
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.0.1
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: activerecord
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +108,20 @@ dependencies:
|
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '1.9'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: database_cleaner
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.7'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.7'
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
126
|
name: ddtrace
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -296,7 +324,7 @@ dependencies:
|
|
296
324
|
- - "~>"
|
297
325
|
- !ruby/object:Gem::Version
|
298
326
|
version: '1.3'
|
299
|
-
description:
|
327
|
+
description:
|
300
328
|
email:
|
301
329
|
- daniel.orner@wishabi.com
|
302
330
|
executables:
|
@@ -323,10 +351,15 @@ files:
|
|
323
351
|
- bin/deimos
|
324
352
|
- deimos-ruby.gemspec
|
325
353
|
- docker-compose.yml
|
354
|
+
- docs/ARCHITECTURE.md
|
326
355
|
- docs/CONFIGURATION.md
|
327
356
|
- docs/DATABASE_BACKEND.md
|
328
357
|
- docs/PULL_REQUEST_TEMPLATE.md
|
329
358
|
- lib/deimos.rb
|
359
|
+
- lib/deimos/active_record_consume/batch_consumption.rb
|
360
|
+
- lib/deimos/active_record_consume/batch_slicer.rb
|
361
|
+
- lib/deimos/active_record_consume/message_consumption.rb
|
362
|
+
- lib/deimos/active_record_consume/schema_model_converter.rb
|
330
363
|
- lib/deimos/active_record_consumer.rb
|
331
364
|
- lib/deimos/active_record_producer.rb
|
332
365
|
- lib/deimos/backends/base.rb
|
@@ -334,11 +367,12 @@ files:
|
|
334
367
|
- lib/deimos/backends/kafka.rb
|
335
368
|
- lib/deimos/backends/kafka_async.rb
|
336
369
|
- lib/deimos/backends/test.rb
|
337
|
-
- lib/deimos/base_consumer.rb
|
338
370
|
- lib/deimos/batch_consumer.rb
|
339
371
|
- lib/deimos/config/configurable.rb
|
340
372
|
- lib/deimos/config/configuration.rb
|
341
373
|
- lib/deimos/config/phobos_config.rb
|
374
|
+
- lib/deimos/consume/batch_consumption.rb
|
375
|
+
- lib/deimos/consume/message_consumption.rb
|
342
376
|
- lib/deimos/consumer.rb
|
343
377
|
- lib/deimos/instrumentation.rb
|
344
378
|
- lib/deimos/kafka_message.rb
|
@@ -368,11 +402,9 @@ files:
|
|
368
402
|
- lib/deimos/tracing/provider.rb
|
369
403
|
- lib/deimos/utils/db_poller.rb
|
370
404
|
- lib/deimos/utils/db_producer.rb
|
371
|
-
- lib/deimos/utils/
|
405
|
+
- lib/deimos/utils/deadlock_retry.rb
|
372
406
|
- lib/deimos/utils/inline_consumer.rb
|
373
407
|
- lib/deimos/utils/lag_reporter.rb
|
374
|
-
- lib/deimos/utils/platform_schema_validation.rb
|
375
|
-
- lib/deimos/utils/signal_handler.rb
|
376
408
|
- lib/deimos/version.rb
|
377
409
|
- lib/generators/deimos/db_backend/templates/migration
|
378
410
|
- lib/generators/deimos/db_backend/templates/rails3_migration
|
@@ -381,6 +413,9 @@ files:
|
|
381
413
|
- lib/generators/deimos/db_poller/templates/rails3_migration
|
382
414
|
- lib/generators/deimos/db_poller_generator.rb
|
383
415
|
- lib/tasks/deimos.rake
|
416
|
+
- spec/active_record_batch_consumer_spec.rb
|
417
|
+
- spec/active_record_consume/batch_slicer_spec.rb
|
418
|
+
- spec/active_record_consume/schema_model_converter_spec.rb
|
384
419
|
- spec/active_record_consumer_spec.rb
|
385
420
|
- spec/active_record_producer_spec.rb
|
386
421
|
- spec/backends/base_spec.rb
|
@@ -396,6 +431,7 @@ files:
|
|
396
431
|
- spec/handlers/my_consumer.rb
|
397
432
|
- spec/kafka_source_spec.rb
|
398
433
|
- spec/kafka_topic_info_spec.rb
|
434
|
+
- spec/message_spec.rb
|
399
435
|
- spec/phobos.bad_db.yml
|
400
436
|
- spec/phobos.yml
|
401
437
|
- spec/producer_spec.rb
|
@@ -407,19 +443,20 @@ files:
|
|
407
443
|
- spec/schema_backends/base_spec.rb
|
408
444
|
- spec/schemas/com/my-namespace/MySchema-key.avsc
|
409
445
|
- spec/schemas/com/my-namespace/MySchema.avsc
|
446
|
+
- spec/schemas/com/my-namespace/MySchemaCompound-key.avsc
|
410
447
|
- spec/schemas/com/my-namespace/MySchemaWithBooleans.avsc
|
411
448
|
- spec/schemas/com/my-namespace/MySchemaWithDateTimes.avsc
|
412
449
|
- spec/schemas/com/my-namespace/MySchemaWithId.avsc
|
413
450
|
- spec/schemas/com/my-namespace/MySchemaWithUniqueId.avsc
|
451
|
+
- spec/schemas/com/my-namespace/Wibble.avsc
|
414
452
|
- spec/schemas/com/my-namespace/Widget.avsc
|
415
453
|
- spec/schemas/com/my-namespace/WidgetTheSecond.avsc
|
416
454
|
- spec/spec_helper.rb
|
417
455
|
- spec/utils/db_poller_spec.rb
|
418
456
|
- spec/utils/db_producer_spec.rb
|
419
|
-
- spec/utils/
|
457
|
+
- spec/utils/deadlock_retry_spec.rb
|
420
458
|
- spec/utils/lag_reporter_spec.rb
|
421
459
|
- spec/utils/platform_schema_validation_spec.rb
|
422
|
-
- spec/utils/signal_handler_spec.rb
|
423
460
|
- support/deimos-solo.png
|
424
461
|
- support/deimos-with-name-next.png
|
425
462
|
- support/deimos-with-name.png
|
@@ -428,7 +465,7 @@ homepage: ''
|
|
428
465
|
licenses:
|
429
466
|
- Apache-2.0
|
430
467
|
metadata: {}
|
431
|
-
post_install_message:
|
468
|
+
post_install_message:
|
432
469
|
rdoc_options: []
|
433
470
|
require_paths:
|
434
471
|
- lib
|
@@ -443,12 +480,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
443
480
|
- !ruby/object:Gem::Version
|
444
481
|
version: 1.3.1
|
445
482
|
requirements: []
|
446
|
-
|
447
|
-
|
448
|
-
signing_key:
|
483
|
+
rubygems_version: 3.1.3
|
484
|
+
signing_key:
|
449
485
|
specification_version: 4
|
450
486
|
summary: Kafka libraries for Ruby.
|
451
487
|
test_files:
|
488
|
+
- spec/active_record_batch_consumer_spec.rb
|
489
|
+
- spec/active_record_consume/batch_slicer_spec.rb
|
490
|
+
- spec/active_record_consume/schema_model_converter_spec.rb
|
452
491
|
- spec/active_record_consumer_spec.rb
|
453
492
|
- spec/active_record_producer_spec.rb
|
454
493
|
- spec/backends/base_spec.rb
|
@@ -464,6 +503,7 @@ test_files:
|
|
464
503
|
- spec/handlers/my_consumer.rb
|
465
504
|
- spec/kafka_source_spec.rb
|
466
505
|
- spec/kafka_topic_info_spec.rb
|
506
|
+
- spec/message_spec.rb
|
467
507
|
- spec/phobos.bad_db.yml
|
468
508
|
- spec/phobos.yml
|
469
509
|
- spec/producer_spec.rb
|
@@ -475,16 +515,17 @@ test_files:
|
|
475
515
|
- spec/schema_backends/base_spec.rb
|
476
516
|
- spec/schemas/com/my-namespace/MySchema-key.avsc
|
477
517
|
- spec/schemas/com/my-namespace/MySchema.avsc
|
518
|
+
- spec/schemas/com/my-namespace/MySchemaCompound-key.avsc
|
478
519
|
- spec/schemas/com/my-namespace/MySchemaWithBooleans.avsc
|
479
520
|
- spec/schemas/com/my-namespace/MySchemaWithDateTimes.avsc
|
480
521
|
- spec/schemas/com/my-namespace/MySchemaWithId.avsc
|
481
522
|
- spec/schemas/com/my-namespace/MySchemaWithUniqueId.avsc
|
523
|
+
- spec/schemas/com/my-namespace/Wibble.avsc
|
482
524
|
- spec/schemas/com/my-namespace/Widget.avsc
|
483
525
|
- spec/schemas/com/my-namespace/WidgetTheSecond.avsc
|
484
526
|
- spec/spec_helper.rb
|
485
527
|
- spec/utils/db_poller_spec.rb
|
486
528
|
- spec/utils/db_producer_spec.rb
|
487
|
-
- spec/utils/
|
529
|
+
- spec/utils/deadlock_retry_spec.rb
|
488
530
|
- spec/utils/lag_reporter_spec.rb
|
489
531
|
- spec/utils/platform_schema_validation_spec.rb
|
490
|
-
- spec/utils/signal_handler_spec.rb
|