redis_failover 0.9.7.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 == :syncing
53
+ node_manager.state_for(node).should == :available
54
54
  end
55
55
  end
56
56
  end
@@ -1,4 +1,5 @@
1
1
  require 'rspec'
2
+ require 'ostruct'
2
3
  require 'redis_failover'
3
4
 
4
5
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
@@ -17,4 +18,4 @@ end
17
18
  def ZK.new(*args); NullObject.new; end
18
19
 
19
20
  RSpec.configure do |config|
20
- end
21
+ end
@@ -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
- notify_state(node, :unavailable)
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
- notify_state(node, :available)
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
- notify_state(node, :syncing)
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 initialize_path; end
62
- def delete_path; end
63
- def create_path; end
64
- def write_state; end
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.9.7.2
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-04 00:00:00.000000000 Z
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.6'
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.6'
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: 2936148649522258695
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: 2936148649522258695
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