ar_mysql_flexmaster 0.4.4 → 0.5.0

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.
@@ -1,34 +1,22 @@
1
- require 'bundler/setup'
2
- require 'mysql2'
3
- require 'test/unit/assertions'
1
+ require_relative "../integration_helper"
4
2
 
5
- include Test::Unit::Assertions
6
- require_relative '../boot_mysql_env'
7
- master_cut_script = File.expand_path(File.dirname(__FILE__)) + "/../../bin/master_cut"
3
+ class ThereAndBackAgain < Minitest::Test
4
+ def test_there_and_back
5
+ $mysql_master.connection.query("set GLOBAL READ_ONLY=0")
6
+ $mysql_slave.connection.query("set GLOBAL READ_ONLY=1")
8
7
 
9
- $mysql_master.connection.query("set GLOBAL READ_ONLY=0")
10
- $mysql_slave.connection.query("set GLOBAL READ_ONLY=1")
8
+ puts "testing first cutover..."
11
9
 
12
- def assert_ro(cx, str, bool)
13
- expected = bool ? 1 : 0
14
- if expected != cx.query("select @@read_only as ro").first['ro']
15
- $stderr.puts("#{str} is #{bool ? 'read-write' : 'read-only'} but I expected otherwise!")
16
- exit 1
17
- end
18
- end
19
- puts "testing first cutover..."
20
-
21
- system "#{master_cut_script} 127.0.0.1:#{$mysql_master.port} 127.0.0.1:#{$mysql_slave.port} root -p '' -r -s"
22
- assert_ro($mysql_master.connection, 'original master', true)
23
- assert_ro($mysql_slave.connection, 'original slave', false)
24
-
25
- assert "Yes" == $mysql_master.connection.query("show slave status").first['Slave_IO_Running']
10
+ system "#{master_cut_script} 127.0.0.1:#{$mysql_master.port} 127.0.0.1:#{$mysql_slave.port} root -p '' -r -s"
11
+ assert_ro($mysql_master.connection, 'original master', true)
12
+ assert_ro($mysql_slave.connection, 'original slave', false)
26
13
 
27
- system "#{master_cut_script} 127.0.0.1:#{$mysql_slave.port} 127.0.0.1:#{$mysql_master.port} root -p '' -r"
28
- assert_ro($mysql_master.connection, 'original master', false)
29
- assert_ro($mysql_slave.connection, 'original slave', true)
14
+ assert "Yes" == $mysql_master.connection.query("show slave status").first['Slave_IO_Running']
30
15
 
31
- assert "No" == $mysql_slave.connection.query("show slave status").first['Slave_IO_Running']
32
-
33
- puts "everything went real nice."
16
+ system "#{master_cut_script} 127.0.0.1:#{$mysql_slave.port} 127.0.0.1:#{$mysql_master.port} root -p '' -r"
17
+ assert_ro($mysql_master.connection, 'original master', false)
18
+ assert_ro($mysql_slave.connection, 'original slave', true)
34
19
 
20
+ assert "No" == $mysql_slave.connection.query("show slave status").first['Slave_IO_Running']
21
+ end
22
+ end
@@ -1,37 +1,27 @@
1
- require 'bundler/setup'
2
- require 'mysql2'
3
- require_relative '../boot_mysql_env'
4
- master_cut_script = File.expand_path(File.dirname(__FILE__)) + "/../../bin/master_cut"
5
-
6
- puts "testing with long running queries..."
7
-
8
- $mysql_master.connection.query("set GLOBAL READ_ONLY=0")
9
- $mysql_slave.connection.query("set GLOBAL READ_ONLY=1")
10
- $mysql_master.connection.send(:reconnect=, true)
11
- $mysql_slave.connection.send(:reconnect=, true)
12
-
13
- thread = Thread.new {
14
- begin
15
- $mysql_master.connection.query("update flexmaster_test.users set name=sleep(600)")
16
- puts "Query did not get killed! Bad."
17
- exit 1
18
- rescue Exception => e
19
- puts e
1
+ require_relative "../integration_helper"
2
+ class WithKillableQueries < Minitest::Test
3
+ def test_with_queries_to_be_killed
4
+ puts "testing with long running queries..."
5
+
6
+ $mysql_master.connection.query("set GLOBAL READ_ONLY=0")
7
+ $mysql_slave.connection.query("set GLOBAL READ_ONLY=1")
8
+
9
+ thread = Thread.new {
10
+ begin
11
+ $mysql_master.connection.query("update flexmaster_test.users set name=sleep(600)")
12
+ assert false, "Query did not get killed! Bad."
13
+ exit 1
14
+ rescue Exception => e
15
+ puts e
16
+ end
17
+ }
18
+
19
+ system "#{master_cut_script} 127.0.0.1:#{$mysql_master.port} 127.0.0.1:#{$mysql_slave.port} root -p ''"
20
+
21
+ thread.join
22
+
23
+ $mysql_master.reconnect!
24
+ assert_ro($mysql_master.connection, 'master', true)
25
+ assert_ro($mysql_slave.connection, 'slave', false)
20
26
  end
21
- }
22
-
23
- system "#{master_cut_script} 127.0.0.1:#{$mysql_master.port} 127.0.0.1:#{$mysql_slave.port} root -p ''"
24
-
25
- thread.join
26
-
27
- if $mysql_master.connection.query("select @@read_only as ro").first['ro'] != 1
28
- puts "Master is not readonly!"
29
- exit 1
30
- end
31
-
32
- if $mysql_slave.connection.query("select @@read_only as ro").first['ro'] != 0
33
- puts "Slave is not readwrite!"
34
- exit 1
35
27
  end
