redis-stream 0.4.6 → 0.4.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f717daecee4d177674a113217514c86d58fbb833fbd7e3a8751263f1c110b26a
4
- data.tar.gz: a78aef2ebb19708c634c02e87b2039b1f1ceb7f3a04cc1aeecc929076130f35c
3
+ metadata.gz: 2003a3a4fd95c727e14279d50acf299abd6737a41e35d9f158423ba66403800d
4
+ data.tar.gz: 6677b422a7740963c3076a3bf832ff1a65ce26cb75345123847fc8b598574c32
5
5
  SHA512:
6
- metadata.gz: 380bfb8e1ea254d1e9cb3ab5d0c0367eaefe350671cc85ac0e7c34d9512965a9a00e7840745f759b45f172ad91d78db1e4774a39d542410f2b1cc6072a95be68
7
- data.tar.gz: f0531ee5f9e2cc442ec9339c3935e0bd83c6930fe4e3476d843505c985f9d3f814e9ce44e584ed243f8cd4f7e27da45efad76605252ecf705cf01c898880a33d
6
+ metadata.gz: 518e77d3732aff505a6303fe4e2bed3b26e172a9ecc1b1ddeda4025097414cc310c591aeac800d27d3feec7e2bc2a86e57fa2a454c4b6cfcac76155cd7ccd809
7
+ data.tar.gz: 0b81242d27148e2fc71787e7cc62a29abf1edaa28c4b81a9f29135c48a8def5edcc2a282fe78b9c945e560203d951b7e9d9ab44315b9507df41655c24147638a
data/Gemfile.lock CHANGED
@@ -2,6 +2,7 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  redis-stream (0.4.6)
5
+ connection_pool (~> 2.2)
5
6
  moneta (~> 1.2)
6
7
  multi_json (~> 1.14)
7
8
  redis (= 4.1.3)
@@ -10,6 +11,7 @@ PATH
10
11
  GEM
11
12
  remote: https://rubygems.org/
12
13
  specs:
14
+ connection_pool (2.2.2)
13
15
  json (2.3.0)
14
16
  minitest (5.13.0)
15
17
  moneta (1.2.1)
@@ -1,5 +1,6 @@
1
1
  #encoding: UTF-8
2
2
  require "redis"
3
+ require "connection_pool"
3
4
  require "logger"
4
5
  require "json"
5
6
  require "thread"
@@ -46,19 +47,19 @@ class Redis
46
47
  @group = group_name
47
48
  if options.include?('redis')
48
49
  @logger.info("Taking REDIS as a parameter")
49
- @redis = options['redis']
50
+ @redis_pool = ConnectionPool.new(size: 10, timeout: 5) { options['redis'] }
50
51
  elsif Redis::Stream::Config.file_exists? && Redis::Stream::Config.include?(:redis)
51
52
  @logger.info("Taking REDIS from config file")
52
- @redis = Redis.new(Redis::Stream::Config[:redis])
53
+ @redis_pool = ConnectionPool.new(size: 10, timeout: 5) { Redis.new(Redis::Stream::Config[:redis]) }
53
54
  else
54
55
  @logger.info("Instantiating REDIS")
55
- @redis = Redis.new(host: host, port: port, db: db)
56
+ @redis_pool = ConnectionPool.new(size: 10, timeout: 5) { Redis.new(host: host, port: port, db: db) }
56
57
  end
57
58
  @consumer_id = "#{@name}-#{@group}-#{Process.pid}"
58
59
  @non_blocking = nil
59
60
  # @send_queue = []
60
61
 
61
- raise "No redis" if @redis.nil?
62
+ raise "No redis" if @redis_pool.nil? || @redis_pool.available == 0
62
63
 
63
64
  if options.has_key?('tracer') && !options['tracer'].nil?
64
65
  OpenTracing.global_tracer = options["tracer"]
@@ -89,7 +90,10 @@ class Redis
89
90
  to = options["to"]
90
91
  group = options["group"]
91
92
  payload = build_payload(data, options)
92
- add_id = @redis.xadd(@stream, payload)
93
+ add_id = nil
94
+ @redis_pool.with do |redis|
95
+ add_id = redis.xadd(@stream, payload)
96
+ end
93
97
 
94
98
  @logger.info("#{@consumer_id} - send to '#{to}' in group '#{group}' with id '#{add_id}' of type '#{type}'")
95
99
  end
@@ -265,7 +269,9 @@ class Redis
265
269
  def setup_stream
266
270
  if @group
267
271
  begin
268
- @redis.xgroup(:create, @stream, @group, '$', mkstream: true)
272
+ @redis_pool.with do |redis|
273
+ redis.xgroup(:create, @stream, @group, '$', mkstream: true)
274
+ end
269
275
  @logger.info("#{@consumer_id} - Group #{@group} created")
