deimos-ruby 1.16.1 → 1.16.4

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 (98) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +13 -0
  4. data/Gemfile +6 -0
  5. data/README.md +22 -0
  6. data/lib/deimos/active_record_consume/batch_consumption.rb +7 -2
  7. data/lib/deimos/active_record_consume/batch_slicer.rb +2 -0
  8. data/lib/deimos/active_record_consume/message_consumption.rb +8 -4
  9. data/lib/deimos/active_record_consumer.rb +7 -4
  10. data/lib/deimos/active_record_producer.rb +10 -0
  11. data/lib/deimos/backends/base.rb +4 -2
  12. data/lib/deimos/backends/kafka.rb +1 -0
  13. data/lib/deimos/backends/kafka_async.rb +1 -0
  14. data/lib/deimos/config/configuration.rb +4 -0
  15. data/lib/deimos/config/phobos_config.rb +2 -1
  16. data/lib/deimos/consume/batch_consumption.rb +8 -1
  17. data/lib/deimos/consume/message_consumption.rb +4 -1
  18. data/lib/deimos/instrumentation.rb +11 -4
  19. data/lib/deimos/kafka_message.rb +1 -0
  20. data/lib/deimos/kafka_source.rb +5 -0
  21. data/lib/deimos/kafka_topic_info.rb +4 -0
  22. data/lib/deimos/message.rb +19 -2
  23. data/lib/deimos/metrics/datadog.rb +2 -1
  24. data/lib/deimos/metrics/mock.rb +2 -2
  25. data/lib/deimos/metrics/provider.rb +6 -0
  26. data/lib/deimos/monkey_patches/phobos_cli.rb +1 -1
  27. data/lib/deimos/monkey_patches/phobos_producer.rb +1 -0
  28. data/lib/deimos/producer.rb +12 -6
  29. data/lib/deimos/schema_backends/base.rb +31 -17
  30. data/lib/deimos/schema_backends/mock.rb +2 -2
  31. data/lib/deimos/schema_class/base.rb +9 -5
  32. data/lib/deimos/schema_class/enum.rb +4 -2
  33. data/lib/deimos/schema_class/record.rb +12 -6
  34. data/lib/deimos/shared_config.rb +6 -2
  35. data/lib/deimos/test_helpers.rb +21 -4
  36. data/lib/deimos/tracing/datadog.rb +1 -1
  37. data/lib/deimos/tracing/mock.rb +4 -3
  38. data/lib/deimos/tracing/provider.rb +5 -0
  39. data/lib/deimos/utils/db_poller.rb +9 -1
  40. data/lib/deimos/utils/db_producer.rb +14 -2
  41. data/lib/deimos/utils/deadlock_retry.rb +3 -0
  42. data/lib/deimos/utils/inline_consumer.rb +14 -6
  43. data/lib/deimos/utils/lag_reporter.rb +11 -0
  44. data/lib/deimos/utils/schema_controller_mixin.rb +8 -0
  45. data/lib/deimos/version.rb +1 -1
  46. data/lib/deimos.rb +3 -2
  47. data/lib/generators/deimos/active_record_generator.rb +1 -1
  48. data/lib/generators/deimos/db_backend_generator.rb +1 -0
  49. data/lib/generators/deimos/db_poller_generator.rb +1 -0
  50. data/lib/generators/deimos/schema_class/templates/schema_record.rb.tt +13 -5
  51. data/lib/generators/deimos/schema_class_generator.rb +51 -24
  52. data/rbs_collection.lock.yaml +176 -0
  53. data/rbs_collection.yaml +15 -0
  54. data/regenerate_test_schema_classes.rb +68 -0
  55. data/sig/avro.rbs +14 -0
  56. data/sig/defs.rbs +1859 -0
  57. data/sig/fig_tree.rbs +2 -0
  58. data/spec/active_record_producer_spec.rb +24 -0
  59. data/spec/generators/schema_class/my_schema_spec.rb +16 -0
  60. data/spec/generators/schema_class/my_schema_with_circular_reference_spec.rb +1 -1
  61. data/spec/generators/schema_class/my_schema_with_complex_types_spec.rb +32 -24
  62. data/spec/producer_spec.rb +11 -11
  63. data/spec/schemas/{generated.rb → my_namespace/generated.rb} +28 -32
  64. data/spec/schemas/{my_nested_schema.rb → my_namespace/my_nested_schema.rb} +23 -16
  65. data/spec/schemas/{my_schema.rb → my_namespace/my_schema.rb} +12 -5
  66. data/spec/schemas/my_namespace/my_schema_compound_key.rb +41 -0
  67. data/spec/schemas/my_namespace/my_schema_id_key.rb +36 -0
  68. data/spec/schemas/{my_schema_key.rb → my_namespace/my_schema_key.rb} +3 -3
  69. data/spec/schemas/my_namespace/my_schema_with_boolean.rb +41 -0
  70. data/spec/schemas/{my_schema_with_circular_reference.rb → my_namespace/my_schema_with_circular_reference.rb} +15 -10
  71. data/spec/schemas/{my_schema_with_complex_type.rb → my_namespace/my_schema_with_complex_type.rb} +34 -49
  72. data/spec/schemas/my_namespace/my_schema_with_date_time.rb +56 -0
  73. data/spec/schemas/my_namespace/my_schema_with_id.rb +51 -0
  74. data/spec/schemas/my_namespace/my_schema_with_unique_id.rb +56 -0
  75. data/spec/schemas/my_namespace/wibble.rb +76 -0
  76. data/spec/schemas/my_namespace/widget.rb +56 -0
  77. data/spec/schemas/my_namespace/widget_the_second.rb +56 -0
  78. data/spec/schemas/request/create_topic.rb +36 -0
  79. data/spec/schemas/request/index.rb +36 -0
  80. data/spec/schemas/request/update_request.rb +36 -0
  81. data/spec/schemas/response/create_topic.rb +36 -0
  82. data/spec/schemas/response/index.rb +36 -0
  83. data/spec/schemas/response/update_response.rb +36 -0
  84. data/spec/snapshots/consumers-no-nest.snap +93 -86
  85. data/spec/snapshots/consumers.snap +94 -87
  86. data/spec/snapshots/consumers_and_producers-no-nest.snap +108 -87
  87. data/spec/snapshots/consumers_and_producers.snap +109 -88
  88. data/spec/snapshots/consumers_circular-no-nest.snap +93 -86
  89. data/spec/snapshots/consumers_circular.snap +94 -87
  90. data/spec/snapshots/consumers_complex_types-no-nest.snap +93 -86
  91. data/spec/snapshots/consumers_complex_types.snap +94 -87
  92. data/spec/snapshots/consumers_nested-no-nest.snap +93 -86
  93. data/spec/snapshots/consumers_nested.snap +94 -87
  94. data/spec/snapshots/namespace_folders.snap +111 -90
  95. data/spec/snapshots/producers_with_key-no-nest.snap +94 -87
  96. data/spec/snapshots/producers_with_key.snap +95 -88
  97. data/spec/spec_helper.rb +2 -1
  98. metadata +53 -15
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'phobos/cli/start'
4
4
 
