rabbitmq-cluster 0.0.9 → 0.0.10
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/bin/rabbitmq-cluster +1 -1
- data/bin/rabbitmq-cluster-sidekick +13 -0
- data/lib/rabbitmq/cluster/server.rb +15 -9
- data/lib/rabbitmq/cluster/version.rb +1 -1
- data/spec/unit/server_spec.rb +26 -14
- metadata +5 -3
data/bin/rabbitmq-cluster
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rabbitmq/cluster'
|
2
|
+
|
3
|
+
server = RabbitMQ::Cluster::Server.new(
|
4
|
+
RabbitMQManager.new('http://guest:guest@localhost:15672'),
|
5
|
+
RabbitMQ::Cluster::Etcd.new(
|
6
|
+
Etcd::Client.new(uri: ENV['ETCD_HOST'])
|
7
|
+
)
|
8
|
+
)
|
9
|
+
|
10
|
+
while true do
|
11
|
+
server.healthcheck
|
12
|
+
sleep 4
|
13
|
+
end
|
@@ -26,14 +26,12 @@ module RabbitMQ::Cluster
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def synchronize
|
29
|
-
|
30
|
-
|
29
|
+
remove_stopped_nodes if stopped_nodes.any?
|
30
|
+
join_cluster
|
31
|
+
end
|
31
32
|
|
32
|
-
|
33
|
-
|
34
|
-
system("rabbitmqctl forget_cluster_node #{node_name}")
|
35
|
-
end
|
36
|
-
end
|
33
|
+
def healthcheck
|
34
|
+
register if up?
|
37
35
|
end
|
38
36
|
|
39
37
|
def name
|
@@ -60,17 +58,25 @@ module RabbitMQ::Cluster
|
|
60
58
|
nodes(false)
|
61
59
|
end
|
62
60
|
|
61
|
+
def remove_stopped_nodes
|
62
|
+
etcd.aquire_lock do
|
63
|
+
stopped_nodes.each do |node_name|
|
64
|
+
system("rabbitmqctl forget_cluster_node #{node_name}")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
63
69
|
def nodes(running)
|
64
70
|
client.nodes.select { |n| n["running"] == running }.map { |n| n["name"] }.sort
|
65
71
|
end
|
66
72
|
|
67
73
|
def join_cluster
|
68
|
-
if !clustered? && nodes_to_join.any?
|
74
|
+
if !clustered? && nodes_to_join.any? && up?
|
69
75
|
`rabbitmqctl stop_app`
|
70
76
|
system("rabbitmqctl join_cluster #{nodes_to_join.first}")
|
71
77
|
`rabbitmqctl start_app`
|
78
|
+
register if up?
|
72
79
|
end
|
73
|
-
register if up?
|
74
80
|
end
|
75
81
|
|
76
82
|
def clustered?
|
data/spec/unit/server_spec.rb
CHANGED
@@ -70,7 +70,7 @@ describe RabbitMQ::Cluster::Server do
|
|
70
70
|
|
71
71
|
context 'waiting for the server to start' do
|
72
72
|
it 'waits until the server has started' do
|
73
|
-
expect(subject).to receive(:up?).exactly(
|
73
|
+
expect(subject).to receive(:up?).exactly(2).times.and_return(false, true)
|
74
74
|
subject.start
|
75
75
|
end
|
76
76
|
end
|
@@ -101,12 +101,6 @@ describe RabbitMQ::Cluster::Server do
|
|
101
101
|
expect(subject).to_not receive(:"`")
|
102
102
|
subject.start
|
103
103
|
end
|
104
|
-
|
105
|
-
it 'registers itself' do
|
106
|
-
allow(client).to receive(:overview).and_return('cluster_name' => 'rabbit@this_node')
|
107
|
-
subject.start
|
108
|
-
expect(etcd.nodes).to include('rabbit@this_node')
|
109
|
-
end
|
110
104
|
end
|
111
105
|
|
112
106
|
it 'tries to join the cluster' do
|
@@ -183,13 +177,6 @@ describe RabbitMQ::Cluster::Server do
|
|
183
177
|
allow(client).to receive(:overview).and_return("cluster_name" => "rabbit@this_node")
|
184
178
|
end
|
185
179
|
|
186
|
-
context 'the node is up' do
|
187
|
-
it 'registers the node' do
|
188
|
-
expect(etcd).to receive(:register).with('rabbit@this_node')
|
189
|
-
subject.synchronize
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
180
|
context 'the node is not up' do
|
194
181
|
before do
|
195
182
|
allow(client).to receive(:aliveness_test).and_return("status" => "agghghghgh")
|
@@ -228,6 +215,31 @@ describe RabbitMQ::Cluster::Server do
|
|
228
215
|
end
|
229
216
|
end
|
230
217
|
|
218
|
+
describe '#healthcheck' do
|
219
|
+
context 'the node is up' do
|
220
|
+
before do
|
221
|
+
allow(client).to receive(:aliveness_test).and_return("status" => "ok")
|
222
|
+
allow(client).to receive(:overview).and_return("cluster_name" => "rabbit@this_node")
|
223
|
+
end
|
224
|
+
|
225
|
+
it 'registers the node' do
|
226
|
+
expect(etcd).to receive(:register).with('rabbit@this_node')
|
227
|
+
subject.healthcheck
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
context 'the node is down' do
|
232
|
+
before do
|
233
|
+
allow(client).to receive(:aliveness_test).and_return("status" => "i am really broken")
|
234
|
+
end
|
235
|
+
|
236
|
+
it 'registers the node' do
|
237
|
+
expect(etcd).to_not receive(:register)
|
238
|
+
subject.healthcheck
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
231
243
|
end
|
232
244
|
|
233
245
|
class FakeEtcd
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rabbitmq-cluster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -112,6 +112,7 @@ email:
|
|
112
112
|
- ed.robinson@reevoo.com
|
113
113
|
executables:
|
114
114
|
- rabbitmq-cluster
|
115
|
+
- rabbitmq-cluster-sidekick
|
115
116
|
extensions: []
|
116
117
|
extra_rdoc_files: []
|
117
118
|
files:
|
@@ -121,6 +122,7 @@ files:
|
|
121
122
|
- README.md
|
122
123
|
- Rakefile
|
123
124
|
- bin/rabbitmq-cluster
|
125
|
+
- bin/rabbitmq-cluster-sidekick
|
124
126
|
- lib/rabbitmq/cluster.rb
|
125
127
|
- lib/rabbitmq/cluster/etcd.rb
|
126
128
|
- lib/rabbitmq/cluster/server.rb
|
@@ -144,7 +146,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
144
146
|
version: '0'
|
145
147
|
segments:
|
146
148
|
- 0
|
147
|
-
hash:
|
149
|
+
hash: -240540097057601169
|
148
150
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
149
151
|
none: false
|
150
152
|
requirements:
|
@@ -153,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
153
155
|
version: '0'
|
154
156
|
segments:
|
155
157
|
- 0
|
156
|
-
hash:
|
158
|
+
hash: -240540097057601169
|
157
159
|
requirements: []
|
158
160
|
rubyforge_project:
|
159
161
|
rubygems_version: 1.8.25
|