nogara-redis_failover 0.9.7 → 0.9.7.2
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.
- data/Changes.md +17 -0
- data/README.md +44 -18
- data/examples/config.yml +3 -0
- data/lib/redis_failover.rb +4 -1
- data/lib/redis_failover/cli.rb +25 -2
- data/lib/redis_failover/client.rb +18 -11
- data/lib/redis_failover/errors.rb +0 -4
- data/lib/redis_failover/failover_strategy.rb +25 -0
- data/lib/redis_failover/failover_strategy/latency.rb +21 -0
- data/lib/redis_failover/manual_failover.rb +16 -4
- data/lib/redis_failover/node.rb +2 -1
- data/lib/redis_failover/node_manager.rb +408 -138
- data/lib/redis_failover/node_snapshot.rb +81 -0
- data/lib/redis_failover/node_strategy.rb +34 -0
- data/lib/redis_failover/node_strategy/consensus.rb +18 -0
- data/lib/redis_failover/node_strategy/majority.rb +18 -0
- data/lib/redis_failover/node_strategy/single.rb +17 -0
- data/lib/redis_failover/node_watcher.rb +22 -14
- data/lib/redis_failover/util.rb +2 -2
- data/lib/redis_failover/version.rb +1 -1
- data/redis_failover.gemspec +1 -1
- data/spec/failover_strategy/latency_spec.rb +41 -0
- data/spec/failover_strategy_spec.rb +17 -0
- data/spec/node_snapshot_spec.rb +30 -0
- data/spec/node_strategy/consensus_spec.rb +30 -0
- data/spec/node_strategy/majority_spec.rb +22 -0
- data/spec/node_strategy/single_spec.rb +22 -0
- data/spec/node_strategy_spec.rb +22 -0
- data/spec/node_watcher_spec.rb +2 -2
- data/spec/spec_helper.rb +2 -1
- data/spec/support/node_manager_stub.rb +29 -8
- metadata +33 -6
data/spec/node_watcher_spec.rb
CHANGED
@@ -6,7 +6,7 @@ module RedisFailover
|
|
6
6
|
@node_states = {}
|
7
7
|
end
|
8
8
|
|
9
|
-
def notify_state(node, state)
|
9
|
+
def notify_state(node, state, latency = nil)
|
10
10
|
@node_states[node] = state
|
11
11
|
end
|
12
12
|
|
@@ -50,7 +50,7 @@ module RedisFailover
|
|
50
50
|
watcher.watch
|
51
51
|
sleep(3)
|
52
52
|
watcher.shutdown
|
53
|
-
node_manager.state_for(node).should == :
|
53
|
+
node_manager.state_for(node).should == :available
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -13,9 +13,11 @@ module RedisFailover
|
|
13
13
|
[master, slave].each { |node| node.extend(RedisStubSupport) }
|
14
14
|
master.make_master!
|
15
15
|
slave.make_slave!(master)
|
16
|
+
@nodes = [master, slave]
|
16
17
|
@unavailable = []
|
17
18
|
@master = master
|
18
19
|
@slaves = [slave]
|
20
|
+
@failover_strategy = Object.new
|
19
21
|
@nodes_discovered = true
|
20
22
|
end
|
21
23
|
|
@@ -33,34 +35,53 @@ module RedisFailover
|
|
33
35
|
end
|
34
36
|
|
35
37
|
def stop_processing
|
36
|
-
@queue << nil
|
37
38
|
@thread.value
|
38
39
|
end
|
39
40
|
|
40
41
|
def force_unavailable(node)
|
41
42
|
start_processing
|
42
43
|
node.redis.make_unavailable!
|
43
|
-
|
44
|
+
snapshot = OpenStruct.new(
|
45
|
+
:node => node,
|
46
|
+
:available_count => 0,
|
47
|
+
:unavailable_count => 1,
|
48
|
+
:node_managers => ['nm'])
|
49
|
+
update_master_state(node, node => snapshot)
|
44
50
|
stop_processing
|
45
51
|
end
|
46
52
|
|
47
53
|
def force_available(node)
|
48
54
|
start_processing
|
49
55
|
node.redis.make_available!
|
50
|
-
|
56
|
+
snapshot = OpenStruct.new(
|
57
|
+
:node => node,
|
58
|
+
:available_count => 1,
|
59
|
+
:unavailable_count => 0,
|
60
|
+
:node_managers => ['nm'])
|
61
|
+
update_master_state(node, node => snapshot)
|
51
62
|
stop_processing
|
52
63
|
end
|
53
64
|
|
54
65
|
def force_syncing(node, serve_stale_reads)
|
55
66
|
start_processing
|
56
67
|
node.redis.force_sync_with_master(serve_stale_reads)
|
57
|
-
|
68
|
+
snapshot = OpenStruct.new(
|
69
|
+
:node => node,
|
70
|
+
:available_count => 1,
|
71
|
+
:unavailable_count => 0,
|
72
|
+
:node_managers => ['nm'])
|
73
|
+
update_master_state(node, node => snapshot)
|
58
74
|
stop_processing
|
59
75
|
end
|
60
76
|
|
61
|
-
def
|
62
|
-
|
63
|
-
|
64
|
-
|
77
|
+
def failover_strategy_candidate(snapshots)
|
78
|
+
@slaves.pop
|
79
|
+
end
|
80
|
+
|
81
|
+
def delete_path(*args); end
|
82
|
+
def create_path(*args); end
|
83
|
+
def write_state(*args); end
|
84
|
+
def wait_until_master; end
|
85
|
+
def current_node_snapshots; {} end
|
65
86
|
end
|
66
87
|
end
|
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: 0.9.7
|
4
|
+
version: 0.9.7.2
|
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: 2012-
|
12
|
+
date: 2012-10-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redis
|
@@ -70,17 +70,23 @@ dependencies:
|
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
71
71
|
none: false
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.7.2
|
76
|
+
- - <
|
74
77
|
- !ruby/object:Gem::Version
|
75
|
-
version: '1.
|
78
|
+
version: '1.8'
|
76
79
|
type: :runtime
|
77
80
|
prerelease: false
|
78
81
|
version_requirements: !ruby/object:Gem::Requirement
|
79
82
|
none: false
|
80
83
|
requirements:
|
81
|
-
- -
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: 1.7.2
|
87
|
+
- - <
|
82
88
|
- !ruby/object:Gem::Version
|
83
|
-
version: '1.
|
89
|
+
version: '1.8'
|
84
90
|
- !ruby/object:Gem::Dependency
|
85
91
|
name: rake
|
86
92
|
requirement: !ruby/object:Gem::Requirement
|
@@ -153,9 +159,16 @@ files:
|
|
153
159
|
- lib/redis_failover/cli.rb
|
154
160
|
- lib/redis_failover/client.rb
|
155
161
|
- lib/redis_failover/errors.rb
|
162
|
+
- lib/redis_failover/failover_strategy.rb
|
163
|
+
- lib/redis_failover/failover_strategy/latency.rb
|
156
164
|
- lib/redis_failover/manual_failover.rb
|
157
165
|
- lib/redis_failover/node.rb
|
158
166
|
- lib/redis_failover/node_manager.rb
|
167
|
+
- lib/redis_failover/node_snapshot.rb
|
168
|
+
- lib/redis_failover/node_strategy.rb
|
169
|
+
- lib/redis_failover/node_strategy/consensus.rb
|
170
|
+
- lib/redis_failover/node_strategy/majority.rb
|
171
|
+
- lib/redis_failover/node_strategy/single.rb
|
159
172
|
- lib/redis_failover/node_watcher.rb
|
160
173
|
- lib/redis_failover/runner.rb
|
161
174
|
- lib/redis_failover/util.rb
|
@@ -164,8 +177,15 @@ files:
|
|
164
177
|
- redis_failover.gemspec
|
165
178
|
- spec/cli_spec.rb
|
166
179
|
- spec/client_spec.rb
|
180
|
+
- spec/failover_strategy/latency_spec.rb
|
181
|
+
- spec/failover_strategy_spec.rb
|
167
182
|
- spec/node_manager_spec.rb
|
183
|
+
- spec/node_snapshot_spec.rb
|
168
184
|
- spec/node_spec.rb
|
185
|
+
- spec/node_strategy/consensus_spec.rb
|
186
|
+
- spec/node_strategy/majority_spec.rb
|
187
|
+
- spec/node_strategy/single_spec.rb
|
188
|
+
- spec/node_strategy_spec.rb
|
169
189
|
- spec/node_watcher_spec.rb
|
170
190
|
- spec/spec_helper.rb
|
171
191
|
- spec/support/config/multiple_environments.yml
|
@@ -203,8 +223,15 @@ summary: redis_failover is a ZooKeeper-based automatic master/slave failover sol
|
|
203
223
|
test_files:
|
204
224
|
- spec/cli_spec.rb
|
205
225
|
- spec/client_spec.rb
|
226
|
+
- spec/failover_strategy/latency_spec.rb
|
227
|
+
- spec/failover_strategy_spec.rb
|
206
228
|
- spec/node_manager_spec.rb
|
229
|
+
- spec/node_snapshot_spec.rb
|
207
230
|
- spec/node_spec.rb
|
231
|
+
- spec/node_strategy/consensus_spec.rb
|
232
|
+
- spec/node_strategy/majority_spec.rb
|
233
|
+
- spec/node_strategy/single_spec.rb
|
234
|
+
- spec/node_strategy_spec.rb
|
208
235
|
- spec/node_watcher_spec.rb
|
209
236
|
- spec/spec_helper.rb
|
210
237
|
- spec/support/config/multiple_environments.yml
|