activerecord-bogacs 0.6.0 → 0.7.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 +4 -4
- data/.github/workflows/test.yml +82 -0
- data/Gemfile +2 -15
- data/Rakefile +8 -6
- data/activerecord-bogacs.gemspec +6 -6
- data/lib/active_record/bogacs/connection_handler.rb +1 -1
- data/lib/active_record/bogacs/default_pool.rb +250 -90
- data/lib/active_record/bogacs/false_pool.rb +87 -53
- data/lib/active_record/bogacs/pool_support.rb +26 -8
- data/lib/active_record/bogacs/shareable_pool.rb +11 -15
- data/lib/active_record/bogacs/thread_safe/synchronized.rb +18 -22
- data/lib/active_record/bogacs/thread_safe.rb +3 -90
- data/lib/active_record/bogacs/validator.rb +14 -19
- data/lib/active_record/bogacs/version.rb +1 -1
- data/lib/active_record/connection_adapters/adapter_compat.rb +41 -25
- data/lib/active_record/connection_adapters/pool_class.rb +33 -2
- data/test/active_record/bogacs/false_pool_test.rb +66 -78
- data/test/active_record/bogacs/shareable_pool/connection_pool_test.rb +6 -3
- data/test/active_record/bogacs/shareable_pool/connection_sharing_test.rb +3 -2
- data/test/active_record/bogacs/shareable_pool_helper.rb +1 -1
- data/test/active_record/bogacs/validator_test.rb +22 -28
- data/test/active_record/connection_pool_test_methods.rb +24 -20
- data/test/test_helper.rb +40 -25
- metadata +30 -17
data/test/test_helper.rb
CHANGED
@@ -24,6 +24,8 @@ require 'arjdbc' if defined? JRUBY_VERSION
|
|
24
24
|
require 'logger'
|
25
25
|
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
26
26
|
|
27
|
+
puts "testing with ActiveRecord #{ActiveRecord::VERSION::STRING}"
|
28
|
+
|
27
29
|
#shared_pool = ENV['AR_POOL_SHARED'] ? # with AR_POOL_SHARED=true use default
|
28
30
|
# ( ENV['AR_POOL_SHARED'] == 'true' ? shared_pool : ENV['AR_POOL_SHARED'] ) :
|
29
31
|
# shared_pool
|
@@ -112,13 +114,8 @@ end
|
|
112
114
|
module ActiveRecord
|
113
115
|
module Bogacs
|
114
116
|
|
115
|
-
|
116
|
-
|
117
|
-
Atomic = Concurrent::AtomicReference
|
118
|
-
rescue LoadError
|
119
|
-
require 'atomic'
|
120
|
-
Atomic = ::Atomic
|
121
|
-
end
|
117
|
+
require 'concurrent/atomic/atomic_reference'
|
118
|
+
Atomic = Concurrent::AtomicReference
|
122
119
|
|
123
120
|
module TestHelper
|
124
121
|
|
@@ -161,7 +158,12 @@ module ActiveRecord
|
|
161
158
|
module_function
|
162
159
|
|
163
160
|
def current_connection_config
|
164
|
-
|
161
|
+
connected = ActiveRecord::Base.connection_pool.connected?
|
162
|
+
if ActiveRecord::Base.connection.respond_to?(:config)
|
163
|
+
ActiveRecord::Base.connection.config.tap do # always an updated config, e.g. after mysql2_connection(config)
|
164
|
+
ActiveRecord::Base.connection_pool.disconnect! unless connected # restore pool state to avoid test surprises
|
165
|
+
end
|
166
|
+
elsif ActiveRecord::Base.respond_to?(:connection_config)
|
165
167
|
ActiveRecord::Base.connection_config
|
166
168
|
else
|
167
169
|
ActiveRecord::Base.connection_pool.spec.config
|
@@ -226,8 +228,8 @@ module ActiveRecord
|
|
226
228
|
@@setup_jdbc_context = nil
|
227
229
|
|
228
230
|
def setup_jdbc_context!
|
229
|
-
|
230
|
-
|
231
|
+
load_jar 'test/jars/tomcat-juli.jar'
|
232
|
+
load_jar 'test/jars/tomcat-catalina.jar'
|
231
233
|
|
232
234
|
java.lang.System.set_property(
|
233
235
|
javax.naming.Context::INITIAL_CONTEXT_FACTORY,
|
@@ -251,7 +253,7 @@ module ActiveRecord
|
|
251
253
|
end
|
252
254
|
|
253
255
|
def build_tomcat_jdbc_data_source(ar_jdbc_config = AR_CONFIG)
|
254
|
-
|
256
|
+
load_jar 'test/jars/tomcat-jdbc.jar'
|
255
257
|
|
256
258
|
data_source = org.apache.tomcat.jdbc.pool.DataSource.new
|
257
259
|
configure_dbcp_data_source(data_source, ar_jdbc_config)
|
@@ -262,7 +264,7 @@ module ActiveRecord
|
|
262
264
|
end
|
263
265
|
|
264
266
|
def build_tomcat_dbcp_data_source(ar_jdbc_config = AR_CONFIG)
|
265
|
-
|
267
|
+
load_jar 'test/jars/tomcat-dbcp.jar'
|
266
268
|
|
267
269
|
data_source = org.apache.tomcat.dbcp.dbcp.BasicDataSource.new
|
268
270
|
configure_dbcp_data_source(data_source, ar_jdbc_config)
|
@@ -273,7 +275,7 @@ module ActiveRecord
|
|
273
275
|
end
|
274
276
|
|
275
277
|
def build_commons_dbcp_data_source(ar_jdbc_config = AR_CONFIG)
|
276
|
-
|
278
|
+
load_jar Dir.glob('test/jars/{commons-dbcp}*.jar').first
|
277
279
|
|
278
280
|
data_source = org.apache.tomcat.dbcp.dbcp.BasicDataSource.new
|
279
281
|
configure_dbcp_data_source(data_source, ar_jdbc_config)
|
@@ -299,11 +301,9 @@ module ActiveRecord
|
|
299
301
|
properties.each { |name, value| db_properties.put(name, value.to_s) }
|
300
302
|
data_source.setDbProperties db_properties
|
301
303
|
else # Tomcat-DBCP / Commons DBCP2
|
302
|
-
|
303
|
-
|
304
|
-
|str, name, val| str << "[#{name}=#{val};]"; str
|
304
|
+
properties.each do |name, val|
|
305
|
+
data_source.addConnectionProperty name, val.to_s
|
305
306
|
end
|
306
|
-
data_source.setConnectionProperties connection_properties
|
307
307
|
end
|
308
308
|
end
|
309
309
|
# JDBC pool tunings (some mapped from AR configuration) :
|
@@ -327,7 +327,7 @@ module ActiveRecord
|
|
327
327
|
private :configure_dbcp_data_source
|
328
328
|
|
329
329
|
def build_c3p0_data_source(ar_jdbc_config = AR_CONFIG)
|
330
|
-
Dir.glob('test/jars/{c3p0,mchange-commons}*.jar').each { |jar|
|
330
|
+
Dir.glob('test/jars/{c3p0,mchange-commons}*.jar').each { |jar| load_jar jar }
|
331
331
|
|
332
332
|
data_source = com.mchange.v2.c3p0.ComboPooledDataSource.new
|
333
333
|
configure_c3p0_data_source(data_source, ar_jdbc_config)
|
@@ -373,15 +373,15 @@ module ActiveRecord
|
|
373
373
|
|
374
374
|
|
375
375
|
def build_hikari_data_source(ar_jdbc_config = AR_CONFIG)
|
376
|
-
unless hikari_jar = Dir.glob('test/jars/HikariCP*.jar').last
|
376
|
+
unless hikari_jar = Dir.glob('test/jars/HikariCP*.jar').sort.last
|
377
377
|
raise 'HikariCP jar not found in test/jars directory'
|
378
378
|
end
|
379
379
|
if ( version = File.basename(hikari_jar, '.jar').match(/\-([\w\.\-]$)/) ) && version[1] < '2.3.9'
|
380
|
-
Dir.glob('test/jars/{javassist,slf4j}*.jar').each { |jar|
|
380
|
+
Dir.glob('test/jars/{javassist,slf4j}*.jar').each { |jar| load_jar jar }
|
381
381
|
else
|
382
|
-
Dir.glob('test/jars/{slf4j}*.jar').each { |jar|
|
382
|
+
Dir.glob('test/jars/{slf4j}*.jar').each { |jar| load_jar jar }
|
383
383
|
end
|
384
|
-
|
384
|
+
load_jar hikari_jar
|
385
385
|
|
386
386
|
configure_hikari_data_source(ar_jdbc_config)
|
387
387
|
end
|
@@ -396,7 +396,12 @@ module ActiveRecord
|
|
396
396
|
|
397
397
|
case driver
|
398
398
|
when /mysql/i
|
399
|
-
|
399
|
+
data_source_class_name = if driver == 'com.mysql.cj.jdbc.Driver'
|
400
|
+
'com.mysql.cj.jdbc.MysqlDataSource' # driver 8.0
|
401
|
+
else
|
402
|
+
'com.mysql.jdbc.jdbc2.optional.MysqlDataSource' # old 5.x
|
403
|
+
end
|
404
|
+
hikari_config.setDataSourceClassName data_source_class_name
|
400
405
|
hikari_config.addDataSourceProperty 'serverName', ar_jdbc_config[:host] || 'localhost'
|
401
406
|
hikari_config.addDataSourceProperty 'databaseName', ar_jdbc_config[:database]
|
402
407
|
hikari_config.addDataSourceProperty 'port', ar_jdbc_config[:port] if ar_jdbc_config[:port]
|
@@ -407,7 +412,7 @@ module ActiveRecord
|
|
407
412
|
hikari_config.addDataSourceProperty 'password', ar_jdbc_config[:password]
|
408
413
|
end
|
409
414
|
( ar_jdbc_config[:properties] || {} ).each do |name, val|
|
410
|
-
hikari_config.addDataSourceProperty name.to_s, val.to_s
|
415
|
+
hikari_config.addDataSourceProperty name.to_s, val.to_s unless name.eql?('useLegacyDatetimeCode')
|
411
416
|
end
|
412
417
|
when /postgres/i
|
413
418
|
hikari_config.setDataSourceClassName 'org.postgresql.ds.PGSimpleDataSource'
|
@@ -478,6 +483,16 @@ module ActiveRecord
|
|
478
483
|
|
479
484
|
def jndi_name; 'jdbc/TestDB' end
|
480
485
|
|
486
|
+
private
|
487
|
+
|
488
|
+
def load_jar(jar)
|
489
|
+
abs_jar = File.expand_path(jar)
|
490
|
+
unless File.file?(abs_jar)
|
491
|
+
raise "path does not exist or is not a file: #{jar}"
|
492
|
+
end
|
493
|
+
load abs_jar
|
494
|
+
end
|
495
|
+
|
481
496
|
end
|
482
497
|
end
|
483
|
-
end
|
498
|
+
end
|
metadata
CHANGED
@@ -1,43 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-bogacs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karol Bucek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-08-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
|
-
- - "
|
16
|
+
- - "<"
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: '
|
19
|
-
name:
|
18
|
+
version: '6'
|
19
|
+
name: activerecord
|
20
20
|
prerelease: false
|
21
|
-
type: :
|
21
|
+
type: :runtime
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "<"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
30
|
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '1.0'
|
33
|
+
name: concurrent-ruby
|
34
|
+
prerelease: false
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
33
47
|
name: rake
|
34
48
|
prerelease: false
|
35
49
|
type: :development
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- - "
|
52
|
+
- - ">="
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
requirement: !ruby/object:Gem::Requirement
|
43
57
|
requirements:
|
@@ -59,6 +73,7 @@ executables: []
|
|
59
73
|
extensions: []
|
60
74
|
extra_rdoc_files: []
|
61
75
|
files:
|
76
|
+
- ".github/workflows/test.yml"
|
62
77
|
- ".gitignore"
|
63
78
|
- ".travis.yml"
|
64
79
|
- Gemfile
|
@@ -112,14 +127,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
127
|
- !ruby/object:Gem::Version
|
113
128
|
version: '0'
|
114
129
|
requirements: []
|
115
|
-
|
116
|
-
rubygems_version: 2.6.13
|
130
|
+
rubygems_version: 3.1.6
|
117
131
|
signing_key:
|
118
132
|
specification_version: 4
|
119
|
-
summary:
|
120
|
-
for ActiveRecord'
|
121
|
-
with an API that is compatible with older AR versions.
|
122
|
-
or thread_safe gem.'
|
133
|
+
summary: Bogacs contains several pool implementations that can be used as a replacement
|
134
|
+
for ActiveRecord's built-in pool, e.g. DefaultPool is an upstream tuned version
|
135
|
+
with an API that is compatible with older AR versions.
|
123
136
|
test_files:
|
124
137
|
- test/active_record/bogacs/default_pool_test.rb
|
125
138
|
- test/active_record/bogacs/false_pool_test.rb
|