mysql-pause 0.1.7 → 0.1.8

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.
@@ -29,6 +29,8 @@ ARGV.options do |parser|
29
29
  parser.on('-n', '--threads=SIZE' ) {|v| options[:threads] = v.to_i }
30
30
  parser.on('-W', '--working-dir=DIR' ) {|v| options[:working_dir] = v }
31
31
  parser.on('-S', '--socket=SOCK_FILE' ) {|v| options[:socket] = v }
32
+ parser.on('', '--ping-user=USER' ) {|v| options[:ping_user] = v }
33
+ parser.on('', '--ping-pass=PASS' ) {|v| options[:ping_pass] = v }
32
34
  parser.on('', '--debug' ) { options[:debug] = true }
33
35
 
34
36
  help_and_exit = lambda do |v|
@@ -4,22 +4,43 @@ module MysqlPause
4
4
  class Backend < EM::Connection
5
5
  def initialize(proxy)
6
6
  @proxy = proxy
7
+ @logger = proxy.logger
7
8
  end
8
9
 
9
10
  def post_init
10
- if @proxy.options[:debug]
11
- @proxy.logger.debug("backend: connect")
11
+ if (peername = get_peername)
12
+ @connect_from = Socket.unpack_sockaddr_in(peername)
13
+ end
14
+
15
+ if @proxy and @proxy.options[:debug]
16
+ port, ip = @connect_from
17
+ @logger.debug("backend: connect from #{ip}:#{port}")
12
18
  end
13
19
  end
14
20
 
15
21
  def unbind
16
- if @proxy.options[:debug]
17
- @proxy.logger.debug("backend: unbind")
22
+ if @proxy and @proxy.options[:debug]
23
+ port, ip = @connect_from
24
+ @logger.debug("backend: unbind connection from #{ip}:#{port}")
18
25
  end
19
26
  end
20
27
 
21
28
  def receive_data(data)
22
- @proxy.send_data(data)
29
+ if not @proxy or @proxy.error?
30
+ @logger.info("backend: proxy connection error: #{data.inspect}")
31
+ close_proxy_connection
32
+ close_connection_after_writing
33
+ else
34
+ @proxy.send_data(data)
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def close_proxy_connection
41
+ @proxy.close_connection if @proxy
42
+ rescue Exception => e
43
+ @logger.warn("#{e.class.name}: #{e.message}")
23
44
  end
24
- end
25
- end
45
+ end # Backend
46
+ end # MysqlPause
@@ -1,2 +1,2 @@
1
1
  APP_NAME = 'mysql-pause'
2
- Version = '0.1.7'
2
+ Version = '0.1.8'
@@ -3,6 +3,7 @@ require 'mysql-pause/backend'
3
3
  require 'mysql-pause/error'
4
4
  require 'logger'
5
5
  require 'socket'
6
+ require 'mysql2/em'
6
7
 
7
8
  module MysqlPause
8
9
  RETRY_LIMIT = 100
@@ -39,14 +40,22 @@ module MysqlPause
39
40
  end
40
41
 
41
42
  def post_init
43
+ if (peername = get_peername)
44
+ @connect_from = Socket.unpack_sockaddr_in(peername)
45
+ end
46
+
42
47
  if @options[:debug]
43
- @logger.debug("proxy: connect")
48
+ port, ip = @connect_from
49
+ @logger.debug("proxy: connect from #{ip}:#{port}")
44
50
  end
45
51
  end
46
52
 
47
53
  def unbind
54
+ close_backend_connection
55
+
48
56
  if @options[:debug]
49
- @logger.debug("proxy: unbind")
57
+ port, ip = @connect_from
58
+ @logger.debug("proxy: unbind connection from #{ip}:#{port}")
50
59
  end
51
60
  end
52
61
 
@@ -59,7 +68,7 @@ module MysqlPause
59
68
  end
60
69
 
61
70
  if @backend.error?
62
- @logger.info("backend error: #{data.inspect}")
71
+ @logger.info("proxy: backend connection error: #{data.inspect}")
63
72
  close_backend_connection
64
73
 
65
74
  payload_length, sequence_id = parse_mysql_packet(data)
@@ -89,9 +98,33 @@ module MysqlPause
89
98
  end
90
99
 
91
100
  def ping(addr, port)
92
- sock = TCPSocket.open(addr, port)
93
- sock.close
101
+ mysqld_is_alive = false
102
+ client = nil
103
+
104
+ begin
105
+ client = Mysql2::EM::Client.new(:host => addr, :port => port, :username => @options[:ping_user], :password => @options[:ping_pass])
106
+ mysqld_is_alive = client.ping
107
+ rescue Exception => e
108
+ @logger.warn("#{e.class.name}: #{e.message}")
109
+ mysqld_is_alive = false
110
+ ensure
111
+ begin
112
+ client.close if client
113
+ rescue Exception => e
114
+ @logger.warn("#{e.class.name}: #{e.message}")
115
+ end
116
+ end
117
+
118
+ return mysqld_is_alive
94
119
  end
95
120
 
121
+ def connect_from
122
+ return @connect_from if @connect_from
123
+
124
+ peername = get_peername
125
+ return nil unless peername
126
+
127
+ @connect_from = Socket.unpack_sockaddr_in(peername)
128
+ end
96
129
  end # Proxy
97
130
  end # MysqlPause
@@ -21,9 +21,11 @@ module MysqlPause
21
21
 
22
22
  def run
23
23
  @@control_options = {
24
- :pause => false,
25
- :interval => @@options[:interval],
26
- :debug => @@options[:debug],
24
+ :pause => false,
25
+ :interval => @@options[:interval],
26
+ :debug => @@options[:debug],
27
+ :ping_user => @@options[:ping_user],
28
+ :ping_pass => @@options[:ping_pass],
27
29
  }
28
30
 
29
31
  # start DRb
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mysql-pause
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
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-05-27 00:00:00.000000000 Z
12
+ date: 2013-07-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: eventmachine
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  version: 1.5.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: mysql2
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
46
62
  description:
47
63
  email: sgwr_dts@yahoo.co.jp
48
64
  executables: