phobos 1.7.0 → 1.7.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aa6ceb9067bc80835a1460e43cbe613f7fdaaa23
4
- data.tar.gz: 43281f6ada2fe5b824da9cc236d56523c58cee02
3
+ metadata.gz: 8f244c641277c9ee85b12ea07250670fba1a0e8c
4
+ data.tar.gz: 385b9b4dec2f3991b9a8d1345d1f838c4d1ce04d
5
5
  SHA512:
6
- metadata.gz: ad5569add3dd9748cb746943816285d3518052dbc148b2102975b60744782081afc81c5d520f7ca80e090505b4c6b592b49959aa8d22820367f799739d4c2e7d
7
- data.tar.gz: 2e110cdba90db10a6c0cf4a51bee1f8bdf31ea1090f303d44d817654d6c8dd14837eba52a6a83419e35c31a385a3dc01a083df16142128805adc9e5d5d65b29c
6
+ metadata.gz: e116a595f2d1de1881ff4c24b07b563c1f2798e28cc2af434b057b3b137fdd94b91bf44d767f4d138dd1b5114f2afba324c85b2eb1f8e4aba38173fb222ec9e1
7
+ data.tar.gz: 4359fba15e7de514376a5da2ab19c4796523c71155b9ea22a54317edae26c1ec9cfbcfefe5b3a856228aedcd405d1adb369ad21df1b72d8651becb7455aa0242
data/.travis.yml CHANGED
@@ -2,6 +2,7 @@ sudo: required
2
2
  language: ruby
3
3
  rvm:
4
4
  - 2.4.1
5
+ - 2.3.6
5
6
 
6
7
  services:
7
8
  - docker
data/CHANGELOG.md CHANGED
@@ -6,6 +6,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
6
6
 
7
7
  ## UNRELEASED
8
8
 
9
+ ## [1.7.1] - 2018-02-22
10
+ ### Fixed
11
+ - Phobos overwrites ENV['RAILS_ENV'] with incorrect value #71
12
+ - Possible NoMethodError #force_encoding #63
13
+ - Phobos fails silently #66
14
+ ### Added
15
+ - Add offset_retention_time to consumer options #62
16
+
9
17
  ## [1.7.0] - 2017-12-05
10
18
  ### Fixed
11
19
  - Test are failing with ruby-kafka 0.5.0 #48
@@ -70,6 +70,8 @@ consumer:
70
70
  # number of messages that can be processed before their offsets are committed.
71
71
  # If zero, offset commits are not triggered by message processing
72
72
  offset_commit_threshold: 0
73
+ # the time period that committed offsets will be retained, in seconds. Defaults to the broker setting.
74
+ offset_retention_time:
73
75
  # interval between heartbeats; must be less than the session window
74
76
  heartbeat_interval: 10
75
77
 
data/lib/phobos.rb CHANGED
@@ -31,13 +31,12 @@ module Phobos
31
31
  attr_accessor :silence_log
32
32
 
33
33
  def configure(configuration)
34
- ENV['RAILS_ENV'] = ENV['RACK_ENV'] ||= 'development'
35
34
  @config = DeepStruct.new(fetch_settings(configuration))
36
35
  @config.class.send(:define_method, :producer_hash) { Phobos.config.producer&.to_hash }
37
36
  @config.class.send(:define_method, :consumer_hash) { Phobos.config.consumer&.to_hash }
38
37
  @config.listeners ||= []
39
38
  configure_logger
40
- logger.info { Hash(message: 'Phobos configured', env: ENV['RACK_ENV']) }
39
+ logger.info { Hash(message: 'Phobos configured', env: ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'N/A') }
41
40
  end
42
41
 
43
42
  def add_listeners(listeners_configuration)
@@ -51,7 +51,7 @@ module Phobos
51
51
  private
52
52
 
53
53
  def force_encoding(value)
54
- @listener.encoding ? value.force_encoding(@listener.encoding) : value
54
+ @listener.encoding ? value&.force_encoding(@listener.encoding) : value
55
55
  end
56
56
 
57
57
  def process_message(payload)
@@ -18,9 +18,9 @@ module Phobos
18
18
  @threads = Concurrent::Array.new
19
19
  @listeners = Phobos.config.listeners.flat_map do |config|
20
20
  handler_class = config.handler.constantize
21
- listener_configs = config.to_hash
21
+ listener_configs = config.to_hash.deep_symbolize_keys
22
22
  max_concurrency = listener_configs[:max_concurrency] || 1
23
- max_concurrency.times.map do
23
+ Array.new(max_concurrency).map do
24
24
  configs = listener_configs.select { |k| LISTENER_OPTS.include?(k) }
25
25
  Phobos::Listener.new(configs.merge(handler: handler_class))
26
26
  end
@@ -48,7 +48,7 @@ module Phobos
48
48
  return if @signal_to_stop
49
49
  instrument('executor.stop') do
50
50
  @signal_to_stop = true
51
- @listeners.map(&:stop)
51
+ @listeners.each(&:stop)
52
52
  @threads.select(&:alive?).each { |thread| thread.wakeup rescue nil }
53
53
  @thread_pool&.shutdown
54
54
  @thread_pool&.wait_for_termination
@@ -58,6 +58,14 @@ module Phobos
58
58
 
59
59
  private
60
60
 
61
+ def error_metadata(e)
62
+ {
63
+ exception_class: e.class.name,
64
+ exception_message: e.message,
65
+ backtrace: e.backtrace
66
+ }
67
+ end
68
+
61
69
  def run_listener(listener)
62
70
  retry_count = 0
63
71
  backoff = listener.create_exponential_backoff
@@ -74,11 +82,8 @@ module Phobos
74
82
  metadata = {
75
83
  listener_id: listener.id,
76
84
  retry_count: retry_count,
77
- waiting_time: interval,
78
- exception_class: e.class.name,
79
- exception_message: e.message,
80
- backtrace: e.backtrace
81
- }
85
+ waiting_time: interval
86
+ }.merge(error_metadata(e))
82
87
 
83
88
  instrument('executor.retry_listener_error', metadata) do
84
89
  Phobos.logger.error { Hash(message: "Listener crashed, waiting #{interval}s (#{e.message})").merge(metadata)}
@@ -88,7 +93,9 @@ module Phobos
88
93
  retry_count += 1
89
94
  retry unless @signal_to_stop
90
95
  end
96
+ rescue Exception => e
97
+ Phobos.logger.error { Hash(message: "Failed to run listener (#{e.message})").merge(error_metadata(e)) }
98
+ raise e
91
99
  end
92
-
93
100
  end
94
101
  end
@@ -2,7 +2,14 @@ module Phobos
2
2
  class Listener
3
3
  include Phobos::Instrumentation
4
4
 
5
- KAFKA_CONSUMER_OPTS = %i(session_timeout offset_commit_interval offset_commit_threshold heartbeat_interval).freeze
5
+ KAFKA_CONSUMER_OPTS = %i(
6
+ session_timeout
7
+ offset_commit_interval
8
+ offset_commit_threshold
9
+ heartbeat_interval
10
+ offset_retention_time
11
+ ).freeze
12
+
6
13
  DEFAULT_MAX_BYTES_PER_PARTITION = 1048576 # 1 MB
7
14
  DELIVERY_OPTS = %w[batch message].freeze
8
15
 
@@ -13,11 +13,9 @@ module Phobos
13
13
  )
14
14
 
15
15
  message = Kafka::FetchedMessage.new(
16
- value: payload,
17
- key: nil,
16
+ message: Kafka::Protocol::Message.new(value: payload, key: nil, offset: 13),
18
17
  topic: TOPIC,
19
- partition: 0,
20
- offset: 13,
18
+ partition: 0
21
19
  )
22
20
 
23
21
  Phobos::Actions::ProcessMessage.new(
@@ -1,3 +1,3 @@
1
1
  module Phobos
2
- VERSION = '1.7.0'
2
+ VERSION = '1.7.1'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phobos
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Túlio Ornelas
@@ -14,7 +14,7 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2017-12-05 00:00:00.000000000 Z
17
+ date: 2018-02-22 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: bundler