galerab 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,44 +16,42 @@ end
16
16
 
17
17
 
18
18
  puts "[#{Process.pid}] galerab starting with config file at #{ARGV[1]}"
19
+ configuration = Configuration.new(path)
20
+ conf = configuration.conf
21
+ backend = Backend.new(conf)
19
22
 
20
- confs = Configuration.new(path).conf
23
+ balancer = fork { BalancingProxy::Server.run(backend) }
21
24
 
22
- confs.each do |conf|
23
- backend = Backend.new(conf[1])
24
- conf = conf[1]
25
-
26
- fork do
27
- t = Thread.new do
28
- while true
29
- # Here we check if the backend is ready
30
- next_backend = backend.get_next
31
- puts "\nChecking if (wsrep_ready == ON) #{next_backend}\n"
32
-
33
- begin
34
- Sequel.connect(
35
- "mysql://#{conf["user"]}:#{conf["password"]}@#{next_backend}/#{conf["database"]}"
36
- ).fetch("show status like 'wsrep_ready'") do |row|
37
- #row[:Value] = "OFF"
38
- if row[:Value] == "OFF"
39
- puts "#{next_backend} is not ready"
40
- backend.not_ready.push(next_backend) unless backend.not_ready.include?(next_backend)
41
- elsif row[:Value] == "ON"
42
- puts "#{next_backend} is ready"
43
- backend.not_ready.delete(next_backend) if backend.not_ready
44
- end
25
+ checker = fork do
26
+ while true
27
+ # Here we check if the backend is ready
28
+ next_backend = backend.get_next
29
+ puts "\nChecking if (wsrep_ready == ON) #{next_backend}\n"
30
+
31
+ if next_backend
32
+ begin
33
+ connection = Sequel.connect(
34
+ "mysql://#{conf["user"]}:#{conf["password"]}@#{next_backend}/#{conf["database"]}"
35
+ ).fetch("show status like 'wsrep_ready'") do |row|
36
+
37
+ if row[:Value] == "OFF"
38
+ puts "#{next_backend} is not ready"
39
+ configuration.remove_backend(next_backend)
40
+ Process.kill(:SIGHUP, balancer)
41
+ elsif row[:Value] == "ON"
42
+ puts "#{next_backend} is ready"
43
+ configuration.add_backend(next_backend)
44
+ Process.kill(:SIGHUP, balancer)
45
45
  end
46
- rescue
47
- puts "#{next_backend} is not ready"
48
- backend.not_ready.push(next_backend) unless backend.not_ready.include?(next_backend)
49
46
  end
50
-
51
- sleep conf["check_every"]
47
+ rescue Exception => msg
48
+ puts "#{next_backend} is not ready #{msg}"
49
+ configuration.remove_backend(next_backend)
50
+ Process.kill(:SIGHUP, balancer)
52
51
  end
53
52
  end
54
53
 
55
- t.join
56
- BalancingProxy::Server.run(backend)
54
+ sleep conf["check_every"]
57
55
  end
58
56
  end
59
57
 
@@ -63,5 +61,6 @@ trap (:SIGHUP) do
63
61
  $stdout.puts backend.conf["balancer_ports"].inspect
64
62
  end
65
63
 
66
- # release child processes before exit
67
- confs.each { |conf| Process.wait }
64
+ Process.waitpid2(checker)
65
+ Process.waitpid2(balancer)
66
+ #connection = Sequel.connect("mysql://root:root@192.168.2.11/mysql").fetch("show status like 'wsrep_ready'") {puts row[:Value]}
@@ -1,17 +1,7 @@
1
- 1:
2
- backends: ["localhost"]
3
- check_every: 10
4
- user: root
5
- password: root
6
- database: mysql
7
- balancer_port: 3307
8
- backend_port: 3306
9
-
10
- 2:
11
- backends: ["192.168.1.11"]
12
- check_every: 10
13
- user: root
14
- password: root
15
- database: mysql
16
- balancer_port: 3308
17
- backend_port: 3306
1
+ backends: ["192.168.2.11"]
2
+ check_every: 3
3
+ user: root
4
+ password: root
5
+ database: mysql
6
+ balancer_port: 3308
7
+ backend_port: 3306
@@ -3,5 +3,16 @@ class Configuration
3
3
 
4
4
  def initialize(path)
5
5
  @conf = YAML.load_file(path)
6
+ @path = path
7
+ end
8
+
9
+ def remove_backend(address)
10
+ @conf['backends'].delete(address)
11
+ File.open(@path, 'w+') {|f| f.write(@conf.to_yaml) }
12
+ end
13
+
14
+ def add_backend(address)
15
+ @conf['backends'] << address unless @conf['backends'].include?(address)
16
+ File.open(@path, 'w+') {|f| f.write(@conf.to_yaml) }
6
17
  end
7
18
  end
@@ -2,15 +2,5 @@ class Proxy
2
2
  def self.stop
3
3
  puts "Terminating ProxyServer"
4
4
  EventMachine.stop
5
- end
6
-
7
- # this is not used
8
- def self.kill_childs(servers, signal)
9
- servers.each do |server|
10
- puts "Killing process #{server[:pid]} with #{signal} signal."
11
- Process.kill(signal, server[:pid])
12
- end
13
-
14
- Process.kill(signal, Process.pid)
15
- end
5
+ end
16
6
  end
