activerecord-mysql-reconnect 0.3.6 → 0.3.7
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: edc9b88122246d91bb12caad426b895a663b3ac3
|
4
|
+
data.tar.gz: 4d33d7b9b4aca402c5548ecd972cc7fe944dab06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c12fbc120985b3f3d8f6b9b4fdcf0fa34ae431ca149ae152f8951f3f372b65f322398b5d8e33c261a66156654cc9645ab42714d5a5d866065badb234015b18c1
|
7
|
+
data.tar.gz: 08adf77b43b394d8e96a896ff0c17506743e0688cc2eae2feaf518276c96ac14e1d1bd3256e7edac1701bf9831b0a971210fa6e063fbec859f27b725c90db4f0
|
data/README.md
CHANGED
@@ -90,7 +90,11 @@ gem 'activerecord-mysql-reconnect'
|
|
90
90
|
MyApp::Application.configure do
|
91
91
|
...
|
92
92
|
config.active_record.enable_retry = true
|
93
|
-
#config.active_record.retry_databases = :employees
|
93
|
+
#config.active_record.retry_databases = :employees
|
94
|
+
# e.g. [:employees]
|
95
|
+
# ['employees', 'localhost:test', '192.168.1.1:users']
|
96
|
+
# ['192.168.%:emp\_all']
|
97
|
+
# ['emp%']
|
94
98
|
# retry_databases -> nil: retry all databases (default)
|
95
99
|
config.active_record.execution_tries = 10 # times
|
96
100
|
# execution_tries -> 0: retry indefinitely
|
@@ -23,6 +23,6 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency 'mysql2'
|
24
24
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
25
25
|
spec.add_development_dependency 'rake'
|
26
|
-
spec.add_development_dependency 'rspec', '>=
|
26
|
+
spec.add_development_dependency 'rspec', '>= 3.0.0'
|
27
27
|
spec.add_development_dependency 'rspec-instafail'
|
28
28
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'mysql2'
|
2
2
|
require 'logger'
|
3
3
|
require 'bigdecimal'
|
4
|
+
require 'strscan'
|
4
5
|
|
5
6
|
require 'active_record'
|
6
7
|
require 'active_record/connection_adapters/abstract_adapter'
|
@@ -85,7 +86,21 @@ module Activerecord::Mysql::Reconnect
|
|
85
86
|
v = [v]
|
86
87
|
end
|
87
88
|
|
88
|
-
@activerecord_mysql_reconnect_retry_databases = v.map
|
89
|
+
@activerecord_mysql_reconnect_retry_databases = v.map do |database|
|
90
|
+
if database.instance_of?(Symbol)
|
91
|
+
database = Regexp.escape(database.to_s)
|
92
|
+
[/.*/, /\A#{database}\z/]
|
93
|
+
else
|
94
|
+
host = '%'
|
95
|
+
database = database.to_s
|
96
|
+
|
97
|
+
if database =~ /:/
|
98
|
+
host, database = database.split(':', 2)
|
99
|
+
end
|
100
|
+
|
101
|
+
[create_pattern_match_regex(host), create_pattern_match_regex(database)]
|
102
|
+
end
|
103
|
+
end
|
89
104
|
end
|
90
105
|
|
91
106
|
def retry_databases
|
@@ -185,7 +200,12 @@ module Activerecord::Mysql::Reconnect
|
|
185
200
|
|
186
201
|
if conn and not retry_databases.empty?
|
187
202
|
conn_info = connection_info(conn)
|
188
|
-
|
203
|
+
|
204
|
+
included = retry_databases.any? do |host, database|
|
205
|
+
host =~ conn_info[:host] and database =~ conn_info[:database]
|
206
|
+
end
|
207
|
+
|
208
|
+
return false unless included
|
189
209
|
end
|
190
210
|
|
191
211
|
unless HANDLE_ERROR.any? {|i| e.kind_of?(i) }
|
@@ -220,5 +240,28 @@ module Activerecord::Mysql::Reconnect
|
|
220
240
|
|
221
241
|
return conn_info
|
222
242
|
end
|
243
|
+
|
244
|
+
private
|
245
|
+
|
246
|
+
def create_pattern_match_regex(str)
|
247
|
+
ss = StringScanner.new(str)
|
248
|
+
buf = []
|
249
|
+
|
250
|
+
until ss.eos?
|
251
|
+
if (tok = ss.scan(/[^\\%_]+/))
|
252
|
+
buf << Regexp.escape(tok)
|
253
|
+
elsif (tok = ss.scan(/\\/))
|
254
|
+
buf << Regexp.escape(ss.getch)
|
255
|
+
elsif (tok = ss.scan(/%/))
|
256
|
+
buf << '.*'
|
257
|
+
elsif (tok = ss.scan(/_/))
|
258
|
+
buf << '.'
|
259
|
+
else
|
260
|
+
raise 'must not happen'
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
/\A#{buf.join}\z/
|
265
|
+
end
|
223
266
|
end # end of class methods
|
224
267
|
end
|
@@ -369,19 +369,41 @@ describe 'activerecord-mysql-reconnect' do
|
|
369
369
|
end
|
370
370
|
end
|
371
371
|
|
372
|
-
|
373
|
-
|
372
|
+
[
|
373
|
+
:employees2,
|
374
|
+
'127.0.0.2:employees',
|
375
|
+
'127.0.0.\_:employees',
|
376
|
+
].each do |db|
|
377
|
+
it "retry specific database: #{db}" do
|
378
|
+
retry_databases(db) do
|
379
|
+
expect {
|
380
|
+
expect(Employee.all.length).to eq(300024)
|
381
|
+
mysql_restart
|
382
|
+
expect(Employee.all.length).to eq(300024)
|
383
|
+
}.to raise_error(ActiveRecord::StatementInvalid)
|
384
|
+
end
|
385
|
+
|
374
386
|
expect {
|
375
387
|
expect(Employee.all.length).to eq(300024)
|
376
388
|
mysql_restart
|
377
389
|
expect(Employee.all.length).to eq(300024)
|
378
|
-
}.
|
390
|
+
}.to_not raise_error
|
379
391
|
end
|
392
|
+
end
|
380
393
|
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
394
|
+
[
|
395
|
+
:employees,
|
396
|
+
'127.0.0.1:employees',
|
397
|
+
'127.0.0._:e%',
|
398
|
+
].each do |db|
|
399
|
+
it "retry specific database: #{db}" do
|
400
|
+
retry_databases(db) do
|
401
|
+
expect {
|
402
|
+
expect(Employee.all.length).to eq(300024)
|
403
|
+
mysql_restart
|
404
|
+
expect(Employee.all.length).to eq(300024)
|
405
|
+
}.to_not raise_error
|
406
|
+
end
|
407
|
+
end
|
386
408
|
end
|
387
409
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -119,8 +119,8 @@ RSpec.configure do |config|
|
|
119
119
|
system("git checkout #{employees_sql}")
|
120
120
|
end
|
121
121
|
|
122
|
-
config.before(:each) do
|
123
|
-
desc =
|
122
|
+
config.before(:each) do |context|
|
123
|
+
desc = context.metadata[:full_description]
|
124
124
|
puts <<-EOS
|
125
125
|
|
126
126
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-mysql-reconnect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genki Sugawara
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -71,9 +71,6 @@ dependencies:
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - '>='
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 2.14.1
|
76
|
-
- - <
|
77
74
|
- !ruby/object:Gem::Version
|
78
75
|
version: 3.0.0
|
79
76
|
type: :development
|
@@ -81,9 +78,6 @@ dependencies:
|
|
81
78
|
version_requirements: !ruby/object:Gem::Requirement
|
82
79
|
requirements:
|
83
80
|
- - '>='
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: 2.14.1
|
86
|
-
- - <
|
87
81
|
- !ruby/object:Gem::Version
|
88
82
|
version: 3.0.0
|
89
83
|
- !ruby/object:Gem::Dependency
|