active_record_host_pool 1.2.0 → 1.2.2

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
  SHA256:
3
- metadata.gz: f5dcc0c95ead619555c18514507bf2711f7790c7e120570a5daaadf6506f1250
4
- data.tar.gz: 37d82a6b2c495872cfa5522bd588c7dd047afa5b9cdc376acd9a9c96aba21d44
3
+ metadata.gz: 798f8b22ed7ed2801d40f3aaeb653ad4882ab3523daa1d93183b659adb5c3941
4
+ data.tar.gz: ccf81d17ac0e64a4b727b0aff13ac208514104c34e20536818fe4983efbde390
5
5
  SHA512:
6
- metadata.gz: dd36a23cbb9636ba2dda0f303776715e05aef42ddecafa583388b32c7c11adcae6a0285743eede486712559d20309fa5fe834bd44a9bc539c2cc985c3f80c344
7
- data.tar.gz: d18bec930c1c6358d310461bd958fa3d92baee83e7de0d629783610809aea7f552ef98a1cc7482707cd8eaef4d592321a00f2210302132c31fead5d27b471962
6
+ metadata.gz: 656affbe8e6eccff5d653cdbe7f560e6b48738dabfdd67187deadd76b6f46b51aef3ce96bf0955a52e6e74718b3c7e1a8664f74d69ba9458a17f48c8f85eecd2
7
+ data.tar.gz: 37c92ee23f9c58320b6be0011c80de891d0d518b7cc0a5481e2f8028b4d804e399dbc67dcc30aa4b807673ea7033357d29ddccf519d9d6210f64bac47d0584e5
@@ -29,10 +29,10 @@ if ActiveRecord.version >= Gem::Version.new('6.0')
29
29
 
30
30
  def clear_on_handler(handler)
31
31
  handler.all_connection_pools.each do |pool|
32
- db_was = pool.connection.unproxied._host_pool_current_database
33
- pool.connection.clear_query_cache if pool.active_connection?
32
+ db_was = pool._unproxied_connection._host_pool_current_database
33
+ pool._unproxied_connection.clear_query_cache if pool.active_connection?
34
34
  ensure
35
- pool.connection.unproxied._host_pool_current_database = db_was
35
+ pool._unproxied_connection._host_pool_current_database = db_was
36
36
  end
37
37
  end
38
38
  end
@@ -8,11 +8,6 @@ module ActiveRecordHostPool
8
8
  base.class_eval do
9
9
  attr_reader(:_host_pool_current_database)
10
10
 
11
- def _host_pool_current_database=(database)
12
- @_host_pool_current_database = database
13
- @config[:database] = _host_pool_current_database
14
- end
15
-
16
11
  alias_method :execute_without_switching, :execute
17
12
  alias_method :execute, :execute_with_switching
18
13
 
@@ -32,12 +27,17 @@ module ActiveRecordHostPool
32
27
  super
33
28
  end
34
29
 
30
+ def _host_pool_current_database=(database)
31
+ @_host_pool_current_database = database
32
+ @config[:database] = _host_pool_current_database
33
+ end
34
+
35
35
  def self.ruby2_keywords(*); end unless respond_to?(:ruby2_keywords, true)
36
- ruby2_keywords def execute_with_switching(*args)
36
+ ruby2_keywords def execute_with_switching(*args, **kwargs)
37
37
  if _host_pool_current_database && !_no_switch
38
38
  _switch_connection
39
39
  end
40
- execute_without_switching(*args)
40
+ execute_without_switching(*args, **kwargs)
41
41
  end
42
42
 
43
43
  def drop_database_with_no_switching(*args)
@@ -34,13 +34,17 @@ module ActiveRecordHostPool
34
34
  attr_reader :pool_config
35
35
 
36
36
  def connection(*args)
37
- real_connection = _connection_pool.connection(*args)
37
+ real_connection = _unproxied_connection(*args)
38
38
  _connection_proxy_for(real_connection, @config[:database])
39
39
  rescue Mysql2::Error, ActiveRecord::NoDatabaseError
40
40
  _connection_pools.delete(_pool_key)
41
41
  Kernel.raise
42
42
  end
43
43
 
44
+ def _unproxied_connection(*args)
45
+ _connection_pool.connection(*args)
46
+ end
47
+
44
48
  # by the time we are patched into ActiveRecord, the current thread has already established
45
49
  # a connection. thus we need to patch both connection and checkout/checkin
46
50
  def checkout(*args, &block)
@@ -36,13 +36,17 @@ module ActiveRecordHostPool
36
36
  attr_reader :spec
37
37
 
38
38
  def connection(*args)
39
- real_connection = _connection_pool.connection(*args)
39
+ real_connection = _unproxied_connection(*args)
40
40
  _connection_proxy_for(real_connection, @config[:database])
41
41
  rescue Mysql2::Error, ActiveRecord::NoDatabaseError
42
42
  _connection_pools.delete(_pool_key)
43
43
  Kernel.raise
44
44
  end
45
45
 
46
+ def _unproxied_connection(*args)
47
+ _connection_pool.connection(*args)
48
+ end
49
+
46
50
  # by the time we are patched into ActiveRecord, the current thread has already established
47
51
  # a connection. thus we need to patch both connection and checkout/checkin