5
- # :nodoc:
5
+ #@!visibility private
6
6
  module Phobos
7
7
  # :nodoc:
8
8
  module CLI
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'phobos/producer'
4
4
 
5
+ #@!visibility private
5
6
  module Phobos
6
7
  module Producer
7
8
  # :nodoc:
@@ -11,7 +11,8 @@ module Deimos
11
11
  # Run a block without allowing any messages to be produced to Kafka.
12
12
  # Optionally add a list of producer classes to limit the disabling to those
13
13
  # classes.
14
- # @param producer_classes [Array<Class>|Class]
14
+ # @param producer_classes [Array<Class>, Class]
15
+ # @return [void]
15
16
  def disable_producers(*producer_classes, &block)
16
17
  if producer_classes.any?
17
18
  _disable_producer_classes(producer_classes, &block)
@@ -31,7 +32,7 @@ module Deimos
31
32
  end
32
33
  end
33
34
 
34
- # :nodoc:
35
+ # @!visibility private
35
36
  def _disable_producer_classes(producer_classes)
36
37
  Thread.current[:frk_disabled_producers] ||= Set.new
37
38
  producers_to_disable = producer_classes -
@@ -43,6 +44,7 @@ module Deimos
43
44
 
44
45
  # Are producers disabled? If a class is passed in, check only that class.
45
46
  # Otherwise check if the global disable flag is set.
47
+ # @param producer_class [Class]
46
48
  # @return [Boolean]
47
49
  def producers_disabled?(producer_class=nil)
48
50
  Thread.current[:frk_disable_all_producers] ||
@@ -54,6 +56,7 @@ module Deimos
54
56
  class Producer
55
57
  include SharedConfig
56
58
 
59
+ # @return [Integer]
57
60
  MAX_BATCH_SIZE = 500
58
61
 
59
62
  class << self
@@ -87,19 +90,21 @@ module Deimos
87
90
  end
88
91
 
89
92
  # Publish the payload to the topic.
90
- # @param payload [Hash|SchemaClass::Record] with an optional payload_key hash key.
93
+ # @param payload [Hash, SchemaClass::Record] with an optional payload_key hash key.
91
94
  # @param topic [String] if specifying the topic
95
+ # @return [void]
92
96
  def publish(payload, topic: self.topic)
93
97
  publish_list([payload], topic: topic)
94
98
  end
95
99
 
96
100
  # Publish a list of messages.
97
- # @param payloads [Array<Hash|SchemaClass::Record>] with optional payload_key hash key.
101
+ # @param payloads [Array<Hash, SchemaClass::Record>] with optional payload_key hash key.
98
102
  # @param sync [Boolean] if given, override the default setting of
99
103
  # whether to publish synchronously.
100
104
  # @param force_send [Boolean] if true, ignore the configured backend
101
105
  # and send immediately to Kafka.
102
106
  # @param topic [String] if specifying the topic
107
+ # @return [void]
103
108
  def publish_list(payloads, sync: nil, force_send: false, topic: self.topic)
104
109
  return if Deimos.config.kafka.seed_brokers.blank? ||
105
110
  Deimos.config.producers.disabled ||
@@ -124,7 +129,7 @@ module Deimos
124
129
 
125
130
  # @param sync [Boolean]
126
131
  # @param force_send [Boolean]
127
- # @return [Class < Deimos::Backend]
132
+ # @return [Class<Deimos::Backends::Base>]
128
133
  def determine_backend_class(sync, force_send)
129
134
  backend = if force_send
130
135
  :kafka
@@ -140,8 +145,9 @@ module Deimos
140
145
  end
141
146
 
142
147
  # Send a batch to the backend.
143
- # @param backend [Class < Deimos::Backend]
148
+ # @param backend [Class<Deimos::Backends::Base>]
144
149
  # @param batch [Array<Deimos::Message>]
150
+ # @return [void]
145
151
  def produce_batch(backend, batch)
146
152
  backend.publish(producer_class: self, messages: batch)
147
153
  end
@@ -3,11 +3,19 @@
3
3
  module Deimos
4
4
  # Represents a field in the schema.
5
5
  class SchemaField
6
- attr_accessor :name, :type, :enum_values, :default
6
+ # @return [String]
7
+ attr_accessor :name
8
+ # @return [String]
9
+ attr_accessor :type
10
+ # @return [Array<String>]
11
+ attr_accessor :enum_values
12
+ # @return [Object]
13
+ attr_accessor :default
7
14
 
8
15
  # @param name [String]
9
16
  # @param type [Object]
10
17
  # @param enum_values [Array<String>]
18
+ # @param default [Object]
11
19
  def initialize(name, type, enum_values=[], default=:no_default)
12
20
  @name = name
13
21
  @type = type
@@ -19,9 +27,14 @@ module Deimos
19
27
  module SchemaBackends
20
28
  # Base class for encoding / decoding.
21
29
  class Base
22
- attr_accessor :schema, :namespace, :key_schema
30
+ # @return [String]
31
+ attr_accessor :schema
32
+ # @return [String]
33
+ attr_accessor :namespace
34
+ # @return [String]
35
+ attr_accessor :key_schema
23
36
 
24
- # @param schema [String|Symbol]
37
+ # @param schema [String,Symbol]
25
38
  # @param namespace [String]
26
39
  def initialize(schema:, namespace: nil)