@@ -1,41 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Configuration do
4
- before(:each) do
5
- @conf = Configuration.new(ENV['GALERAB_CONFIG_PATH']).conf
6
- end
7
-
8
- context "when loading the file" do
9
- it "should load the YAML file" do
10
- @conf.should be_true
11
- end
12
-
13
- it "should find two balancers in the config file" do
14
- @conf.size.should be == 2
15
- end
16
-
17
- it "gets the backends for balancer 1" do
18
- @conf[1]['backends'].size.should be == 3
19
- @conf[1]['backends'][0].should be == "192.168.10.101"
20
- @conf[1]['backends'][1].should be == "192.168.10.102"
21
- @conf[1]['backends'][2].should be == "192.168.10.103"
22
- end
23
-
24
- it "loads the other parameters" do
25
- @conf[1]['check_every'].size.should be == 8
26
- @conf[1]['user'].should be == "your_user"
27
- @conf[1]['password'].should be == "your_password"
28
- @conf[1]['database'].should be == "your_db"
29
- @conf[1]['balancer_port'].should be == 3307
30
- @conf[1]['backend_port'].should be == 3306
31
- end
32
- end
33
- end
34
-
35
3
  describe Backend do
36
4
  before(:each) do
37
- @conf = Configuration.new(ENV['GALERAB_CONFIG_PATH']).conf.first
38
- @backend = Backend.new(@conf[1])
5
+ @conf = Configuration.new(ENV['GALERAB_CONFIG_PATH'] + '/galerab.yml').conf
6
+ @backend = Backend.new(@conf)
39
7
  end
40
8
 
41
9
  context "round robin load balancing" do
@@ -1,8 +1,8 @@
1
- require 'spec_helper'
2
-
3
1
  describe Configuration do
4
2
  before(:each) do
5
- @conf = Configuration.new(ENV['GALERAB_CONFIG_PATH']).conf
3
+ %x[cp #{ENV['GALERAB_CONFIG_PATH'] + '/galerab.yml.backup'} #{ENV['GALERAB_CONFIG_PATH'] + '/galerab.yml'}]
4
+ @configuration = Configuration.new(ENV['GALERAB_CONFIG_PATH'] + '/galerab.yml')
5
+ @conf = @configuration.conf
6
6
  end
7
7
 
8
8
  context "when loading the file" do
@@ -10,24 +10,39 @@ describe Configuration do
10
10
  @conf.should be_true
11
11
  end
12
12
 
13
- it "should find two balancers in the config file" do
14
- @conf.size.should be == 2
15
- end
16
-
17
13
  it "gets the backends for balancer 1" do
18
- @conf[1]['backends'].size.should be == 3
19
- @conf[1]['backends'][0].should be == "192.168.10.101"
20
- @conf[1]['backends'][1].should be == "192.168.10.102"
21
- @conf[1]['backends'][2].should be == "192.168.10.103"
14
+ @conf['backends'].size.should be == 3
15
+ @conf['backends'][0].should be == "192.168.10.101"
16
+ @conf['backends'][1].should be == "192.168.10.102"
17
+ @conf['backends'][2].should be == "192.168.10.103"
22
18
  end
23
19
 
24
20
  it "loads the other parameters" do
25
- @conf[1]['check_every'].size.should be == 8
26
- @conf[1]['user'].should be == "your_user"
27
- @conf[1]['password'].should be == "your_password"
28
- @conf[1]['database'].should be == "your_db"
29
- @conf[1]['balancer_port'].should be == 3307
30
- @conf[1]['backend_port'].should be == 3306
21
+ @conf['check_every'].size.should be == 8
22
+ @conf['user'].should be == "your_user"
23
+ @conf['password'].should be == "your_password"
24
+ @conf['database'].should be == "your_db"
25
+ @conf['balancer_port'].should be == 3307
26
+ @conf['backend_port'].should be == 3306
31
27
  end
32
28
  end
33
- end
29
+
30
+ it "should remove a backend from the config file" do
31
+ @configuration.remove_backend("192.168.10.103")
32
+ @conf = @configuration.conf
33
+ @conf['backends'].should_not include("192.168.10.103")
34
+ end
35
+
36
+ it "should add a backend to the config file" do
37
+ @configuration.remove_backend("192.168.10.103") # make sure there is not that address
38
+ @configuration.add_backend("192.168.10.103")
39
+ @conf = @configuration.conf
40
+ @conf['backends'].should include("192.168.10.103")
41
+ end
42
+
43
+ it "should not add another backend if it is already in the list" do
44
+ @conf['backends'].size.should be == 3
45
+ @configuration.add_backend("192.168.10.103")
46
+ @conf['backends'].size.should be == 3
47
+ end
48
+ end
@@ -1,5 +1,5 @@
1
1
  require 'rspec'
2
- ENV['GALERAB_CONFIG_PATH'] = File.dirname(__FILE__) + '/galerab.yml'
2
+ ENV['GALERAB_CONFIG_PATH'] = File.dirname(__FILE__)
3
3
  require 'galerab'
4
4
 
5
5
  RSpec.configure do |config|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: galerab
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: