waterdrop 0.1.8 → 0.1.9

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: cbea9ddc22773693d0b13d65a0f3ebc780c49728
4
- data.tar.gz: 83af92ca901fa84b08f9ca0181ce6776dccf714a
3
+ metadata.gz: afd61e0c7e80a6ccd14002340ca460ca051f835e
4
+ data.tar.gz: 80072934389308b27aa255a7e8e9b223b906d10e
5
5
  SHA512:
6
- metadata.gz: 525b3f744648cb556162e4c9534d347a45311e37d0710e0fa64b2d10b21c26ccb7b725911d36f30e46ac4d83293cebf90e7df16fbc6c13e43a1f81c407cebd3e
7
- data.tar.gz: 97b53494dbac29cb44ecf214c2d30335c45ccdd97e2db4f9275a24a8b3a8e230d14664f75e1faafbd3b57d843090a7e0df750a2df40ba8cace782cbe37d0768e
6
+ metadata.gz: e4653e4edb72c79ac015451e7fa9c5b62232262e63cd76420bb8aa7b02b3d64df87098d81a73b80867511b898e513ce9c88f28e132238d1cf54109b4dc598332
7
+ data.tar.gz: 17c30dc90a1bd130245ce9df5f586d97ff4fa70a007ef1f7ff21e5e55572a4eab94fcf8dc76c42d44f44b8cc7c2eecca6bb7085c7b3773a2f18d1bc2e5d9709d
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # WaterDrop changelog
2
2
 
3
+ ## 0.1.9
4
+ - Required acks and set to - (most secure but slower)
5
+ - Added a proxu layer to to producer so we could replate Kafka with other messaging systems
6
+ - Gem dump
7
+
3
8
  ## 0.1.8
4
9
  - proper poseidon clients names (not duplicated)
5
10
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- waterdrop (0.1.8)
4
+ waterdrop (0.1.9)
5
5
  aspector
6
6
  bundler
7
7
  connection_pool
@@ -12,10 +12,7 @@ module WaterDrop
12
12
  size: ::WaterDrop.config.connection_pool_size,
13
13
  timeout: ::WaterDrop.config.connection_pool_timeout
14
14
  ) do
15
- Poseidon::Producer.new(
16
- ::WaterDrop.config.kafka_hosts,
17
- object_id.to_s + rand.to_s + Time.now.to_f.to_s
18
- )
15
+ WaterDrop::ProducerProxy.new
19
16
  end
20
17
  end
21
18
  end
@@ -0,0 +1,72 @@
1
+ module WaterDrop
2
+ # Proxy object for a producer (sender) objects that are inside pool
3
+ # We use it to provide additional timeout monitoring layer
4
+ # There seem to be some issues with Poseidon and usage of sockets that
5
+ # are old and not used - that's why we just reinitialize connection if
6
+ # the connection layer is not being used for too long
7
+ class ProducerProxy
8
+ # How long should be object considered alive if nothing is being
9
+ # send using it. After that time, we will recreate the connection
10
+ LIFE_TIME = 5 * 60 # 5 minute
11
+
12
+ # How often should we refresh meta data from Kafka
13
+ METADATA_REFRESH_INTERVAL = 5 * 60 # 5 minute
14
+
15
+ # @see https://kafka.apache.org/08/configuration.html
16
+ # Security level for producer
17
+ REQUIRED_ACKS = -1
18
+
19
+ # @return [WaterDrop::ProducerProxy] proxy object to Poseidon::Producer
20
+ # @note To ignore @last_usage nil case - we just assume that it is being
21
+ # first used when we create it
22
+ def initialize
23
+ touch
24
+ end
25
+
26
+ # Sends messages to Kafka
27
+ # @param messages [Array<Poseidon::MessageToSend>] array with messages that we want to send
28
+ # @return [Boolean] were the messages send
29
+ # @note Even if you send one message - it still needs to be in an array
30
+ # @example Send 1 message
31
+ # ProducerProxy.new.send_messages([Poseidon::MessageToSend.new(topic, message)])
32
+ def send_messages(messages)
33
+ touch
34
+ producer.send_messages(messages)
35
+ end
36
+
37
+ private
38
+
39
+ # Refreshes last usage value with current time
40
+ def touch
41
+ @last_usage = Time.now
42
+ end
43
+
44
+ # @return [Poseidon::Producer] producer instance to which we can forward method requests
45
+ def producer
46
+ reload! if dead?
47
+ # Metadata refresh interval needs to be in miliseconds
48
+ @producer ||= Poseidon::Producer.new(
49
+ ::WaterDrop.config.kafka_hosts,
50
+ producer_id,
51
+ metadata_refresh_interval_ms: METADATA_REFRESH_INTERVAL * 1000,
52
+ required_acks: REQUIRED_ACKS
53
+ )
54
+ end
55
+
56
+ # @return [String] random unique id for producer
57
+ def producer_id
58
+ object_id.to_s + Time.now.to_f.to_s
59
+ end
60
+
61
+ # @return [Boolean] true if we cannot use producer anymore because it was not used for a
62
+ # long time
63
+ def dead?
64
+ @last_usage + LIFE_TIME < Time.now
65
+ end
66
+
67
+ # Resets a producer so a new one will be created once requested
68
+ def reload!
69
+ @producer = nil
70
+ end
71
+ end
72
+ end
@@ -1,5 +1,5 @@
1
1
  # WaterDrop library
2
2
  module WaterDrop
3
3
  # Current WaterDrop version
4
- VERSION = '0.1.8'.freeze
4
+ VERSION = '0.1.9'.freeze
5
5
  end
data/lib/waterdrop.rb CHANGED
@@ -18,6 +18,7 @@ base_path = File.dirname(__FILE__) + '/water_drop'
18
18
 
19
19
  %w(
20
20
  version
21
+ producer_proxy
21
22
  pool
22
23
  config
23
24
  message
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: waterdrop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maciej Mensfeld
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-10-21 00:00:00.000000000 Z
12
+ date: 2015-10-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -121,6 +121,7 @@ files:
121
121
  - lib/water_drop/config.rb
122
122
  - lib/water_drop/message.rb
123
123
  - lib/water_drop/pool.rb
124
+ - lib/water_drop/producer_proxy.rb
124
125
  - lib/water_drop/version.rb
125
126
  - lib/waterdrop.rb
126
127
  - waterdrop.gemspec