27
40
  @schema = schema
@@ -30,7 +43,7 @@ module Deimos
30
43
 
31
44
  # Encode a payload with a schema. Public method.
32
45
  # @param payload [Hash]
33
- # @param schema [Symbol|String]
46
+ # @param schema [String,Symbol]
34
47
  # @param topic [String]
35
48
  # @return [String]
36
49
  def encode(payload, schema: nil, topic: nil)
@@ -40,7 +53,7 @@ module Deimos
40
53
 
41
54
  # Decode a payload with a schema. Public method.
42
55
  # @param payload [String]
43
- # @param schema [Symbol|String]
56
+ # @param schema [String,Symbol]
44
57
  # @return [Hash,nil]
45
58
  def decode(payload, schema: nil)
46
59
  return nil if payload.nil?
@@ -90,25 +103,26 @@ module Deimos
90
103
 
91
104
  # Encode a payload. To be defined by subclass.
92
105
  # @param payload [Hash]
93
- # @param schema [Symbol|String]
106
+ # @param schema [String,Symbol]
94
107
  # @param topic [String]
95
108
  # @return [String]
96
- def encode_payload(_payload, schema:, topic: nil)
109
+ def encode_payload(payload, schema:, topic: nil)
97
110
  raise NotImplementedError
98
111
  end
99
112
 
100
113
  # Decode a payload. To be defined by subclass.
101
114
  # @param payload [String]
102
- # @param schema [String|Symbol]
115
+ # @param schema [String,Symbol]
103
116
  # @return [Hash]
104
- def decode_payload(_payload, schema:)
117
+ def decode_payload(payload, schema:)
105
118
  raise NotImplementedError
106
119
  end
107
120
 
108
121
  # Validate that a payload matches the schema. To be defined by subclass.
109
122
  # @param payload [Hash]
110
- # @param schema [String|Symbol]
111
- def validate(_payload, schema:)
123
+ # @param schema [String,Symbol]
124
+ # @return [void]
125
+ def validate(payload, schema:)
112
126
  raise NotImplementedError
113
127
  end
114
128
 
@@ -124,7 +138,7 @@ module Deimos
124
138
  # @param field [SchemaField]
125
139
  # @param value [Object]
126
140
  # @return [Object]
127
- def coerce_field(_field, _value)
141
+ def coerce_field(field, value)
128
142
  raise NotImplementedError
129
143
  end
130
144
 
@@ -140,19 +154,19 @@ module Deimos
140
154
  end
141
155
 
142
156
  # Encode a message key. To be defined by subclass.
143
- # @param key [String|Hash] the value to use as the key.
144
- # @param key_id [Symbol|String] the field name of the key.
157
+ # @param key [String,Hash] the value to use as the key.
158
+ # @param key_id [String,Symbol] the field name of the key.
145
159
  # @param topic [String]
146
160
  # @return [String]
147
- def encode_key(_key, _key_id, topic: nil)
161
+ def encode_key(key, key_id, topic: nil)
148
162
  raise NotImplementedError
149
163
  end
150
164
 
151
165
  # Decode a message key. To be defined by subclass.
152
166
  # @param payload [Hash] the message itself.
153
- # @param key_id [Symbol|String] the field in the message to decode.
167
+ # @param key_id [String,Symbol] the field in the message to decode.
154
168
  # @return [String]
155
- def decode_key(_payload, _key_id)
169
+ def decode_key(payload, key_id)
156
170
  raise NotImplementedError
157
171
  end
158
172
 
@@ -15,7 +15,7 @@ module Deimos
15
15
  end
16
16
 
17
17
  # @override
18
- def validate(_payload, schema:)
18
+ def validate(payload, schema:)
19
19
  end
20
20
 
21
21
  # @override
@@ -24,7 +24,7 @@ module Deimos
24
24
  end
25
25
 
26
26
  # @override
27
- def coerce_field(_type, value)
27
+ def coerce_field(field, value)
28
28
  value
29
29
  end
30
30
 
@@ -7,23 +7,26 @@ module Deimos
7
7
  # Base Class for Schema Classes generated from Avro.
8
8
  class Base
9
9
 
10
- # :nodoc:
10
+ # @param _args [Array<Object>]
11
11
  def initialize(*_args)