270
276
  rescue Redis::CommandError => e
271
277
  @logger.error("#{@consumer_id} - Group #{@group} exists")
@@ -306,13 +312,17 @@ class Redis
306
312
  # @param [Boolean] passthrough Receive all messages also the ones intended for other consumers
307
313
  def read_next_message_from_stream(async = true, passthrough = false)
308
314
  if @state == Redis::Stream::State::RUNNING
309
- result = @redis.xread(@stream, @lastid, block: 1000, count: 1) if @group.nil?
310
- result = @redis.xreadgroup(@group, @consumer_id, @stream, '>', block: 1000, count: 1) if @group
311
-
315
+ result = nil
316
+ @redis_pool.with do |redis|
317
+ result = redis.xread(@stream, @lastid, block: 1000, count: 1) if @group.nil?
318
+ result = redis.xreadgroup(@group, @consumer_id, @stream, '>', block: 1000, count: 1) if @group
319
+ end
312
320
  unless result.empty?
313
321
  id, data_out = result[@stream][0]
314
- ack_count = @redis.xack(@stream, @group, id) if @group
315
-
322
+ ack_count = 0
323
+ @redis_pool.with do |redis|
324
+ ack_count = redis.xack(@stream, @group, id) if @group
325
+ end
316
326
  tracer_data = JSON.parse(data_out["tracer"])
317
327
  unless tracer_data.nil? || tracer_data.empty?
318
328
  #trace_scope.span.log_kv('has_tracer' => true)
@@ -3,34 +3,46 @@ class Redis
3
3
  module Stream
4
4
  module Inspect
5
5
  def groups
6
- @redis.xinfo("groups", @stream)
6
+ @redis_pool.with do |redis|
7
+ redis.xinfo("groups", @stream)
8
+ end
7
9
  rescue Exception => e
8
10
  @logger.error("#{@consumer_id} - #{e.message}")
9
11
  {}
10
12
  end
11
13
 
12
14
  def info
13
- @redis.xinfo("stream", @stream)
15
+ @redis_pool.with do |redis|
16
+ redis.xinfo("stream", @stream)
17
+ end
14
18
  end
15
19
 
16
20
  def consumers(group = @group)
17
- @redis.xinfo("consumers", @stream, group)
21
+ @redis_pool.with do |redis|
22
+ redis.xinfo("consumers", @stream, group)
23
+ end
18
24
  end
19
25
 
20
26
  def del_consumer(group = @group, consumer = @consumer_id)
21
27
  @logger.info("#{@consumer_id} - deleting consumer #{group}-#{consumer}")
22
- @redis.xgroup('DELCONSUMER', @stream, group, consumer)
28
+ @redis_pool.with do |redis|
29
+ redis.xgroup('DELCONSUMER', @stream, group, consumer)
30
+ end
23
31
  end
24
32
 
25
33
  def del_group(group = @group)
26
34
  if consumers(group).length == 0 && groups.map { |m| m["name"] }.include?(group)
27
35
  @logger.info("#{@consumer_id} - deleting group #{group}")
28
- @redis.xgroup('DESTROY', @stream, group)
36
+ @redis_pool.with do |redis|
37
+ redis.xgroup('DESTROY', @stream, group)
38
+ end
29
39
  end
30
40
  end
31
41
 
32
42
  def pending_messages
33
- @redis.xrange(@stream)
43
+ @redis_pool.with do |redis|
44
+ redis.xrange(@stream)
45
+ end
34
46
  end
35
47
  end #Inspect
36
48
  end #Stream
@@ -1,6 +1,6 @@
1
1
  #encoding: UTF-8
2
2
  class Redis
3
3
  module Stream
4
- VERSION = "0.4.6"
4
+ VERSION = "0.4.7"
5
5
  end
6
6
  end
data/redis-stream.gemspec CHANGED
@@ -40,6 +40,7 @@ Gem::Specification.new do |spec|
40
40
  spec.add_development_dependency "rake", "~> 13.0"
41
41
  spec.add_development_dependency "minitest", "~> 5.0"
42
42
  spec.add_dependency "redis", "4.1.3"
43
+ spec.add_dependency "connection_pool", "~> 2.2"
43
44
  spec.add_dependency "moneta", "~> 1.2"
44
45
  spec.add_dependency "multi_json", "~> 1.14"
45
46
  spec.add_dependency "zipkin", "~> 1.6.1"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis-stream
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.6
4
+ version: 0.4.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mehmet Celik
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-04 00:00:00.000000000 Z
11
+ date: 2020-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
68
  version: 4.1.3
69
+ - !ruby/object:Gem::Dependency
70
+ name: connection_pool
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.2'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.2'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: moneta
71
85
  requirement: !ruby/object:Gem::Requirement