48
52
  def checkout(*args, &block)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveRecordHostPool
4
- VERSION = "1.2.0"
4
+ VERSION = "1.2.2"
5
5
  end
data/test/helper.rb CHANGED
@@ -5,7 +5,7 @@ require 'minitest/autorun'
5
5
 
6
6
  require 'active_record_host_pool'
7
7
  require 'logger'
8
- require 'mocha/minitest'
8
+ require 'minitest/mock_expectations'
9
9
  require 'phenix'
10
10
 
11
11
  ENV['RAILS_ENV'] = 'test'
@@ -20,6 +20,8 @@ RAILS_6_1_WITH_NON_LEGACY_CONNECTION_HANDLING =
20
20
 
21
21
  ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + '/test.log')
22
22
 
23
+ Thread.abort_on_exception = true
24
+
23
25
  # BEGIN preventing_writes? patch
24
26
  ## Rails 6.1 by default does not allow writing to replica databases which prevents
25
27
  ## us from properly setting up the test databases. This patch is used in test/schema.rb
data/test/test_arhp.rb CHANGED
@@ -122,18 +122,22 @@ class ActiveRecordHostPoolTest < Minitest::Test
122
122
 
123
123
  def test_no_switch_when_creating_db
124
124
  conn = Pool1DbA.connection
125
- conn.expects(:execute_without_switching)
126
- conn.expects(:_switch_connection).never
127
- assert conn._host_pool_current_database
128
- conn.create_database(:some_args)
125
+ assert_called(conn, :execute_without_switching) do
126
+ refute_called(conn, :_switch_connection) do
127
+ assert conn._host_pool_current_database
128
+ conn.create_database(:some_args)
129
+ end
130
+ end
129
131
  end
130
132
 
131
133
  def test_no_switch_when_dropping_db
132
134
  conn = Pool1DbA.connection
133
- conn.expects(:execute_without_switching)
134
- conn.expects(:_switch_connection).never
135
- assert conn._host_pool_current_database
136
- conn.drop_database(:some_args)
135
+ assert_called(conn, :execute_without_switching) do
136
+ refute_called(conn, :_switch_connection) do
137
+ assert conn._host_pool_current_database
138
+ conn.drop_database(:some_args)
139
+ end
140
+ end
137
141
  end
138
142
 
139
143
  def test_underlying_assumption_about_test_db
@@ -163,8 +167,9 @@ class ActiveRecordHostPoolTest < Minitest::Test
163
167
  thread_id = switch_to_klass.connection.select_value('select @@pseudo_thread_id')
164
168
 
165
169
  # now, disable our auto-switching and trigger a mysql reconnect
166
- switch_to_klass.connection.unproxied.stubs(:_switch_connection).returns(true)
167
- Pool2DbD.connection.execute("KILL #{thread_id}")
170
+ switch_to_klass.connection.unproxied.stub(:_switch_connection, true) do
171
+ Pool2DbD.connection.execute("KILL #{thread_id}")
172
+ end
168
173
 
169
174
  # and finally, did mysql reconnect correctly?
170
175
  puts "\nAnd now we end up on #{current_database(switch_to_klass)}" if debug_me
@@ -174,7 +179,8 @@ class ActiveRecordHostPoolTest < Minitest::Test
174
179
  def test_release_connection
175
180
  pool = ActiveRecord::Base.connection_pool
176
181
  conn = pool.connection
177
- pool.expects(:checkin).with(conn)
178
- pool.release_connection
182
+ assert_called_with(pool, :checkin, [conn]) do
183
+ pool.release_connection
184
+ end
179
185
  end
180
186
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_host_pool
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Quorning
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2022-10-13 00:00:00.000000000 Z
14
+ date: 2023-01-18 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activerecord
@@ -76,19 +76,19 @@ dependencies:
76
76
  - !ruby/object:Gem::Version
77
77
  version: 5.10.0
78
78
  - !ruby/object:Gem::Dependency
79
- name: mocha
79
+ name: minitest-mock_expectations
80
80
  requirement: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - ">="
82
+ - - "~>"
83
83
  - !ruby/object:Gem::Version
84
- version: 1.4.0
84
+ version: 1.1.3
85
85
  type: :development
86
86
  prerelease: false
87
87
  version_requirements: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - ">="
89
+ - - "~>"
90
90
  - !ruby/object:Gem::Version
91
- version: 1.4.0
91
+ version: 1.1.3
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: phenix
94
94
  requirement: !ruby/object:Gem::Requirement
@@ -131,20 +131,6 @@ dependencies:
131
131
  - - "~>"
132
132
  - !ruby/object:Gem::Version
133
133
  version: 0.80.0
134
- - !ruby/object:Gem::Dependency
135
- name: shoulda
136
- requirement: !ruby/object:Gem::Requirement
137
- requirements:
138
- - - ">="
139
- - !ruby/object:Gem::Version
140
- version: '0'
141
- type: :development
142
- prerelease: false
143
- version_requirements: !ruby/object:Gem::Requirement
144
- requirements:
145
- - - ">="
146
- - !ruby/object:Gem::Version
147
- version: '0'
148
134
  description: ''
149
135
  email:
150
136
  - bquorning@zendesk.com