active_record_shards 3.9.2 → 3.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/active_record_shards.rb +3 -3
- data/lib/active_record_shards/connection_handler.rb +1 -0
- data/lib/active_record_shards/connection_specification.rb +3 -2
- data/lib/active_record_shards/connection_switcher.rb +7 -6
- data/lib/active_record_shards/default_slave_patches.rb +24 -19
- data/lib/{active_record_shards-3-2.rb → active_record_shards/patches-3-2.rb} +0 -0
- data/lib/{active_record_shards-4-2.rb → active_record_shards/patches-4-2.rb} +0 -0
- data/lib/{active_record_shards-5-0.rb → active_record_shards/patches-5-0.rb} +0 -0
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4910854dd97e92f0aab3a997b23c4f830d98e66f
|
4
|
+
data.tar.gz: df78f89f7245ab25bd3ca40c06990ceb929b66f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b25b5bd49ed22d0ca64d951b4384533711c0ee6451bd881fd6756786f97b3747ed10392756b1161460a0dc54f44a68c06847cb62f7e1387f568402405227411e
|
7
|
+
data.tar.gz: e29b7d4237ed37008edc25450b75bc620c3f10f50855ce7403334098be94b91a127297969c9bd4d6415f3ba106d626d9252fe39fc9ce94452a4e774b9d6a3e5c
|
data/lib/active_record_shards.rb
CHANGED
@@ -27,11 +27,11 @@ ActiveRecord::Associations::CollectionProxy.include(ActiveRecordShards::Associat
|
|
27
27
|
|
28
28
|
case "#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}"
|
29
29
|
when '3.2'
|
30
|
-
require 'active_record_shards-3-2'
|
30
|
+
require 'active_record_shards/patches-3-2'
|
31
31
|
when '4.2'
|
32
|
-
require 'active_record_shards-4-2'
|
32
|
+
require 'active_record_shards/patches-4-2'
|
33
33
|
when '5.0', '5.1'
|
34
|
-
require 'active_record_shards-5-0'
|
34
|
+
require 'active_record_shards/patches-5-0'
|
35
35
|
else
|
36
36
|
raise "ActiveRecordShards is not compatible with #{ActiveRecord::VERSION::STRING}"
|
37
37
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
ActiveRecord::ConnectionAdapters::ConnectionHandler.class_eval do
|
3
|
+
remove_method :retrieve_connection_pool
|
3
4
|
if ActiveRecord::VERSION::MAJOR >= 4
|
4
5
|
def retrieve_connection_pool(klass)
|
5
6
|
class_to_pool[klass.connection_pool_name] ||= pool_for(klass)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
ActiveRecord::Base
|
3
|
-
|
2
|
+
class << ActiveRecord::Base
|
3
|
+
remove_method :establish_connection unless ActiveRecord::VERSION::MAJOR == 4
|
4
|
+
def establish_connection(spec = ENV["DATABASE_URL"])
|
4
5
|
if ActiveRecord::VERSION::MAJOR >= 4
|
5
6
|
spec ||= ActiveRecord::ConnectionHandling::DEFAULT_ENV.call
|
6
7
|
spec = spec.to_sym if spec.is_a?(String)
|
@@ -95,24 +95,25 @@ module ActiveRecordShards
|
|
95
95
|
alias_method :with_slave_if, :on_slave_if
|
96
96
|
alias_method :with_slave_unless, :on_slave_unless
|
97
97
|
|
98
|
-
def on_cx_switch_block(which,
|
98
|
+
def on_cx_switch_block(which, force: false, construct_ro_scope: nil, &block)
|
99
99
|
@disallow_slave ||= 0
|
100
|
+
@disallow_slave += 1 if which == :master
|
101
|
+
|
102
|
+
switch_to_slave = force || @disallow_slave.zero?
|
100
103
|
old_options = current_shard_selection.options
|
101
|
-
switch_to_slave = (which == :slave && @disallow_slave.zero?)
|
102
|
-
switch_connection(slave: switch_to_slave)
|
103
104
|
|
104
|
-
|
105
|
+
switch_connection(slave: switch_to_slave)
|
105
106
|
|
106
107
|
# we avoid_readonly_scope to prevent some stack overflow problems, like when
|
107
108
|
# .columns calls .with_scope which calls .columns and onward, endlessly.
|
108
|
-
if self == ActiveRecord::Base || !switch_to_slave ||
|
109
|
+
if self == ActiveRecord::Base || !switch_to_slave || construct_ro_scope == false
|
109
110
|
yield
|
110
111
|
else
|
111
112
|
readonly.scoping(&block)
|
112
113
|
end
|
113
114
|
ensure
|
114
115
|
@disallow_slave -= 1 if which == :master
|
115
|
-
switch_connection(old_options)
|
116
|
+
switch_connection(old_options) if old_options
|
116
117
|
end
|
117
118
|
|
118
119
|
def supports_sharding?
|
@@ -25,27 +25,29 @@ module ActiveRecordShards
|
|
25
25
|
RUBY
|
26
26
|
end
|
27
27
|
|
28
|
-
def
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
else
|
33
|
-
:master
|
34
|
-
end
|
35
|
-
|
36
|
-
on_cx_switch_block(read_columns_from, construct_ro_scope: false) { columns_without_default_slave(*args, &block) }
|
28
|
+
def columns_with_force_slave(*args, &block)
|
29
|
+
on_cx_switch_block(:slave, construct_ro_scope: false, force: true) do
|
30
|
+
columns_without_force_slave(*args, &block)
|
31
|
+
end
|
37
32
|
end
|
38
33
|
|
39
|
-
def
|
40
|
-
|
41
|
-
|
42
|
-
Thread.current[:_active_record_shards_slave_off] = true
|
34
|
+
def table_exists_with_force_slave?(*args, &block)
|
35
|
+
on_cx_switch_block(:slave, construct_ro_scope: false, force: true) do
|
36
|
+
table_exists_without_force_slave?(*args, &block)
|
43
37
|
end
|
38
|
+
end
|
44
39
|
|
45
|
-
|
46
|
-
ensure
|
40
|
+
def transaction_with_slave_off(*args, &block)
|
47
41
|
if on_slave_by_default?
|
48
|
-
|
42
|
+
begin
|
43
|
+
old_val = Thread.current[:_active_record_shards_slave_off]
|
44
|
+
Thread.current[:_active_record_shards_slave_off] = true
|
45
|
+
transaction_without_slave_off(*args, &block)
|
46
|
+
ensure
|
47
|
+
Thread.current[:_active_record_shards_slave_off] = old_val
|
48
|
+
end
|
49
|
+
else
|
50
|
+
transaction_without_slave_off(*args, &block)
|
49
51
|
end
|
50
52
|
end
|
51
53
|
|
@@ -60,7 +62,7 @@ module ActiveRecordShards
|
|
60
62
|
end
|
61
63
|
end
|
62
64
|
|
63
|
-
CLASS_SLAVE_METHODS = [:find_by_sql, :count_by_sql, :calculate, :find_one, :find_some, :find_every, :exists
|
65
|
+
CLASS_SLAVE_METHODS = [:find_by_sql, :count_by_sql, :calculate, :find_one, :find_some, :find_every, :exists?].freeze
|
64
66
|
|
65
67
|
def self.extended(base)
|
66
68
|
CLASS_SLAVE_METHODS.each { |m| ActiveRecordShards::DefaultSlavePatches.wrap_method_in_on_slave(true, base, m) }
|
@@ -72,8 +74,11 @@ module ActiveRecordShards
|
|
72
74
|
alias_method :reload, :reload_with_slave_off
|
73
75
|
|
74
76
|
class << self
|
75
|
-
alias_method :
|
76
|
-
alias_method :columns, :
|
77
|
+
alias_method :columns_without_force_slave, :columns
|
78
|
+
alias_method :columns, :columns_with_force_slave
|
79
|
+
|
80
|
+
alias_method :table_exists_without_force_slave?, :table_exists?
|
81
|
+
alias_method :table_exists?, :table_exists_with_force_slave?
|
77
82
|
|
78
83
|
alias_method :transaction_without_slave_off, :transaction
|
79
84
|
alias_method :transaction, :transaction_with_slave_off
|
File without changes
|
File without changes
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_record_shards
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mick Staugaard
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-
|
13
|
+
date: 2017-09-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
@@ -114,14 +114,14 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - '='
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.
|
117
|
+
version: 0.49.1
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - '='
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
124
|
+
version: 0.49.1
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: minitest
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -188,9 +188,6 @@ extensions: []
|
|
188
188
|
extra_rdoc_files: []
|
189
189
|
files:
|
190
190
|
- README.md
|
191
|
-
- lib/active_record_shards-3-2.rb
|
192
|
-
- lib/active_record_shards-4-2.rb
|
193
|
-
- lib/active_record_shards-5-0.rb
|
194
191
|
- lib/active_record_shards.rb
|
195
192
|
- lib/active_record_shards/association_collection_connection_selection.rb
|
196
193
|
- lib/active_record_shards/configuration_parser.rb
|
@@ -204,6 +201,9 @@ files:
|
|
204
201
|
- lib/active_record_shards/default_slave_patches.rb
|
205
202
|
- lib/active_record_shards/migration.rb
|
206
203
|
- lib/active_record_shards/model.rb
|
204
|
+
- lib/active_record_shards/patches-3-2.rb
|
205
|
+
- lib/active_record_shards/patches-4-2.rb
|
206
|
+
- lib/active_record_shards/patches-5-0.rb
|
207
207
|
- lib/active_record_shards/schema_dumper_extension.rb
|
208
208
|
- lib/active_record_shards/shard_selection.rb
|
209
209
|
- lib/active_record_shards/shard_support.rb
|