activerecord-mysql-reconnect 0.3.6 → 0.3.7
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.
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
|