zeevex_cluster 0.3.0 → 0.3.1
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/lib/zeevex_cluster/coordinator/mysql.rb +1 -0
- data/lib/zeevex_cluster/election.rb +20 -2
- data/lib/zeevex_cluster/strategy/cas.rb +16 -2
- data/lib/zeevex_cluster/strategy/static.rb +13 -0
- data/lib/zeevex_cluster/strategy/zookeeper.rb +13 -0
- data/lib/zeevex_cluster/version.rb +1 -1
- data/script/observe.rb +49 -0
- metadata +3 -2
@@ -25,6 +25,10 @@ module ZeevexCluster
|
|
25
25
|
after_initialize
|
26
26
|
end
|
27
27
|
|
28
|
+
def strategy
|
29
|
+
@strategy
|
30
|
+
end
|
31
|
+
|
28
32
|
def master?
|
29
33
|
member? && @strategy.am_i_master?
|
30
34
|
end
|
@@ -60,7 +64,7 @@ module ZeevexCluster
|
|
60
64
|
## Return name of master node
|
61
65
|
##
|
62
66
|
def master
|
63
|
-
|
67
|
+
can_view? && @strategy.master_node && @strategy.master_node[:nodename]
|
64
68
|
end
|
65
69
|
|
66
70
|
def join
|
@@ -82,7 +86,21 @@ module ZeevexCluster
|
|
82
86
|
end
|
83
87
|
|
84
88
|
def members
|
85
|
-
|
89
|
+
can_view? && (@strategy.respond_to?(:members) ? @strategy.members : [@nodename])
|
90
|
+
end
|
91
|
+
|
92
|
+
def can_view?
|
93
|
+
member? || observing? || @strategy.respond_to?(:can_view?) ? @strategy.can_view? : false
|
94
|
+
end
|
95
|
+
|
96
|
+
def observing?
|
97
|
+
# TODO: make this smarter
|
98
|
+
@strategy.respond_to?(:observing?) ? @strategy.observing? : true
|
99
|
+
end
|
100
|
+
|
101
|
+
def observe
|
102
|
+
@strategy.observe
|
103
|
+
{:master => master, :members => members}
|
86
104
|
end
|
87
105
|
|
88
106
|
protected
|
@@ -39,8 +39,6 @@ class ZeevexCluster::Strategy::Cas < ZeevexCluster::Strategy::Base
|
|
39
39
|
@current_master && @current_master[:nodename]
|
40
40
|
end
|
41
41
|
|
42
|
-
|
43
|
-
|
44
42
|
class StopException < StandardError; end
|
45
43
|
|
46
44
|
def start
|
@@ -121,6 +119,22 @@ class ZeevexCluster::Strategy::Cas < ZeevexCluster::Strategy::Base
|
|
121
119
|
members
|
122
120
|
end
|
123
121
|
|
122
|
+
def can_view?
|
123
|
+
true
|
124
|
+
end
|
125
|
+
|
126
|
+
def observing?
|
127
|
+
true
|
128
|
+
end
|
129
|
+
|
130
|
+
#
|
131
|
+
# grab a snapshot of the cluster
|
132
|
+
#
|
133
|
+
def observe
|
134
|
+
token = server.get(key)
|
135
|
+
@current_master = qualifies_for_master?(token) ? token : nil
|
136
|
+
end
|
137
|
+
|
124
138
|
protected
|
125
139
|
|
126
140
|
def spin
|
@@ -67,6 +67,19 @@ module ZeevexCluster::Strategy
|
|
67
67
|
[@namespace, @cluster_name].reject {|x| x.nil? || x.empty? }.join(':')
|
68
68
|
end
|
69
69
|
|
70
|
+
def observe
|
71
|
+
return true if @state == :started
|
72
|
+
raise NotImplementedError, "Can't observe zookeeper cluster yet"
|
73
|
+
end
|
74
|
+
|
75
|
+
def observing?
|
76
|
+
@state == :started
|
77
|
+
end
|
78
|
+
|
79
|
+
def can_view?
|
80
|
+
observing?
|
81
|
+
end
|
82
|
+
|
70
83
|
protected
|
71
84
|
|
72
85
|
def setup
|
data/script/observe.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$: << File.join(File.dirname(__FILE__), "../lib")
|
3
|
+
require 'rubygems'
|
4
|
+
require 'pry'
|
5
|
+
require 'zeevex_cluster'
|
6
|
+
|
7
|
+
ctype = ARGV[0] || 'memcached'
|
8
|
+
strategy_type = 'cas'
|
9
|
+
|
10
|
+
backend_options = case ctype
|
11
|
+
when 'memcached' then {:server => '127.0.0.1', :port => 11212}
|
12
|
+
when 'dalli' then {:server => '127.0.0.1', :port => 11211}
|
13
|
+
|
14
|
+
when 'redis' then {:server => '127.0.0.1', :port => 6379}
|
15
|
+
when 'mysql' then {:server => '127.0.0.1', :port => 3306,
|
16
|
+
:coordinator_options => {
|
17
|
+
:namespace => 'cmdlinetest',
|
18
|
+
:username => 'zcluster',
|
19
|
+
:password => 'zclusterp',
|
20
|
+
:database => 'zcluster'}
|
21
|
+
}
|
22
|
+
when 'zookeeper'
|
23
|
+
strategy_type = 'zookeeper'
|
24
|
+
{:reconnect => true}
|
25
|
+
else raise 'Must be memcached or redis or mysql'
|
26
|
+
end.
|
27
|
+
merge({:coordinator_type => ctype})
|
28
|
+
|
29
|
+
$c = ZeevexCluster::Election.new :backend_options => backend_options,
|
30
|
+
:cluster_name => 'foobs',
|
31
|
+
:strategy_type => strategy_type,
|
32
|
+
:nodename => "#{Socket.gethostname}:#{`tty`.chomp}",
|
33
|
+
:logger => Logger.new(STDOUT),
|
34
|
+
:autojoin => false,
|
35
|
+
:hooks => {:status_change => lambda {|who, news, olds, *rest|
|
36
|
+
puts "MSC! #{news} #{olds}"} }
|
37
|
+
|
38
|
+
Pry.config.prompt = Pry::DEFAULT_PROMPT.clone
|
39
|
+
Pry.config.prompt[0] = proc do |target_self, nest_level, pry|
|
40
|
+
cstatus = case true
|
41
|
+
when $c.master? then "MASTER"
|
42
|
+
when $c.member? then "member"
|
43
|
+
else "offline"
|
44
|
+
end
|
45
|
+
mcount = $c.member? && $c.members ? $c.members.count : 0
|
46
|
+
"[#{pry.input_array.size}] #{cstatus}[#{mcount}] pry(#{Pry.view_clip(target_self)})#{":#{nest_level}" unless nest_level.zero?}> "
|
47
|
+
end
|
48
|
+
|
49
|
+
binding.pry
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zeevex_cluster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
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-08-
|
12
|
+
date: 2013-08-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: state_machine
|
@@ -262,6 +262,7 @@ files:
|
|
262
262
|
- script/election.rb
|
263
263
|
- script/memc.rb
|
264
264
|
- script/mysql.rb
|
265
|
+
- script/observe.rb
|
265
266
|
- script/redis.rb
|
266
267
|
- script/repl
|
267
268
|
- script/repl.rb
|