nogara-redis_failover 1.0.2 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Changes.md +5 -0
- data/lib/redis_failover/client.rb +8 -2
- data/lib/redis_failover/node_manager.rb +6 -1
- data/lib/redis_failover/version.rb +1 -1
- data/redis_failover.gemspec +1 -1
- data/spec/client_spec.rb +19 -0
- metadata +5 -5
data/Changes.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
1.0.2
|
2
|
+
-----------
|
3
|
+
- Reopen client if an ZK::Exceptions::InterruptedSession occurs (#50, mauricio)
|
4
|
+
- Insert the "root_znode" path before "master_redis_node_manager_lock" and expose via accessor (#52, jzaleski)
|
5
|
+
|
1
6
|
1.0.1
|
2
7
|
-----------
|
3
8
|
- Bumped required dependency on ZK gem. ZK 1.7.4 fixes a critical bug with locking (see https://github.com/slyphon/zk/issues/54)
|
@@ -36,6 +36,12 @@ module RedisFailover
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
+
def call(command, &block)
|
40
|
+
method = command[0]
|
41
|
+
args = command[1..-1]
|
42
|
+
dispatch(method, *args, &block)
|
43
|
+
end
|
44
|
+
|
39
45
|
# Creates a new failover redis client.
|
40
46
|
#
|
41
47
|
# @param [Hash] options the options used to initialize the client instance
|
@@ -123,7 +129,7 @@ module RedisFailover
|
|
123
129
|
|
124
130
|
# @return [String] a string representation of the client
|
125
131
|
def inspect
|
126
|
-
"#<RedisFailover::Client (master: #{master_name}, slaves: #{slave_names})>"
|
132
|
+
"#<RedisFailover::Client (db: #{@db.to_i}, master: #{master_name}, slaves: #{slave_names})>"
|
127
133
|
end
|
128
134
|
alias_method :to_s, :inspect
|
129
135
|
|
@@ -317,7 +323,7 @@ module RedisFailover
|
|
317
323
|
logger.debug("Fetched nodes: #{nodes.inspect}")
|
318
324
|
|
319
325
|
nodes
|
320
|
-
rescue Zookeeper::Exceptions::InheritedConnectionError => ex
|
326
|
+
rescue Zookeeper::Exceptions::InheritedConnectionError, ZK::Exceptions::InterruptedSession => ex
|
321
327
|
logger.debug { "Caught #{ex.class} '#{ex.message}' - reopening ZK client" }
|
322
328
|
@zk.reopen
|
323
329
|
retry
|
@@ -459,6 +459,11 @@ module RedisFailover
|
|
459
459
|
"#{@root_znode}/nodes"
|
460
460
|
end
|
461
461
|
|
462
|
+
# @return [String] root path for current node manager lock
|
463
|
+
def current_lock_path
|
464
|
+
"#{@root_znode}/master_redis_node_manager_lock"
|
465
|
+
end
|
466
|
+
|
462
467
|
# @return [String] the znode path used for performing manual failovers
|
463
468
|
def manual_failover_path
|
464
469
|
ManualFailover.path(@root_znode)
|
@@ -631,7 +636,7 @@ module RedisFailover
|
|
631
636
|
|
632
637
|
# Executes a block wrapped in a ZK exclusive lock.
|
633
638
|
def with_lock
|
634
|
-
@zk_lock ||= @zk.locker(
|
639
|
+
@zk_lock ||= @zk.locker(current_lock_path)
|
635
640
|
|
636
641
|
begin
|
637
642
|
@zk_lock.lock!(true)
|
data/redis_failover.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.add_dependency('redis', ['>= 2.2', '< 4'])
|
19
19
|
gem.add_dependency('redis-namespace')
|
20
20
|
gem.add_dependency('multi_json', '~> 1')
|
21
|
-
gem.add_dependency('zk', ['>= 1.7.4', '< 1.
|
21
|
+
gem.add_dependency('zk', ['>= 1.7.4', '< 1.9'])
|
22
22
|
|
23
23
|
gem.add_development_dependency('rake')
|
24
24
|
gem.add_development_dependency('rspec')
|
data/spec/client_spec.rb
CHANGED
@@ -54,6 +54,25 @@ module RedisFailover
|
|
54
54
|
called.should be_true
|
55
55
|
end
|
56
56
|
|
57
|
+
describe '#inspect' do
|
58
|
+
it 'should always include db' do
|
59
|
+
opts = {:zkservers => 'localhost:1234'}
|
60
|
+
client = ClientStub.new(opts)
|
61
|
+
client.inspect.should match('<RedisFailover::Client \(db: 0,')
|
62
|
+
db = '5'
|
63
|
+
opts.merge!(:db => db)
|
64
|
+
client = ClientStub.new(opts)
|
65
|
+
client.inspect.should match("<RedisFailover::Client \\(db: #{db},")
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe '#call' do
|
70
|
+
it 'should dispatch :call messages to correct method' do
|
71
|
+
client.should_receive(:dispatch).with(:foo, *['key'])
|
72
|
+
client.call([:foo, 'key'])
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
57
76
|
context 'with :master_only false' do
|
58
77
|
it 'routes read operations to a slave' do
|
59
78
|
called = false
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nogara-redis_failover
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redis
|
@@ -75,7 +75,7 @@ dependencies:
|
|
75
75
|
version: 1.7.4
|
76
76
|
- - <
|
77
77
|
- !ruby/object:Gem::Version
|
78
|
-
version: '1.
|
78
|
+
version: '1.9'
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
81
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -86,7 +86,7 @@ dependencies:
|
|
86
86
|
version: 1.7.4
|
87
87
|
- - <
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '1.
|
89
|
+
version: '1.9'
|
90
90
|
- !ruby/object:Gem::Dependency
|
91
91
|
name: rake
|
92
92
|
requirement: !ruby/object:Gem::Requirement
|
@@ -215,7 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
215
215
|
version: '0'
|
216
216
|
requirements: []
|
217
217
|
rubyforge_project:
|
218
|
-
rubygems_version: 1.8.
|
218
|
+
rubygems_version: 1.8.25
|
219
219
|
signing_key:
|
220
220
|
specification_version: 3
|
221
221
|
summary: redis_failover is a ZooKeeper-based automatic master/slave failover solution
|