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
         |