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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/Gemfile.lock +8 -2
  4. data/README.md +69 -15
  5. data/deimos-ruby.gemspec +2 -0
  6. data/docs/ARCHITECTURE.md +144 -0
  7. data/docs/CONFIGURATION.md +4 -0
  8. data/lib/deimos.rb +6 -6
  9. data/lib/deimos/active_record_consume/batch_consumption.rb +159 -0
  10. data/lib/deimos/active_record_consume/batch_slicer.rb +27 -0
  11. data/lib/deimos/active_record_consume/message_consumption.rb +58 -0
  12. data/lib/deimos/active_record_consume/schema_model_converter.rb +52 -0
  13. data/lib/deimos/active_record_consumer.rb +33 -75
  14. data/lib/deimos/batch_consumer.rb +2 -142
  15. data/lib/deimos/config/configuration.rb +8 -10
  16. data/lib/deimos/consume/batch_consumption.rb +148 -0
  17. data/lib/deimos/consume/message_consumption.rb +93 -0
  18. data/lib/deimos/consumer.rb +79 -72
  19. data/lib/deimos/kafka_message.rb +1 -1
  20. data/lib/deimos/message.rb +6 -1
  21. data/lib/deimos/utils/db_poller.rb +6 -6
  22. data/lib/deimos/utils/db_producer.rb +6 -2
  23. data/lib/deimos/utils/deadlock_retry.rb +68 -0
  24. data/lib/deimos/utils/lag_reporter.rb +19 -26
  25. data/lib/deimos/version.rb +1 -1
  26. data/spec/active_record_batch_consumer_spec.rb +481 -0
  27. data/spec/active_record_consume/batch_slicer_spec.rb +42 -0
  28. data/spec/active_record_consume/schema_model_converter_spec.rb +105 -0
  29. data/spec/active_record_consumer_spec.rb +3 -11
  30. data/spec/batch_consumer_spec.rb +23 -7
  31. data/spec/config/configuration_spec.rb +4 -0
  32. data/spec/consumer_spec.rb +6 -6
  33. data/spec/deimos_spec.rb +57 -49
  34. data/spec/handlers/my_batch_consumer.rb +6 -1
  35. data/spec/handlers/my_consumer.rb +6 -1
  36. data/spec/message_spec.rb +19 -0
  37. data/spec/schemas/com/my-namespace/MySchemaCompound-key.avsc +18 -0
  38. data/spec/schemas/com/my-namespace/Wibble.avsc +43 -0
  39. data/spec/spec_helper.rb +17 -0
  40. data/spec/utils/db_poller_spec.rb +2 -2
  41. data/spec/utils/deadlock_retry_spec.rb +74 -0
  42. data/spec/utils/lag_reporter_spec.rb +29 -22
  43. metadata +57 -16
  44. data/lib/deimos/base_consumer.rb +0 -100
  45. data/lib/deimos/utils/executor.rb +0 -124
  46. data/lib/deimos/utils/platform_schema_validation.rb +0 -0
  47. data/lib/deimos/utils/signal_handler.rb +0 -68
  48. data/spec/utils/executor_spec.rb +0 -53
  49. data/spec/utils/signal_handler_spec.rb +0 -16
@@ -1,5 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ConsumerTest
4
- class MyBatchConsumer < Deimos::BatchConsumer; end
4
+ # Mock consumer
5
+ class MyBatchConsumer < Deimos::Consumer
6
+ # :no-doc:
7
+ def consume_batch
8
+ end
9
+ end
5
10
  end
@@ -1,5 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ConsumerTest
4
- class MyConsumer < Deimos::Consumer; end
4
+ # Mock consumer
5
+ class MyConsumer < Deimos::Consumer
6
+ # :no-doc:
7
+ def consume
8
+ end
9
+ end
5
10
  end
@@ -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
+ }
@@ -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(Deimos::Utils::SignalHandler, run!: nil)
52
- allow(Deimos::Utils::SignalHandler).to receive(:new).and_return(signal_double)
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
- offset_lag: 80, topic: 'my-topic', group_id: 'group1', partition: 2
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
- offset_lag: 0, topic: 'my-topic', group_id: 'group1', partition: 2
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.7.0.pre.beta1
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-05-12 00:00:00.000000000 Z
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/executor.rb
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/executor_spec.rb
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
- rubyforge_project:
447
- rubygems_version: 2.7.6
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/executor_spec.rb
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