36
-
37
- puts "everything seemed to go ok..."
@@ -1,32 +1,24 @@
1
- require 'bundler/setup'
2
- require 'mysql2'
3
- require_relative '../boot_mysql_env'
4
-
1
+ require_relative "../integration_helper"
2
+ class WrongSetupTest < Minitest::Test
3
+ def assert_script_failed
4
+ assert(!system("#{master_cut_script} 127.0.0.1:#{$mysql_master.port} 127.0.0.1:#{$mysql_slave.port} root -p ''"))
5
+ end
5
6
 
6
- def assert_script_failed
7
- master_cut_script = File.expand_path(File.dirname(__FILE__)) + "/../../bin/master_cut"
8
- if system "#{master_cut_script} 127.0.0.1:#{$mysql_master.port} 127.0.0.1:#{$mysql_slave.port} root -p ''"
9
- puts "Script returned ok instead of false!"
10
- exit 1
7
+ def test_wrong
8
+ puts "testing cutover with incorrect master config..."
9
+ $mysql_master.connection.query("set GLOBAL READ_ONLY=0")
10
+ $mysql_slave.connection.query("set GLOBAL READ_ONLY=0")
11
+ assert_script_failed
12
+
13
+ puts "testing cutover with incorrect slave config..."
14
+ $mysql_master.connection.query("set GLOBAL READ_ONLY=0")
15
+ $mysql_slave.connection.query("set GLOBAL READ_ONLY=0")
16
+ assert_script_failed
17
+
18
+ puts "testing cutover with stopped slave"
19
+ $mysql_master.connection.query("set GLOBAL READ_ONLY=0")
20
+ $mysql_slave.connection.query("set GLOBAL READ_ONLY=1")
21
+ $mysql_slave.connection.query("slave stop")
22
+ assert_script_failed
11
23
  end
12
24
  end
13
-
14
- puts "testing cutover with incorrect master config..."
15
- $mysql_master.connection.query("set GLOBAL READ_ONLY=0")
16
- $mysql_slave.connection.query("set GLOBAL READ_ONLY=0")
17
- assert_script_failed
18
-
19
- puts "testing cutover with incorrect slave config..."
20
- $mysql_master.connection.query("set GLOBAL READ_ONLY=0")
21
- $mysql_slave.connection.query("set GLOBAL READ_ONLY=0")
22
- assert_script_failed
23
-
24
- puts "testing cutover with stopped slave"
25
- $mysql_master.connection.query("set GLOBAL READ_ONLY=0")
26
- $mysql_slave.connection.query("set GLOBAL READ_ONLY=1")
27
- $mysql_slave.connection.query("slave stop")
28
- assert_script_failed
29
-
30
-
31
- puts "Tests passed."
32
-
@@ -0,0 +1,19 @@
1
+ require 'bundler/setup'
2
+ require 'mysql2'
3
+ require 'minitest/autorun'
4
+
5
+ if !defined?(Minitest::Test)
6
+ Minitest::Test = MiniTest::Unit::TestCase
7
+ end
8
+
9
+ require_relative 'boot_mysql_env'
10
+
11
+ def assert_ro(cx, str, bool)
12
+ expected = bool ? 1 : 0
13
+ assert_equal expected, cx.query("select @@read_only as ro").first['ro'], "#{str} is #{bool ? 'read-write' : 'read-only'} but I expected otherwise!"
14
+ end
15
+
16
+ def master_cut_script
17
+ File.expand_path(File.dirname(__FILE__)) + "/../bin/master_cut"
18
+ end
19
+
metadata CHANGED
@@ -1,112 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar_mysql_flexmaster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
5
- prerelease:
4
+ version: 0.5.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Ben Osheroff
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-15 00:00:00.000000000 Z
11
+ date: 2014-12-10 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: mysql2
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: activerecord
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: activesupport
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
- name: appraisal
56
+ name: wwtd
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
76
81
  - !ruby/object:Gem::Version
77
82
  version: '0'
78
83
  - !ruby/object:Gem::Dependency
79
84
  name: bump
80
85
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
86
  requirements:
83
- - - ! '>='
87
+ - - ">="
84
88
  - !ruby/object:Gem::Version
85
89
  version: '0'
86
90
  type: :development
87
91
  prerelease: false
88
92
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
93
  requirements:
91
- - - ! '>='
94
+ - - ">="
92
95
  - !ruby/object:Gem::Version
93
96
  version: '0'
94
97
  - !ruby/object:Gem::Dependency