12
12
  end
13
13
 
14
14
  # Converts the object to a hash which can be used for debugging or comparing objects.
15
+ # @param _opts [Hash]
15
16
  # @return [Hash] a hash representation of the payload
16
17
  def as_json(_opts={})
17
18
  raise NotImplementedError
18
19
  end
19
20
 
20
- # @param key [String|Symbol]
21
+ # @param key [String,Symbol]
21
22
  # @param val [Object]
23
+ # @return [void]
22
24
  def []=(key, val)
23
25
  self.send("#{key}=", val)
24
26
  end
25
27
 
26
- # :nodoc:
28
+ # @param other [SchemaClass::Base]
29
+ # @return [Boolean]
27
30
  def ==(other)
28
31
  comparison = other
29
32
  if other.class == self.class
@@ -33,7 +36,7 @@ module Deimos
33
36
  comparison == self.as_json
34
37
  end
35
38
 
36
- # :nodoc:
39
+ # @return [String]
37
40
  def inspect
38
41
  klass = self.class
39
42
  "#{klass}(#{self.as_json})"
@@ -41,13 +44,14 @@ module Deimos
41
44
 
42
45
  # Initializes this class from a given value
43
46
  # @param value [Object]
47
+ # @return [SchemaClass::Base]
44
48
  def self.initialize_from_value(value)
45
49
  raise NotImplementedError
46
50
  end
47
51
 
48
52
  protected
49
53
 
50
- # :nodoc:
54
+ # @return [Integer]
51
55
  def hash
52
56
  as_json.hash
53
57
  end
@@ -8,9 +8,11 @@ module Deimos
8
8
  # Base Class for Enum Classes generated from Avro.
9
9
  class Enum < Base
10
10
 
11
+ # @return [String]
11
12
  attr_accessor :value
12
13
 
13
14
  # @param other [Deimos::SchemaClass::Enum]
15
+ # @return [Boolean]
14
16
  def ==(other)
15
17
  other.is_a?(self.class) ? other.value == @value : other == @value
16
18
  end
@@ -31,12 +33,12 @@ module Deimos
31
33
  raise NotImplementedError
32
34
  end
33
35
 
34
- # :nodoc:
36
+ # @return [String]
35
37
  def as_json(_opts={})
36
38
  @value
37
39
  end
38
40
 
39
- # :nodoc:
41
+ # @return [SchemaClass::Enum]
40
42
  def self.initialize_from_value(value)
41
43
  return nil if value.nil?
42
44
 
@@ -8,15 +8,21 @@ module Deimos
8
8
  # Base Class of Record Classes generated from Avro.
9
9
  class Record < Base
10
10
 
11
+ attr_accessor :tombstone_key
12
+
11
13
  # Converts the object attributes to a hash which can be used for Kafka
12
14
  # @return [Hash] the payload as a hash.
13
15
  def to_h
14
- self.as_json
16
+ if self.tombstone_key
17
+ { payload_key: self.tombstone_key&.as_json }
18
+ else
19
+ self.as_json
20
+ end
15
21
  end
16
22
 
17
23
  # Merge a hash or an identical schema object with this one and return a new object.
18
- # @param other_hash [Hash|SchemaClasses::Base]
19
- # @return [SchemaClasses::Base]
24
+ # @param other_hash [Hash,SchemaClass::Base]
25
+ # @return [SchemaClass::Base]
20
26
  def merge(other_hash)
21
27
  obj = self.class.new(**self.to_h.symbolize_keys)
22
28
  other_hash.to_h.each do |k, v|
@@ -26,13 +32,13 @@ module Deimos
26
32
  end
27
33
 
28
34
  # Element access method as if this Object were a hash
29
- # @param key[String||Symbol]
35
+ # @param key[String,Symbol]
30
36
  # @return [Object] The value of the attribute if exists, nil otherwise
31
37
  def [](key)
32
38
  self.try(key.to_sym)
33
39
  end
34
40
 
35
- # :nodoc
41
+ # @return [SchemaClass::Record]
36
42
  def with_indifferent_access
37
43
  self
38
44
  end
@@ -66,7 +72,7 @@ module Deimos
66
72
  validator.schema_fields.map(&:name)
