zeevex_cluster 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -143,6 +143,7 @@ module ZeevexCluster::Coordinator
143
143
  row = do_get_first key
144
144
  return nil if row.nil?
145
145
 
146
+ binding.pry
146
147
  if !is_raw?(options)
147
148
  deserialize_value(row[:value])
148
149
  else
@@ -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
- member? && @strategy.master_node && @strategy.master_node[:nodename]
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
- member? && (@strategy.respond_to?(:members) ? @strategy.members : [@nodename])
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
@@ -51,5 +51,18 @@ module ZeevexCluster::Strategy
51
51
  true
52
52
  end
53
53
 
54
+ def observing?
55
+ true
56
+ end
57
+
58
+ def can_view?
59
+ true
60
+ end
61
+
62
+ def observe
63
+ true
64
+ end
65
+
66
+
54
67
  end
55
68
  end
@@ -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
@@ -1,3 +1,3 @@
1
1
  module ZeevexCluster
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
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.0
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 00:00:00.000000000 Z
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