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.
@@ -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