67
73
  end
68
74
 
69
- # :nodoc:
75
+ # @return [SchemaClass::Record]
70
76
  def self.initialize_from_value(value)
71
77
  return nil if value.nil?
72
78
 
@@ -35,12 +35,14 @@ module Deimos
35
35
 
36
36
  # Set the schema.
37
37
  # @param schema [String]
38
+ # @return [void]
38
39
  def schema(schema)
39
40
  config[:schema] = schema
40
41
  end
41
42
 
42
43
  # Set the namespace.
43
44
  # @param namespace [String]
45
+ # @return [void]
44
46
  def namespace(namespace)
45
47
  config[:namespace] = namespace
46
48
  end
@@ -48,9 +50,10 @@ module Deimos
48
50
  # Set key configuration.
49
51
  # @param field [Symbol] the name of a field to use in the value schema as
50
52
  # a generated key schema
51
- # @param schema [String|Symbol] the name of a schema to use for the key
53
+ # @param schema [String, Symbol] the name of a schema to use for the key
52
54
  # @param plain [Boolean] if true, do not encode keys at all
53
55
  # @param none [Boolean] if true, do not use keys at all
56
+ # @return [void]
54
57
  def key_config(plain: nil, field: nil, schema: nil, none: nil)
55
58
  config[:key_configured] = true
56
59
  config[:no_keys] = none
@@ -59,7 +62,8 @@ module Deimos
59
62
  config[:key_schema] = schema
60
63
  end
61
64
 
62
- # @param enabled [Boolean]
65
+ # @param use_schema_classes [Boolean]
66
+ # @return [void]
63
67
  def schema_class_config(use_schema_classes)
64
68
  config[:use_schema_classes] = use_schema_classes
65
69
  end
@@ -20,6 +20,7 @@ module Deimos
20
20
  end
21
21
 
22
22
  # Set the config to the right settings for a unit test
23
+ # @return [void]
23
24
  def unit_test!
24
25
  Deimos.configure do |deimos_config|
25
26
  deimos_config.logger = Logger.new(STDOUT)
@@ -31,6 +32,7 @@ module Deimos
31
32
  end
32
33
 
33
34
  # Kafka test config with avro schema registry
35
+ # @return [void]
34
36
  def full_integration_test!
35
37
  Deimos.configure do |deimos_config|
36
38
  deimos_config.producers.backend = :kafka
@@ -39,6 +41,7 @@ module Deimos
39
41
  end
40
42
 
41
43
  # Set the config to the right settings for a kafka test
44
+ # @return [void]
42
45
  def kafka_test!
43
46
  Deimos.configure do |deimos_config|
44
47
  deimos_config.producers.backend = :kafka
@@ -62,21 +65,25 @@ module Deimos
62
65
  end
63
66
 
64
67
  # @deprecated
68
+ # @!visibility private
65
69
  def stub_producers_and_consumers!
66
70
  warn('stub_producers_and_consumers! is no longer necessary and this method will be removed in 3.0')
67
71
  end
68
72
 
69
73
  # @deprecated
74
+ # @!visibility private
70
75
  def stub_producer(_klass)
71
76
  warn('Stubbing producers is no longer necessary and this method will be removed in 3.0')
72
77
  end
73
78
 
74
79
  # @deprecated
80
+ # @!visibility private
75
81
  def stub_consumer(_klass)
76
82
  warn('Stubbing consumers is no longer necessary and this method will be removed in 3.0')
77
83
  end
78
84
 
79
85
  # @deprecated
86
+ # @!visibility private
80
87
  def stub_batch_consumer(_klass)
81
88
  warn('Stubbing batch consumers is no longer necessary and this method will be removed in 3.0')
82
89
  end
@@ -84,6 +91,7 @@ module Deimos
84
91
  # get the difference of 2 hashes.
85
92
  # @param hash1 [Hash]
86
93
  # @param hash2 [Hash]
94
+ # @!visibility private
87
95
  def _hash_diff(hash1, hash2)
88
96
  if hash1.nil? || !hash1.is_a?(Hash)
89
97
  hash2
@@ -96,7 +104,7 @@ module Deimos
96
104
  end
97
105
  end
