maria_db_cluster_pool 0.0.9 → 0.1.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.
- checksums.yaml +7 -0
- data/Rakefile +3 -2
- data/lib/active_record/connection_adapters/maria_db_cluster_pool_adapter.rb +37 -10
- metadata +85 -81
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f160b96f54605a291e71690da6b671debc122d9b
|
4
|
+
data.tar.gz: 37ea09c465363675fb3e9f9c0de0e5347018996e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d65356f3e7702e384ddd20f058814f752a3edc188bd0f604e3ecde1910803879984eae4771242152007f5497a005653ecbedeed1575c965b71f6b7014b883a29
|
7
|
+
data.tar.gz: 47c2390ad12fe7982fc7a7c6c8723aa1fd8e623e055a3b47f38040696e3b32dd9a99b7de378f01ab8a67261ed79949144411d83c861349de758f97f73a3c0923
|
data/Rakefile
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake'
|
3
3
|
require 'yaml'
|
4
|
+
require "bundler/gem_tasks"
|
4
5
|
|
5
6
|
desc 'Default: run unit tests.'
|
6
7
|
task :default => :test
|
@@ -10,7 +11,7 @@ begin
|
|
10
11
|
require 'rspec/core/rake_task'
|
11
12
|
desc 'Run the unit tests'
|
12
13
|
RSpec::Core::RakeTask.new(:test)
|
13
|
-
|
14
|
+
|
14
15
|
namespace :test do
|
15
16
|
desc "Run all tests including for all database adapters"
|
16
17
|
task :all do
|
@@ -58,4 +59,4 @@ rescue LoadError
|
|
58
59
|
task :test do
|
59
60
|
STDERR.puts "You must have rspec >= 2.0 to run the tests"
|
60
61
|
end
|
61
|
-
end
|
62
|
+
end
|
@@ -16,8 +16,9 @@ module ActiveRecord
|
|
16
16
|
begin
|
17
17
|
establish_adapter(server_config[:adapter])
|
18
18
|
conn = send("#{server_config[:adapter]}_connection".to_sym, server_config)
|
19
|
-
conn.class.send(:include, MariaDbClusterPool::ConnectTimeout) unless conn.class.include?(MariaDbClusterPool::ConnectTimeout)
|
20
|
-
conn.connect_timeout = server_config[:connect_timeout]
|
19
|
+
# conn.class.send(:include, MariaDbClusterPool::ConnectTimeout) unless conn.class.include?(MariaDbClusterPool::ConnectTimeout)
|
20
|
+
# conn.connect_timeout = server_config[:connect_timeout]
|
21
|
+
|
21
22
|
pool_connections << conn
|
22
23
|
pool_weights[conn] = server_config[:pool_weight]
|
23
24
|
rescue Exception => e
|
@@ -30,7 +31,7 @@ module ActiveRecord
|
|
30
31
|
|
31
32
|
@maria_db_cluster_pool_classes ||= {}
|
32
33
|
klass = @maria_db_cluster_pool_classes[pool_connections[0].class]
|
33
|
-
unless klass
|
34
|
+
unless klass.present?
|
34
35
|
klass = ActiveRecord::ConnectionAdapters::MariaDbClusterPoolAdapter.adapter_class(pool_connections[0])
|
35
36
|
@maria_db_cluster_pool_classes[pool_connections[0].class] = klass
|
36
37
|
end
|
@@ -46,10 +47,10 @@ module ActiveRecord
|
|
46
47
|
require 'rubygems'
|
47
48
|
gem "activerecord-#{adapter}-adapter"
|
48
49
|
require "active_record/connection_adapters/#{adapter}_adapter"
|
49
|
-
rescue LoadError
|
50
|
+
rescue LoadError => e
|
50
51
|
begin
|
51
52
|
require "active_record/connection_adapters/#{adapter}_adapter"
|
52
|
-
rescue LoadError
|
53
|
+
rescue LoadError => ee
|
53
54
|
raise "Please install the #{adapter} adapter: `gem install activerecord-#{adapter}-adapter` (#{$!})"
|
54
55
|
end
|
55
56
|
end
|
@@ -60,6 +61,8 @@ module ActiveRecord
|
|
60
61
|
end
|
61
62
|
end
|
62
63
|
end
|
64
|
+
|
65
|
+
# include(MariaDbClusterPoolAdapter) unless include?(MariaDbClusterPoolAdapter)
|
63
66
|
end
|
64
67
|
|
65
68
|
module ConnectionAdapters
|
@@ -112,11 +115,12 @@ module ActiveRecord
|
|
112
115
|
end
|
113
116
|
|
114
117
|
def initialize(connection, logger, connections, pool_weights)
|
115
|
-
|
116
|
-
|
118
|
+
# @available_connections = connections.dup.freeze
|
119
|
+
@connections = connections.dup.freeze
|
117
120
|
@available_connections = []
|
118
121
|
@master_connection = connection
|
119
|
-
|
122
|
+
|
123
|
+
super(connection, logger)
|
120
124
|
|
121
125
|
pool_weights.each_pair do |conn, weight|
|
122
126
|
@available_connections[weight] = AvailableConnection.new(conn)
|
@@ -174,7 +178,7 @@ module ActiveRecord
|
|
174
178
|
|
175
179
|
class DatabaseConnectionError < StandardError
|
176
180
|
end
|
177
|
-
|
181
|
+
|
178
182
|
# This simple class puts an expire time on an array of connections. It is used so the a connection
|
179
183
|
# to a down database won't try to reconnect over and over.
|
180
184
|
class AvailableConnection
|
@@ -227,7 +231,30 @@ module ActiveRecord
|
|
227
231
|
end
|
228
232
|
|
229
233
|
@available_connections
|
230
|
-
|
234
|
+
# available = @available_connections.last
|
235
|
+
# if available.expired?
|
236
|
+
# begin
|
237
|
+
# @logger.info("Adding dead database connection back to the pool") if @logger
|
238
|
+
# available.reconnect!
|
239
|
+
# rescue => e
|
240
|
+
# # Couldn't reconnect so try again in a little bit
|
241
|
+
# if @logger
|
242
|
+
# @logger.warn("Failed to reconnect to database when adding connection back to the pool")
|
243
|
+
# @logger.warn(e)
|
244
|
+
# end
|
245
|
+
# available.expires = 30.seconds.from_now
|
246
|
+
# return available.connections
|
247
|
+
# end
|
248
|
+
#
|
249
|
+
# # If reconnect is successful, the connection will have been re-added to @available_read_connections list,
|
250
|
+
# # so let's pop this old version of the connection
|
251
|
+
# @available_connections.pop
|
252
|
+
#
|
253
|
+
# # Now we'll try again after either expiring our bad connection or re-adding our good one
|
254
|
+
# return available_connections
|
255
|
+
# else
|
256
|
+
# return available.connections
|
257
|
+
# end
|
231
258
|
end
|
232
259
|
|
233
260
|
def reset_available_connections
|
metadata
CHANGED
@@ -1,79 +1,93 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: maria_db_cluster_pool
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 9
|
10
|
-
version: 0.0.9
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
13
|
-
-
|
6
|
+
authors:
|
7
|
+
- René Schultz Madsen
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2016-06-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
22
14
|
name: activerecord
|
23
|
-
|
24
|
-
|
25
|
-
none: false
|
26
|
-
requirements:
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
27
17
|
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 2
|
32
|
-
- 3
|
33
|
-
- 11
|
34
|
-
version: 2.3.11
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.0.20
|
35
20
|
type: :runtime
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: rake
|
39
21
|
prerelease: false
|
40
|
-
|
41
|
-
|
42
|
-
requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
43
24
|
- - ">="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
46
|
-
|
47
|
-
- 0
|
48
|
-
- 8
|
49
|
-
- 7
|
50
|
-
version: 0.8.7
|
51
|
-
type: :runtime
|
52
|
-
version_requirements: *id002
|
53
|
-
- !ruby/object:Gem::Dependency
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.0.20
|
27
|
+
- !ruby/object:Gem::Dependency
|
54
28
|
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.0'
|
34
|
+
type: :development
|
55
35
|
prerelease: false
|
56
|
-
|
57
|
-
|
58
|
-
requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
59
38
|
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: sqlite3
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
65
48
|
type: :development
|
66
|
-
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: mysql2
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pg
|
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
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
67
83
|
description: This gem add support for the Maria DB Galera Cluster setup.
|
68
84
|
email: rm@microting.com
|
69
85
|
executables: []
|
70
|
-
|
71
86
|
extensions: []
|
72
|
-
|
73
|
-
extra_rdoc_files:
|
87
|
+
extra_rdoc_files:
|
74
88
|
- MIT-LICENSE
|
75
89
|
- README.md
|
76
|
-
files:
|
90
|
+
files:
|
77
91
|
- MIT-LICENSE
|
78
92
|
- README.md
|
79
93
|
- Rakefile
|
@@ -81,39 +95,29 @@ files:
|
|
81
95
|
- lib/maria_db_cluster_pool.rb
|
82
96
|
- lib/maria_db_cluster_pool/arel_compiler.rb
|
83
97
|
- lib/maria_db_cluster_pool/connect_timeout.rb
|
84
|
-
has_rdoc: true
|
85
98
|
homepage: https://github.com/renemadsen/maria_db_cluster_pool
|
86
|
-
licenses:
|
99
|
+
licenses:
|
87
100
|
- MIT
|
101
|
+
metadata: {}
|
88
102
|
post_install_message:
|
89
103
|
rdoc_options: []
|
90
|
-
|
91
|
-
require_paths:
|
104
|
+
require_paths:
|
92
105
|
- lib
|
93
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
-
|
95
|
-
requirements:
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
96
108
|
- - ">="
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
version: "0"
|
102
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
-
none: false
|
104
|
-
requirements:
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
105
113
|
- - ">="
|
106
|
-
- !ruby/object:Gem::Version
|
107
|
-
|
108
|
-
segments:
|
109
|
-
- 0
|
110
|
-
version: "0"
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
111
116
|
requirements: []
|
112
|
-
|
113
117
|
rubyforge_project:
|
114
|
-
rubygems_version:
|
118
|
+
rubygems_version: 2.2.2
|
115
119
|
signing_key:
|
116
|
-
specification_version:
|
117
|
-
summary: Add support for master/master database clusters in ActiveRecord to improve
|
120
|
+
specification_version: 4
|
121
|
+
summary: Add support for master/master database clusters in ActiveRecord to improve
|
122
|
+
performance.
|
118
123
|
test_files: []
|
119
|
-
|