activerecord-mysql-reconnect-new 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.idea/.gitignore +8 -0
  4. data/.idea/activerecord-mysql-reconnect.iml +22 -0
  5. data/.idea/misc.xml +4 -0
  6. data/.idea/modules.xml +8 -0
  7. data/.idea/vcs.xml +6 -0
  8. data/.rspec +3 -0
  9. data/.travis.yml +45 -0
  10. data/Appraisals +28 -0
  11. data/ChangeLog +35 -0
  12. data/Gemfile +4 -0
  13. data/LICENSE.txt +22 -0
  14. data/README.md +124 -0
  15. data/Rakefile +5 -0
  16. data/activerecord-mysql-reconnect-new.gemspec +28 -0
  17. data/docker-compose.yml +6 -0
  18. data/gemfiles/activerecord_4.2.gemfile +8 -0
  19. data/gemfiles/activerecord_5.0.gemfile +7 -0
  20. data/gemfiles/activerecord_5.1.gemfile +7 -0
  21. data/gemfiles/activerecord_5.2.gemfile +7 -0
  22. data/gemfiles/activerecord_6.0.gemfile +7 -0
  23. data/gemfiles/activerecord_6.1.gemfile +7 -0
  24. data/gemfiles/activerecord_master.gemfile +7 -0
  25. data/lib/activerecord/mysql/reconnect/abstract_mysql_adapter_ext.rb +46 -0
  26. data/lib/activerecord/mysql/reconnect/base_ext.rb +32 -0
  27. data/lib/activerecord/mysql/reconnect/connection_pool_ext.rb +18 -0
  28. data/lib/activerecord/mysql/reconnect/mysql2_adapter_ext.rb +13 -0
  29. data/lib/activerecord/mysql/reconnect/null_transaction_ext.rb +9 -0
  30. data/lib/activerecord/mysql/reconnect/version.rb +7 -0
  31. data/lib/activerecord/mysql/reconnect.rb +268 -0
  32. data/lib/activerecord-mysql-reconnect.rb +5 -0
  33. data/spec/activerecord-mysql-reconnect_spec.rb +545 -0
  34. data/spec/data.sql +1001 -0
  35. data/spec/employee_model.rb +1 -0
  36. data/spec/mysql2_ext.rb +5 -0
  37. data/spec/mysql_helper.rb +84 -0
  38. data/spec/spec_helper.rb +54 -0
  39. metadata +174 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 40cb9b6f448d37763a9d1e12f54ab8ea980a31127a813865f11b8addf9a8cb7c
