master_slave_adapter_tcurdt 0.0.3 → 0.0.4
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.
@@ -1,13 +1,5 @@
|
|
1
1
|
ActiveRecord::Base.class_eval do
|
2
2
|
|
3
|
-
def reload_with_master( options = nil )
|
4
|
-
ActiveRecord::ConnectionAdapters::MasterSlaveAdapter.with_master do
|
5
|
-
reload_without_master( options )
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
alias_method_chain :reload, :master
|
10
|
-
|
11
3
|
class << self
|
12
4
|
|
13
5
|
# Call this method to force a block of code to use the master connection
|
@@ -51,18 +43,6 @@ ActiveRecord::Base.class_eval do
|
|
51
43
|
end
|
52
44
|
end
|
53
45
|
|
54
|
-
def transaction_with_master(*args, &block)
|
55
|
-
if connection.respond_to? :transaction
|
56
|
-
connection.transaction do
|
57
|
-
transaction_without_master(*args, &block)
|
58
|
-
end
|
59
|
-
else
|
60
|
-
transaction_without_master(*args, &block)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
alias_method_chain :transaction, :master
|
64
|
-
|
65
|
-
|
66
46
|
def master_slave_connection( config )
|
67
47
|
config = config.symbolize_keys
|
68
48
|
raise "You must provide a configuration for the master database - #{config.inspect}" if config[:master].blank?
|
@@ -87,12 +67,31 @@ ActiveRecord::Base.class_eval do
|
|
87
67
|
ActiveRecord::ConnectionAdapters::MasterSlaveAdapter.new(config)
|
88
68
|
end
|
89
69
|
|
70
|
+
def transaction_with_master(*args, &block)
|
71
|
+
if connection.respond_to? :transaction
|
72
|
+
connection.transaction do
|
73
|
+
transaction_without_master(*args, &block)
|
74
|
+
end
|
75
|
+
else
|
76
|
+
transaction_without_master(*args, &block)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
alias_method_chain :transaction, :master
|
80
|
+
|
90
81
|
def columns_with_master
|
91
|
-
|
82
|
+
with_master do
|
92
83
|
columns_without_master
|
93
84
|
end
|
94
85
|
end
|
95
86
|
alias_method_chain :columns, :master
|
96
87
|
|
97
88
|
end
|
89
|
+
|
90
|
+
def reload_with_master(options = nil)
|
91
|
+
ActiveRecord::Base.with_master do
|
92
|
+
reload_without_master(options)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
alias_method_chain :reload, :master
|
96
|
+
|
98
97
|
end
|
@@ -152,9 +152,9 @@ module ActiveRecord
|
|
152
152
|
end
|
153
153
|
|
154
154
|
def transaction(*args)
|
155
|
-
puts "<transaction"
|
155
|
+
# puts "<transaction"
|
156
156
|
yield
|
157
|
-
puts "</transaction"
|
157
|
+
# puts "</transaction"
|
158
158
|
update_clock
|
159
159
|
end
|
160
160
|
|
@@ -187,7 +187,7 @@ module ActiveRecord
|
|
187
187
|
private
|
188
188
|
|
189
189
|
def update_clock
|
190
|
-
puts " update clock"
|
190
|
+
# puts " update clock"
|
191
191
|
# update the clock, if there was problem keep using the old one
|
192
192
|
self.current_clock[0] = master_clock || self.current_clock[0]
|
193
193
|
# it's a write so from now on we use the master connection
|
@@ -245,7 +245,7 @@ module ActiveRecord
|
|
245
245
|
end
|
246
246
|
|
247
247
|
def master_clock
|
248
|
-
puts " master clock"
|
248
|
+
# puts " master clock"
|
249
249
|
connection = connect_to_master
|
250
250
|
if status = connection.uncached { connection.select_one("SHOW MASTER STATUS") }
|
251
251
|
Clock.new(status['File'], status['Position'])
|
@@ -253,7 +253,7 @@ module ActiveRecord
|
|
253
253
|
end
|
254
254
|
|
255
255
|
def slave_clock
|
256
|
-
puts " slave clock"
|
256
|
+
# puts " slave clock"
|
257
257
|
connection = connect_to_slave
|
258
258
|
if status = connection.uncached { connection.select_one("SHOW SLAVE STATUS") }
|
259
259
|
Clock.new(status['Relay_Master_Log_File'], status['Exec_Master_Log_Pos'])
|
data/specs/specs.rb
CHANGED
@@ -75,6 +75,9 @@ describe ActiveRecord::ConnectionAdapters::MasterSlaveAdapter do
|
|
75
75
|
|
76
76
|
end
|
77
77
|
|
78
|
+
it "should call 'columns' on master" do
|
79
|
+
end
|
80
|
+
|
78
81
|
ActiveRecord::ConnectionAdapters::MasterSlaveAdapter::SELECT_METHODS.each do |method|
|
79
82
|
|
80
83
|
it "should send the method '#{method}' to the slave connection" do
|
@@ -334,27 +337,27 @@ describe ActiveRecord::ConnectionAdapters::MasterSlaveAdapter do
|
|
334
337
|
|
335
338
|
old_clock = zero
|
336
339
|
new_clock = ActiveRecord::Base.with_consistency(old_clock) do
|
337
|
-
puts "slave: select"
|
340
|
+
# puts "slave: select"
|
338
341
|
ActiveRecord::Base.connection.send('select_all', 'testing') # slave s=0 m=0
|
339
|
-
puts "master: update"
|
342
|
+
# puts "master: update"
|
340
343
|
ActiveRecord::Base.connection.send('update', 'testing') # master s=0 m=1
|
341
|
-
puts "master: select"
|
344
|
+
# puts "master: select"
|
342
345
|
ActiveRecord::Base.connection.send('select_all', 'testing') # master s=0 m=1
|
343
346
|
|
344
347
|
ActiveRecord::Base.transaction do
|
345
|
-
puts "master: select"
|
348
|
+
# puts "master: select"
|
346
349
|
ActiveRecord::Base.connection.send('select_all', 'testing') # master s=0 m=1
|
347
|
-
puts "master: update"
|
350
|
+
# puts "master: update"
|
348
351
|
ActiveRecord::Base.connection.send('update', 'testing') # master s=0 m=1
|
349
|
-
puts "master: select"
|
352
|
+
# puts "master: select"
|
350
353
|
ActiveRecord::Base.connection.send('select_all', 'testing') # master s=0 m=1
|
351
354
|
end
|
352
355
|
|
353
|
-
puts "master: select"
|
356
|
+
# puts "master: select"
|
354
357
|
ActiveRecord::Base.connection.send('select_all', 'testing') # master s=0 m=2
|
355
|
-
puts "master: update"
|
358
|
+
# puts "master: update"
|
356
359
|
ActiveRecord::Base.connection.send('update', 'testing') # master s=0 m=3
|
357
|
-
puts "master: select"
|
360
|
+
# puts "master: select"
|
358
361
|
ActiveRecord::Base.connection.send('select_all', 'testing') # master s=0 m=3
|
359
362
|
end
|
360
363
|
end
|