redis-cluster 1.0.0.pre.rc.4 → 1.0.0

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
  SHA1:
3
- metadata.gz: ae1424cf66cf0843a3300a70bf4dd23ce9699c56
4
- data.tar.gz: 898602e4c11a4267da6d7d427d57da29ae161eba
3
+ metadata.gz: 328dcd9bbc349a36b70a5f91bc16c69345bef62c
4
+ data.tar.gz: 32720a7f55ac9b912878eaf3a287bb940000f461
5
5
  SHA512:
6
- metadata.gz: f2748d2afac09200212d8141f4c8ad8568e3038a8da78bc0d0128be05c99280c24e7ba7336daea7daf80a49cf2f942353c5432c0986c091b2f266e226d6a02ff
7
- data.tar.gz: fa34f1114adc201170ee71c54f77c19624dc1bad37ad82cb83eed2500ed86bc0f42a6c086fd2b2281482dab94ac27656f886a29e6fced351d2215b0b68e784cb
6
+ metadata.gz: 7e35a19038dfac92f8c0968f44bf442a9eb225b324d2a066aed1aa83e110ea840582113cbda262e0c6323ccaac955eb6f8921b85585d8c91f602adba1913d863
7
+ data.tar.gz: 182e883b1fc704db0f1d8e2737fe9a1cc87209d37bf53dc2976f917d427d0ccf4cf400fcb7e7338119ec9e351aa8ed6aa7e62a909a5a209a4aa330a971e6bf98
@@ -18,6 +18,7 @@ class RedisCluster
18
18
  @replicas = nil
19
19
  @client_creater = block
20
20
 
21
+ @buffer = []
21
22
  init_client(seeds)
22
23
  end
23
24
 
@@ -41,9 +42,9 @@ class RedisCluster
41
42
  when :master
42
43
  slots[slot].first
43
44
  when :slave
44
- slots[slot][1..-1].select(&:healthy).sample || slots[slot].first
45
+ pick_client(slots[slot], skip: 1) || slots[slot].first
45
46
  when :master_slave
46
- slots[slot].select(&:healthy).sample
47
+ pick_client(slots[slot])
47
48
  end
48
49
  end
49
50
 
@@ -81,6 +82,24 @@ class RedisCluster
81
82
 
82
83
  private
83
84
 
85
+ def pick_client(pool, skip: 0)
86
+ unhealthy_count = 0
87
+
88
+ (skip...pool.length).each do |i|
89
+ if pool[i].healthy
90
+ @buffer[i - skip] = pool[i]
91
+ else
92
+ unhealthy_count += 1
93
+ end
94
+ end
95
+
96
+ buffer_length = pool.length - skip - unhealthy_count
97
+ return nil if buffer_length.zero?
98
+
99
+ i = rand(buffer_length)
100
+ @buffer[i]
101
+ end
102
+
84
103
  def slots_and_clients(client)
85
104
  replicas = ::Hash.new{ |h, k| h[k] = [] }
86
105
 
@@ -107,6 +126,7 @@ class RedisCluster
107
126
  end
108
127
  end
109
128
 
129
+ @buffer = Array.new(clients.length) if clients.length > @buffer.length
110
130
  @replicas = replicas
111
131
  end
112
132
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class RedisCluster
4
- VERSION = '1.0.0-rc.4'
4
+ VERSION = '1.0.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis-cluster
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.rc.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bukalapak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-16 00:00:00.000000000 Z
11
+ date: 2018-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -61,9 +61,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
61
61
  version: '0'
62
62
  required_rubygems_version: !ruby/object:Gem::Requirement
63
63
  requirements:
64
- - - ">"
64
+ - - ">="
65
65
  - !ruby/object:Gem::Version
66
- version: 1.3.1
66
+ version: '0'
67
67
  requirements: []
68
68
  rubyforge_project:
69
69
  rubygems_version: 2.5.1