active_record_shards 2.5.8 → 2.5.9
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.
@@ -39,12 +39,7 @@ module ActiveRecordShards
|
|
39
39
|
reflection = @association_collection.proxy_reflection
|
40
40
|
end
|
41
41
|
|
42
|
-
|
43
|
-
when :slave
|
44
|
-
reflection.klass.on_slave_block { @association_collection.send(method, *args, &block) }
|
45
|
-
when :master
|
46
|
-
reflection.klass.on_master_block { @association_collection.send(method, *args, &block) }
|
47
|
-
end
|
42
|
+
reflection.klass.on_cx_switch_block(@which) { @association_collection.send(method, *args, &block) }
|
48
43
|
end
|
49
44
|
end
|
50
45
|
end
|
@@ -55,12 +55,7 @@ module ActiveRecordShards
|
|
55
55
|
|
56
56
|
def on_master_or_slave(which, &block)
|
57
57
|
if block_given?
|
58
|
-
|
59
|
-
when :master
|
60
|
-
on_master_block(&block)
|
61
|
-
when :slave
|
62
|
-
on_slave_block(&block)
|
63
|
-
end
|
58
|
+
on_cx_switch_block(which, &block)
|
64
59
|
else
|
65
60
|
MasterSlaveProxy.new(self, which)
|
66
61
|
end
|
@@ -88,9 +83,13 @@ module ActiveRecordShards
|
|
88
83
|
alias_method :with_slave_if, :on_slave_if
|
89
84
|
alias_method :with_slave_unless, :on_slave_unless
|
90
85
|
|
91
|
-
def
|
86
|
+
def on_cx_switch_block(which, &block)
|
92
87
|
old_options = current_shard_selection.options
|
93
|
-
|
88
|
+
switch_to_slave = (which == :slave && (@disallow_slave.nil? || @disallow_slave == 0))
|
89
|
+
switch_connection(:slave => switch_to_slave)
|
90
|
+
|
91
|
+
@disallow_slave = (@disallow_slave || 0) + 1 if which == :master
|
92
|
+
|
94
93
|
# setting read-only scope on ActiveRecord::Base never made any sense, anyway
|
95
94
|
if self == ActiveRecord::Base
|
96
95
|
yield
|
@@ -98,18 +97,10 @@ module ActiveRecordShards
|
|
98
97
|
with_scope({:find => {:readonly => on_slave?}}, :merge, &block)
|
99
98
|
end
|
100
99
|
ensure
|
100
|
+
@disallow_slave -= 1 if which == :master
|
101
101
|
switch_connection(old_options)
|
102
102
|
end
|
103
103
|
|
104
|
-
# to make this re-entrant we need to keep a counter.
|
105
|
-
def on_master_block(&block)
|
106
|
-
@disallow_slave ||= 0
|
107
|
-
@disallow_slave += 1
|
108
|
-
yield
|
109
|
-
ensure
|
110
|
-
@disallow_slave -= 1
|
111
|
-
end
|
112
|
-
|
113
104
|
# Name of the connection pool. Used by ConnectionHandler to retrieve the current connection pool.
|
114
105
|
def connection_pool_name # :nodoc:
|
115
106
|
name = @connection_pool_name_override || current_shard_selection.shard_name(self)
|
@@ -24,6 +24,11 @@ module ActiveRecordShards
|
|
24
24
|
self.class.quote_value(*args, &block)
|
25
25
|
end
|
26
26
|
|
27
|
+
def reload_with_slave_off
|
28
|
+
self.class.on_master { reload_without_slave_off }
|
29
|
+
end
|
30
|
+
alias_method_chain :reload, :slave_off
|
31
|
+
|
27
32
|
class << self
|
28
33
|
def transaction_with_slave_off(*args, &block)
|
29
34
|
if on_slave_by_default?
|
@@ -375,6 +375,11 @@ class ConnectionSwitchenTest < ActiveSupport::TestCase
|
|
375
375
|
assert_equal 2, count
|
376
376
|
end
|
377
377
|
|
378
|
+
should "reload() on the master" do
|
379
|
+
account = Account.find(1000)
|
380
|
+
assert_equal 'master_name', account.reload.name
|
381
|
+
end
|
382
|
+
|
378
383
|
should "Allow override using on_master" do
|
379
384
|
model = Account.on_master.find(1000)
|
380
385
|
assert_equal "master_name", model.name
|