95
98
  name: mysql_isolated_server
96
99
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
100
  requirements:
99
- - - ~>
101
+ - - "~>"
100
102
  - !ruby/object:Gem::Version
101
- version: 0.1.1
103
+ version: '0.5'
102
104
  type: :development
103
105
  prerelease: false
104
106
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
107
  requirements:
107
- - - ~>
108
+ - - "~>"
108
109
  - !ruby/object:Gem::Version
109
- version: 0.1.1
110
+ version: '0.5'
110
111
  description: ar_mysql_flexmaster allows configuring N mysql servers in database.yml
111
112
  and auto-selects which is a master at runtime
112
113
  email:
@@ -116,21 +117,26 @@ executables:
116
117
  extensions: []
117
118
  extra_rdoc_files: []
118
119
  files:
119
- - .gitignore
120
- - .travis.yml
121
- - Appraisals
120
+ - ".gitignore"
121
+ - ".travis.yml"
122
122
  - Gemfile
123
123
  - LICENSE
124
124
  - README.md
125
125
  - Rakefile
126
126
  - ar_mysql_flexmaster.gemspec
127
127
  - bin/master_cut
128
- - gemfiles/rails2.gemfile
129
- - gemfiles/rails2.gemfile.lock
128
+ - gemfiles/rails2.3.gemfile
129
+ - gemfiles/rails2.3.gemfile.lock
130
+ - gemfiles/rails3.0.gemfile
131
+ - gemfiles/rails3.0.gemfile.lock
130
132
  - gemfiles/rails3.2.gemfile
131
133
  - gemfiles/rails3.2.gemfile.lock
132
- - gemfiles/rails3.gemfile
133
- - gemfiles/rails3.gemfile.lock
134
+ - gemfiles/rails4.0.gemfile
135
+ - gemfiles/rails4.0.gemfile.lock
136
+ - gemfiles/rails4.1.gemfile
137
+ - gemfiles/rails4.1.gemfile.lock
138
+ - gemfiles/rails4.2.gemfile
139
+ - gemfiles/rails4.2.gemfile.lock
134
140
  - lib/active_record/connection_adapters/mysql_flexmaster_adapter.rb
135
141
  - lib/ar_mysql_flexmaster.rb
136
142
  - test/ar_flexmaster_test.rb
@@ -141,30 +147,30 @@ files:
141
147
  - test/integration/there_and_back_again_test.rb
142
148
  - test/integration/with_queries_to_be_killed_test.rb
143
149
  - test/integration/wrong_setup_test.rb
150
+ - test/integration_helper.rb
144
151
  - unplanned_failovers.md
145
152
  homepage: http://github.com/osheroff/ar_mysql_flexmaster
146
153
  licenses: []
154
+ metadata: {}
147
155
  post_install_message:
148
156
  rdoc_options: []
149
157
  require_paths:
150
158
  - lib
151
159
  required_ruby_version: !ruby/object:Gem::Requirement
152
- none: false
153
160
  requirements:
154
- - - ! '>='
161
+ - - ">="
155
162
  - !ruby/object:Gem::Version
156
163
  version: '0'
157
164
  required_rubygems_version: !ruby/object:Gem::Requirement
158
- none: false
159
165
  requirements:
160
- - - ! '>='
166
+ - - ">="
161
167
  - !ruby/object:Gem::Version
162
168
  version: '0'
163
169
  requirements: []
164
170
  rubyforge_project:
165
- rubygems_version: 1.8.25
171
+ rubygems_version: 2.2.2
166
172
  signing_key:
167
- specification_version: 3
173
+ specification_version: 4
168
174
  summary: select a master at runtime from a list
169
175
  test_files:
170
176
  - test/ar_flexmaster_test.rb
@@ -175,4 +181,4 @@ test_files:
175
181
  - test/integration/there_and_back_again_test.rb
176
182
  - test/integration/with_queries_to_be_killed_test.rb
177
183
  - test/integration/wrong_setup_test.rb
178
- has_rdoc:
184
+ - test/integration_helper.rb
data/Appraisals DELETED
@@ -1,14 +0,0 @@
1
- appraise "rails2" do
2
- gem "rails", "~> 2.3.15"
3
- gem 'mysql2', "~> 0.2.0"
4
- end
5
-
6
- appraise "rails3" do
7
- gem "rails", "~> 3.0.0"
8
- gem 'mysql2', "~> 0.2.0"
9
- end
10
-
11
- appraise "rails3.2" do
12
- gem "rails", "~> 3.2.0"
13
- gem 'mysql2', "~> 0.3.0"
14
- end
@@ -1,10 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "debugger", "~>1.5.0"
6
- gem "appraisal"
7
- gem "rails", "~> 2.3.15"
8
- gem "mysql2", "~> 0.2.0"
9
-
10
- gemspec :path=>"../"
@@ -1,10 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "debugger", "~>1.5.0"
6
- gem "appraisal"
7
- gem "rails", "~> 3.0.0"
8
- gem "mysql2", "~> 0.2.0"
9
-
10
- gemspec :path=>"../"