4
+ data.tar.gz: 55db8677ac2c73a1fb702ea25670a596dc5f614de5142fd6f83c02d458fde8df
5
+ SHA512:
6
+ metadata.gz: b9bdff5e005aed4038a7460feb0b1546d1473d3346d3471231442a6bed1d690fe3261602e34b4f10400a6315830b6b07e2eb316a9be31f22276fa9f40555229d
7
+ data.tar.gz: ea1fd650384e2589123b212060b98187d8f0d964c95cabbe2a80e820b408310a1c6c7e1b4454360d052d48ac9aae195d06d858f6e5907c800d90b28c8b10db02
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ test.rb
19
+ *.bak
20
+ *.swp
21
+ /gemfiles/*.lock
data/.idea/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
4
+ # Editor-based HTTP Client requests
5
+ /httpRequests/
6
+ # Datasource local storage ignored files
7
+ /dataSources/
8
+ /dataSources.local.xml
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="RUBY_MODULE" version="4">
3
+ <component name="ModuleRunConfigurationManager">
4
+ <shared />
5
+ </component>
6
+ <component name="NewModuleRootManager">
7
+ <content url="file://$MODULE_DIR$">
8
+ <sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
9
+ <sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
10
+ <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
11
+ </content>
12
+ <orderEntry type="inheritedJdk" />
13
+ <orderEntry type="sourceFolder" forTests="false" />
14
+ <orderEntry type="library" scope="PROVIDED" name="bundler (v1.17.2, ruby-2.6.8-p205) [gem]" level="application" />
15
+ <orderEntry type="library" scope="PROVIDED" name="rake (v12.3.3, ruby-2.6.8-p205) [gem]" level="application" />
16
+ </component>
17
+ <component name="RakeTasksCache">
18
+ <option name="myRootTask">
19
+ <RakeTaskImpl id="rake" />
20
+ </option>
21
+ </component>
22
+ </module>
data/.idea/misc.xml ADDED
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectRootManager" version="2" project-jdk-name="ruby-2.6.8-p205" project-jdk-type="RUBY_SDK" />
4
+ </project>
data/.idea/modules.xml ADDED
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/activerecord-mysql-reconnect.iml" filepath="$PROJECT_DIR$/.idea/activerecord-mysql-reconnect.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
data/.idea/vcs.xml ADDED
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
+ </component>
6
+ </project>
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --require spec_helper
2
+ --colour
3
+ --format documentation
data/.travis.yml ADDED
@@ -0,0 +1,45 @@
1
+ dist: trusty
2
+ sudo: required
3
+ language: ruby
4
+ rvm:
5
+ - 2.3.8
6
+ - 2.4.6
7
+ - 2.5.5
8
+ - 2.6.3
9
+ - 2.7.0
10
+ before_install:
11
+ - docker-compose up -d
12
+ - function mysql_ping { mysqladmin -u root -h 127.0.0.1 -ppassword ping > /dev/null 2> /dev/null; }
13
+ - for i in {1..60}; do mysql_ping && break; sleep 1; done
14
+ - gem install bundler
15
+ - docker-compose stop
16
+ script:
17
+ - bundle exec rake
18
+ gemfile:
19
+ - gemfiles/activerecord_4.2.gemfile
20
+ - gemfiles/activerecord_5.0.gemfile
21
+ - gemfiles/activerecord_5.1.gemfile
22
+ - gemfiles/activerecord_5.2.gemfile
23
+ - gemfiles/activerecord_6.0.gemfile
24
+ - gemfiles/activerecord_master.gemfile
25
+ env:
26
+ matrix:
27
+ - ACTIVERECORD_MYSQL_RECONNECT_ENGINE=InnoDB
28
+ - ACTIVERECORD_MYSQL_RECONNECT_ENGINE=MyISAM
29
+ jobs:
30
+ exclude:
31
+ - rvm: 2.3.8
32
+ gemfile: gemfiles/activerecord_6.0.gemfile
33
+ - rvm: 2.3.8
34
+ gemfile: gemfiles/activerecord_master.gemfile
35
+ - rvm: 2.4.6
36
+ gemfile: gemfiles/activerecord_6.0.gemfile
37
+ - rvm: 2.4.6
38
+ gemfile: gemfiles/activerecord_master.gemfile
39
+ - rvm: 2.7.0
40
+ gemfile: gemfiles/activerecord_4.2.gemfile
41
+ addons:
42
+ apt:
43
+ packages:
44
+ - mysql-client-core-5.6
45
+ - mysql-client-5.6
data/Appraisals ADDED
@@ -0,0 +1,28 @@
1
+ appraise "activerecord-4.2" do
2
+ gem "activerecord", "~> 4.2.0"
3
+ gem "mysql2", "< 0.5"
4
+ end
5
+
6
+ appraise "activerecord-5.0" do
7
+ gem "activerecord", "~> 5.0.0"
8
+ end
9
+
10
+ appraise "activerecord-5.1" do
11
+ gem "activerecord", "~> 5.1.0"
12
+ end
13
+
14
+ appraise "activerecord-5.2" do
15
+ gem "activerecord", "~> 5.2.0"
16
+ end
17
+
18
+ appraise "activerecord-6.0" do
19
+ gem "activerecord", "~> 6.0.2"
20
+ end
21
+
22
+ appraise "activerecord-6.1" do
23
+ gem "activerecord", "~> 6.1.5"
24
+ end
25
+
26
+ appraise "activerecord-master" do
27
+ gem "activerecord", git: "https://github.com/rails/rails.git"
28
+ end
data/ChangeLog ADDED
@@ -0,0 +1,35 @@
1
+ activerecord-mysql-reconnect-new 0.6.0 (Jul 14, 2022)
2
+
3
+ * Support Rails 6.1
4
+
5
+ activerecord-mysql-reconnect 0.4.1 (Aug 8, 2016)
6
+
7
+ * Support AR 5.0 (RP#5 @ssig33)
8
+ * Fix test (use docker-compose)
9
+
10
+ activerecord-mysql-reconnect 0.4.0 (Mar 22, 2016)
11
+
12
+ * Remove `retryable_transaction`
13
+ * Disable support AR 3.x 4.0
14
+
15
+ activerecord-mysql-reconnect 0.3.3 (Jan 18, 2014)
16
+
17
+ * use BigDecimal for sleep
18
+ * add handling error ('The MySQL server is running with the --read-only...')
19
+
20
+ activerecord-mysql-reconnect 0.3.1 (Jan 9, 2014)
21
+
22
+ * Retry mode is added
23
+
24
+ activerecord-mysql-reconnect 0.3.0 (Jan 9, 2014)
25
+
26
+ * Retry is disabled by default
27
+ * Read-only mode is added
28
+
29
+ activerecord-mysql-reconnect 0.2.0 (Jan 4, 2014)
30
+
31
+ * Retry transaction is supported
32
+
33
+ activerecord-mysql-reconnect 0.1.0 (Oct 11, 2013)
34
+
35
+ * activerecord-mysql-reconnect is released
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in activerecord-mysql-reconnect.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Genki Sugawara
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,124 @@
1
+ # activerecord-mysql-reconnect
2
+
3
+ It is the library to reconnect automatically when ActiveRecord is disconnected from MySQL.
4
+
5
+ [![Gem Version](https://badge.fury.io/rb/activerecord-mysql-reconnect.svg)](http://badge.fury.io/rb/activerecord-mysql-reconnect)
6
+ [![Build Status](https://travis-ci.org/winebarrel/activerecord-mysql-reconnect.svg?branch=master)](https://travis-ci.org/winebarrel/activerecord-mysql-reconnect)
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ gem 'activerecord-mysql-reconnect'
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install activerecord-mysql-reconnect
21
+
22
+ ## Usage
23
+
24
+ ```ruby
25
+ require 'active_record'
26
+ require 'activerecord-mysql-reconnect'
27
+ require 'logger'
28
+
29
+ ActiveRecord::Base.establish_connection(
30
+ adapter: 'mysql2',
31
+ host: '127.0.0.1',
32
+ username: 'root',
33
+ database: 'employees',
34
+ )
35
+
36
+ ActiveRecord::Base.logger = Logger.new($stdout)
37
+ ActiveRecord::Base.logger.formatter = proc {|_, _, _, message| "#{message}\n" }
38
+ ActiveRecord::Base.enable_retry = true
39
+ ActiveRecord::Base.execution_tries = 3
40
+
41
+ class Employee < ActiveRecord::Base; end
42
+
43
+ p Employee.count
44
+ system('sudo /etc/init.d/mysqld restart')
45
+ p Employee.count
46
+ ```
47
+
48
+ ```
49
+ shell> ruby test.rb
50
+ (64.1ms) SELECT COUNT(*) FROM `employees`
51
+ 300024
52
+ Stopping mysqld: [ OK ]
53
+ Starting mysqld: [ OK ]
54
+ (0.4ms) SELECT COUNT(*) FROM `employees`
55
+ Mysql2::Error: MySQL server has gone away: SELECT COUNT(*) FROM `employees`
56
+ MySQL server has gone away. Trying to reconnect in 0.5 seconds. (cause: Mysql2::Error: MySQL server has gone away: SELECT COUNT(*) FROM `employees` [ActiveRecord::StatementInvalid], connection: host=127.0.0.1;database=employees;username=root)
57
+ (101.5ms) SELECT COUNT(*) FROM `employees`
58
+ 300024
59
+ ```
60
+
61
+ ### without_retry
62
+
63
+ ```ruby
64
+ ActiveRecord::Base.without_retry do
65
+ Employee.count
66
+ end
67
+ ```
68
+
69
+ ### Add a retry error message
70
+
71
+ ```ruby
72
+ Activerecord::Mysql::Reconnect.handle_rw_error_messages.update(
73
+ zapzapzap: 'ZapZapZap'
74
+ )
75
+ # or `Activerecord::Mysql::Reconnect.handle_r_error_messages...`
76
+ ```
77
+
78
+ ## Use on rails
79
+
80
+ ### Gemfile
81
+
82
+ ```ruby
83
+ gem 'activerecord-mysql-reconnect'
84
+ ```
85
+
86
+ ### environment file
87
+
88
+ ```ruby
89
+ MyApp::Application.configure do
90
+ ...
91
+ config.active_record.enable_retry = true
92
+ #config.active_record.retry_databases = :employees
93
+ # e.g. [:employees]
94
+ # ['employees', 'localhost:test', '192.168.1.1:users']
95
+ # ['192.168.%:emp\_all']
96
+ # ['emp%']
97
+ # retry_databases -> nil: retry all databases (default)
98
+ config.active_record.execution_tries = 10 # times
99
+ # execution_tries -> 0: retry indefinitely
100
+ config.active_record.execution_retry_wait = 1.5 # sec
101
+ config.active_record.retry_mode = :rw # default: `:r`, valid values: `:r`, `:rw`, `:force`
102
+ ...
103
+ ene
104
+ ```
105
+
106
+ ## Retry mode
107
+
108
+ * `:r` Retry only SELECT / SHOW / SET
109
+ * `:rw` Retry in all SQL, but does not retry if `Lost connection` has happened in write SQL
110
+ * `:force` Retry in all SQL
111
+
112
+ ## Run tests
113
+
114
+ It requires the following:
115
+
116
+ * Docker
117
+ * Docker Compose
118
+
119
+ ```sh
120
+ bundle install
121
+ bundle exec appraisal install
122
+ bundle exec appraisal activerecord-4.2 rake
123
+ bundle exec appraisal activerecord-5.0 rake
124
+ ```
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new('spec')
5
+ task :default => :spec
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'activerecord/mysql/reconnect/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'activerecord-mysql-reconnect-new'
8
+ spec.version = Activerecord::Mysql::Reconnect::VERSION
9
+ spec.authors = ['Sundeep Yama', 'Lee Hester']
10
+ spec.email = ['sundeepyama@gmail.com', 'lhester@simplenexus.com']
11
+ spec.description = %q{It is the library to reconnect automatically when ActiveRecord is disconnected from MySQL.}
12
+ spec.summary = spec.description
13
+ spec.homepage = 'https://github.com/SimpleNexus/activerecord-mysql-reconnect'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ # '~> 4.2.6'
22
+ spec.add_dependency 'activerecord'
23
+ spec.add_dependency 'mysql2'
24
+ spec.add_development_dependency 'bundler'
25
+ spec.add_development_dependency 'rake'
26
+ spec.add_development_dependency 'rspec', '>= 3.0.0'
27
+ spec.add_development_dependency "appraisal"
28
+ end
@@ -0,0 +1,6 @@
1
+ mysql_for_ar_mysql_reconn:
2
+ image: "mysql:5.6"
3
+ ports:
4
+ - "14407:3306"
5
+ environment:
6
+ MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 4.2.0"
6
+ gem "mysql2", "< 0.5"
7
+
8
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 5.0.0"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 5.1.0"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 5.2.0"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 6.0.2"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 6.1.5"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", git: "https://github.com/rails/rails.git"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,46 @@
1
+ module Activerecord::Mysql::Reconnect::ExecuteWithReconnect
2
+ def execute(sql, name = nil)
3
+ retryable(sql, name) do |sql_names|
4
+ retval = nil
5
+
6
+ sql_names.each do |s, n|
7
+ retval = super(s, n)
8
+ end
9
+
10
+ retval
11
+ end
12
+ end
13
+ end
14
+
15
+ class ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
16
+ prepend Activerecord::Mysql::Reconnect::ExecuteWithReconnect
17
+
18
+ private
19
+
20
+ def retryable(sql, name, &block)
21
+ block_with_reconnect = nil
22
+ sql_names = [[sql, name]]
23
+ transaction = current_transaction
24
+
25
+ if sql =~ /\ABEGIN\z/i and transaction.is_a?(ActiveRecord::ConnectionAdapters::NullTransaction)
26
+ def transaction.state; nil; end
27
+ end
28
+
29
+ Activerecord::Mysql::Reconnect.retryable(
30
+ :proc => proc {
31
+ (block_with_reconnect || block).call(sql_names)
32
+ },
33
+ :on_error => proc {
34
+ unless block_with_reconnect
35
+ block_with_reconnect = proc do |i|
36
+ reconnect_without_retry!
37
+ block.call(i)
38
+ end
39
+ end
40
+ },
41
+ :sql => sql,
42
+ :retry_mode => Activerecord::Mysql::Reconnect.retry_mode,
43
+ :connection => @connection
44
+ )
45
+ end
46
+ end
@@ -0,0 +1,32 @@
1
+ class ActiveRecord::Base
2
+ class_attribute :execution_tries, :instance_accessor => false
3
+ class_attribute :execution_retry_wait, :instance_accessor => false
4
+ class_attribute :enable_retry, :instance_accessor => false
5
+
6
+ RETRY_MODES = [:r, :rw, :force]
7
+ DEFAULT_RETRY_MODE = :r
8
+
9
+ class << self
10
+ def retry_mode=(v)
11
+ Activerecord::Mysql::Reconnect.retry_mode = v
12
+ end
13
+
14
+ def retry_mode
15
+ Activerecord::Mysql::Reconnect.retry_mode
16
+ end
17
+
18
+ def retry_databases=(v)
19
+ Activerecord::Mysql::Reconnect.retry_databases = v
20
+ end
21
+
22
+ def retry_databases
23
+ Activerecord::Mysql::Reconnect.retry_databases
24
+ end
25
+
26
+ def without_retry
27
+ Activerecord::Mysql::Reconnect.without_retry do
28
+ yield
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,18 @@
1
+ module Activerecord::Mysql::Reconnect::NewConnectionWithRetry
2
+ def new_connection
3
+ if defined?(db_config)
4
+ Activerecord::Mysql::Reconnect.retryable(
5
+ :proc => proc { super },
6
+ :connection => db_config.configuration_hash
7
+ )
8
+ else
9
+ Activerecord::Mysql::Reconnect.retryable(
10
+ :proc => proc { super },
11
+ :connection => spec.config,
12
+ )
13
+ end
14
+ end
15
+ end
16
+ class ActiveRecord::ConnectionAdapters::ConnectionPool
17
+ prepend Activerecord::Mysql::Reconnect::NewConnectionWithRetry
18
+ end
@@ -0,0 +1,13 @@
1
+ module Activerecord::Mysql::Reconnect::ReconnectWithRetry
2
+ def reconnect!
3
+ Activerecord::Mysql::Reconnect.retryable(
4
+ :proc => proc { super },
5
+ :connection => @connection
6
+ )
7
+ end
8
+ end
9
+
10
+ class ActiveRecord::ConnectionAdapters::Mysql2Adapter
11
+ alias_method :reconnect_without_retry!, :reconnect!
12
+ prepend Activerecord::Mysql::Reconnect::ReconnectWithRetry
13
+ end
@@ -0,0 +1,9 @@
1
+ module Activerecord::Mysql::Reconnect::NullTransactionExt
2
+ def state
3
+ nil
4
+ end
5
+ end
6
+
7
+ class ActiveRecord::ConnectionAdapters::NullTransaction
8
+ prepend Activerecord::Mysql::Reconnect::NullTransactionExt
9
+ end
@@ -0,0 +1,7 @@
1
+ module Activerecord
2
+ module Mysql
3
+ module Reconnect
4
+ VERSION = '0.6.0'
5
+ end
6
+ end
7
+ end