redis_failover 0.9.7.2 → 1.0.0
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 +14 -0
- data/README.md +57 -20
- 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 +25 -10
- 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 +419 -144
- 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 +13 -13
- data/lib/redis_failover/util.rb +12 -4
- 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 +35 -8
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: redis_failover
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
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-10-
|
12
|
+
date: 2012-10-12 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
|
@@ -189,7 +209,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
189
209
|
version: '0'
|
190
210
|
segments:
|
191
211
|
- 0
|
192
|
-
hash:
|
212
|
+
hash: 87105057959996156
|
193
213
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
194
214
|
none: false
|
195
215
|
requirements:
|
@@ -198,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
198
218
|
version: '0'
|
199
219
|
segments:
|
200
220
|
- 0
|
201
|
-
hash:
|
221
|
+
hash: 87105057959996156
|
202
222
|
requirements: []
|
203
223
|
rubyforge_project:
|
204
224
|
rubygems_version: 1.8.23
|
@@ -209,8 +229,15 @@ summary: redis_failover is a ZooKeeper-based automatic master/slave failover sol
|
|
209
229
|
test_files:
|
210
230
|
- spec/cli_spec.rb
|
211
231
|
- spec/client_spec.rb
|
232
|
+
- spec/failover_strategy/latency_spec.rb
|
233
|
+
- spec/failover_strategy_spec.rb
|
212
234
|
- spec/node_manager_spec.rb
|
235
|
+
- spec/node_snapshot_spec.rb
|
213
236
|
- spec/node_spec.rb
|
237
|
+
- spec/node_strategy/consensus_spec.rb
|
238
|
+
- spec/node_strategy/majority_spec.rb
|
239
|
+
- spec/node_strategy/single_spec.rb
|
240
|
+
- spec/node_strategy_spec.rb
|
214
241
|
- spec/node_watcher_spec.rb
|
215
242
|
- spec/spec_helper.rb
|
216
243
|
- spec/support/config/multiple_environments.yml
|