98
106
 
99
- # :nodoc:
107
+ # @!visibility private
100
108
  def _frk_failure_message(topic, message, key=nil, partition_key=nil, was_negated=false)
101
109
  messages = Deimos::Backends::Test.sent_messages.
102
110
  select { |m| m[:topic] == topic }.
@@ -162,6 +170,7 @@ module Deimos
162
170
 
163
171
  # Clear all sent messages - e.g. if we want to check that
164
172
  # particular messages were sent or not sent after a point in time.
173
+ # @return [void]
165
174
  def clear_kafka_messages!
166
175
  Deimos::Backends::Test.sent_messages.clear
167
176
  end
@@ -170,15 +179,16 @@ module Deimos
170
179
  # that the schema is correct. If
171
180
  # a block is given, that block will be executed when `consume` is called.
172
181
  # Otherwise it will just confirm that `consume` is called at all.
173
- # @param handler_class_or_topic [Class|String] Class which inherits from
182
+ # @param handler_class_or_topic [Class, String] Class which inherits from
174
183
  # Deimos::Consumer or the topic as a string
175
184
  # @param payload [Hash] the payload to consume
176
185
  # @param call_original [Boolean] if true, allow the consume handler
177
186
  # to continue as normal. Not compatible with a block.
178
- # @param ignore_expectation [Boolean] Set to true to not place any
187
+ # @param skip_expectation [Boolean] Set to true to not place any
179
188
  # expectations on the consumer. Primarily used internally to Deimos.
180
189
  # @param key [Object] the key to use.
181
190
  # @param partition_key [Object] the partition key to use.
191
+ # @return [void]
182
192
  def test_consume_message(handler_class_or_topic,
183
193
  payload,
184
194
  call_original: false,
@@ -225,6 +235,7 @@ module Deimos
225
235
  # Check to see that a given message will fail due to validation errors.
226
236
  # @param handler_class [Class]
227
237
  # @param payload [Hash]
238
+ # @return [void]
228
239
  def test_consume_invalid_message(handler_class, payload)
229
240
  expect {
230
241
  handler_class.decoder.validate(payload,
@@ -236,9 +247,14 @@ module Deimos
236
247
  # i.e. that the schema is correct. If
237
248
  # a block is given, that block will be executed when `consume` is called.
238
249
  # Otherwise it will just confirm that `consume` is called at all.
239
- # @param handler_class_or_topic [Class|String] Class which inherits from
250
+ # @param handler_class_or_topic [Class, String] Class which inherits from
240
251
  # Deimos::Consumer or the topic as a string
241
252
  # @param payloads [Array<Hash>] the payload to consume
253
+ # @param keys [Array<Hash,String>]
254
+ # @param partition_keys [Array<Integer>]
255
+ # @param call_original [Boolean]
256
+ # @param skip_expectation [Boolean]
257
+ # @return [void]
242
258
  def test_consume_batch(handler_class_or_topic,
243
259
  payloads,
244
260
  keys: [],
@@ -297,6 +313,7 @@ module Deimos
297
313
  # Check to see that a given message will fail due to validation errors.
298
314
  # @param handler_class [Class]
299
315
  # @param payloads [Array<Hash>]
316
+ # @return [void]
300
317
  def test_consume_batch_invalid_message(handler_class, payloads)
301
318
  topic_name = 'my-topic'
302
319
  handler = handler_class.new
@@ -6,7 +6,7 @@ module Deimos
6
6
  module Tracing
7
7
  # Tracing wrapper class for Datadog.
8
8
  class Datadog < Tracing::Provider
9
- # :nodoc:
9
+ # @param config [Hash]
10
10
  def initialize(config)
11
11
  raise 'Tracing config must specify service_name' if config[:service_name].nil?
12
12
 
@@ -6,13 +6,14 @@ module Deimos
6
6
  module Tracing
7
7
  # Class that mocks out tracing functionality
8
8
  class Mock < Tracing::Provider
9
- # :nodoc:
9
+ # @param logger [Logger]
10
10
  def initialize(logger=nil)
11
11
  @logger = logger || Logger.new(STDOUT)
12
12
  @logger.info('MockTracingProvider initialized')
13
13
  end
14
14
 
15
- # :nodoc:
15
+ # @param span_name [String]
16
+ # @param _options [Hash]
16
17
  def start(span_name, _options={})
17
18
  @logger.info("Mock span '#{span_name}' started")
18
19
  {
@@ -35,7 +36,7 @@ module Deimos
35
36
  end
36
37
 
37
38
  # :nodoc:
38
- def set_tag(name, value)
39
+ def set_tag(tag, value, span=nil)
39
40
  nil
40
41
  end
41
42
 
@@ -14,6 +14,7 @@ module Deimos
14
14
 
15
15
  # Finishes the trace on the span object.
16
16
  # @param span [Object] The span to finish trace on
17
+ # @return [void]
17
18
  def finish(span)
18
19
  raise NotImplementedError
19
20
  end
@@ -21,11 +22,13 @@ module Deimos
21
22
  # Set an error on the span.
22
23
  # @param span [Object] The span to set error on
23
24
  # @param exception [Exception] The exception that occurred
25
+ # @return [void]
24
26
  def set_error(span, exception)
25
27
  raise NotImplementedError
26
28
  end
27
29
 
28
30
  # Get the currently activated span.
31
+ # @return [Object]
29
32
  def active_span
30
33
  raise NotImplementedError
31
34
  end
@@ -33,6 +36,8 @@ module Deimos
33
36
  # Set a tag to a span. Use the currently active span if not given.
34
37
  # @param tag [String]
35
38
  # @param value [String]
39
+ # @param span [Object]
40
+ # @return [void]
36
41
  def set_tag(tag, value, span=nil)
37
42
  raise NotImplementedError
38
43
  end
@@ -7,12 +7,15 @@ module Deimos
7
7
  module Utils
8
8
  # Class which continually polls the database and sends Kafka messages.
9
9
  class DbPoller
10
+ # @return [Integer]
10
11
  BATCH_SIZE = 1000
11
12
 
12
13
  # Needed for Executor so it can identify the worker
14
+ # @return [Integer]
13
15
  attr_reader :id
14
16
 
15
17
  # Begin the DB Poller process.
18
+ # @return [void]
16
19
  def self.start!
17
20
  if Deimos.config.db_poller_objects.empty?
18
21
  raise('No pollers configured!')
@@ -28,7 +31,7 @@ module Deimos
28
31
  signal_handler.run!
29
32
  end
30
33
 
31
- # @param config [Deimos::Configuration::ConfigStruct]
34
+ # @param config [FigTree::ConfigStruct]
32
35
  def initialize(config)
33
36
  @config = config
34
37
  @id = SecureRandom.hex
@@ -47,6 +50,7 @@ module Deimos
47
50
  # time we ran
48
51
  # 2) On a loop, process all the recent updates between the last time
49
52
  # we ran and now.
53
+ # @return [void]
50
54
  def start
51
55
  # Don't send asynchronously
52
56
  if Deimos.config.producers.backend == :kafka_async
@@ -66,6 +70,7 @@ module Deimos
66
70
  end
67
71
 
68
72
  # Grab the PollInfo or create if it doesn't exist.
73
+ # @return [void]
69
74
  def retrieve_poll_info
70
75
  ActiveRecord::Base.connection.reconnect! unless ActiveRecord::Base.connection.open_transactions.positive?
71
76
  new_time = @config.start_from_beginning ? Time.new(0) : Time.zone.now
@@ -76,6 +81,7 @@ module Deimos
76
81
  end
77
82
 
78
83
  # Stop the poll.
84
+ # @return [void]
79
85
  def stop
80
86
  Deimos.config.logger.info('Received signal to stop')
81
87
  @signal_to_stop = true
@@ -95,6 +101,7 @@ module Deimos
95
101
  end
96
102
 
97
103
  # Send messages for updated data.
104
+ # @return [void]
98
105
  def process_updates
99
106
  return unless should_run?
100
107
 
@@ -135,6 +142,7 @@ module Deimos
135
142
  end
136
143
 
137
144
  # @param batch [Array<ActiveRecord::Base>]
145
+ # @return [void]
138
146
  def process_batch(batch)
139
147
  record = batch.last
140
148
  id_method = record.class.primary_key