seamless_database_pool 1.0.3 → 1.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.
data/Rakefile
CHANGED
@@ -22,10 +22,11 @@ end
|
|
22
22
|
|
23
23
|
spec = Gem::Specification.new do |s|
|
24
24
|
s.name = "seamless_database_pool"
|
25
|
-
s.version = "1.0.
|
25
|
+
s.version = "1.0.4"
|
26
26
|
s.author = "Brian Durand"
|
27
27
|
s.platform = Gem::Platform::RUBY
|
28
28
|
s.summary = "Support for master/slave database clusters in ActiveRecord"
|
29
|
+
s.description = "Add support for master/slave database clusters in ActiveRecord to improve performance."
|
29
30
|
s.files = FileList["lib/**/*", "init.rb", "MIT-LICENSE", 'Rakefile'].to_a
|
30
31
|
s.require_path = "lib"
|
31
32
|
s.test_files = FileList["{spec}/**/*_spec.rb"].to_a
|
@@ -199,6 +199,14 @@ module ActiveRecord
|
|
199
199
|
master_connection.delete(sql, name)
|
200
200
|
end
|
201
201
|
|
202
|
+
def execute (*args)
|
203
|
+
proxy_connection_method(current_read_connection, :execute, :read, *args)
|
204
|
+
end
|
205
|
+
|
206
|
+
def select_rows(*args)
|
207
|
+
proxy_connection_method(current_read_connection, :select_rows, :read, *args)
|
208
|
+
end
|
209
|
+
|
202
210
|
def using_master_connection?
|
203
211
|
!!@use_master
|
204
212
|
end
|
@@ -279,10 +287,10 @@ module ActiveRecord
|
|
279
287
|
|
280
288
|
protected
|
281
289
|
|
282
|
-
def select (
|
290
|
+
def select (*args)
|
283
291
|
connection = current_read_connection
|
284
292
|
begin
|
285
|
-
proxy_connection_method(connection, :select, :read, *
|
293
|
+
proxy_connection_method(connection, :select, :read, *args)
|
286
294
|
rescue DatabaseConnectionError => e
|
287
295
|
unless using_master_connection?
|
288
296
|
# Try again with a different connection if needed unless it could have a side effect
|
@@ -291,7 +299,7 @@ module ActiveRecord
|
|
291
299
|
connection = current_read_connection
|
292
300
|
SeamlessDatabasePool.set_persistent_read_connection(self, connection)
|
293
301
|
end
|
294
|
-
proxy_connection_method(connection, :select, :retry, *
|
302
|
+
proxy_connection_method(connection, :select, :retry, *args)
|
295
303
|
else
|
296
304
|
raise e.wrapped_exception
|
297
305
|
end
|
@@ -135,10 +135,22 @@ describe "SeamlessDatabasePoolAdapter" do
|
|
135
135
|
|
136
136
|
it "should proxy select methods to a read connection" do
|
137
137
|
@pool_connection.should_receive(:current_read_connection).and_return(@read_connection_1)
|
138
|
-
@read_connection_1.should_receive(:select).with('SQL'
|
138
|
+
@read_connection_1.should_receive(:select).with('SQL').and_return(:retval)
|
139
139
|
@pool_connection.send(:select, 'SQL').should == :retval
|
140
140
|
end
|
141
141
|
|
142
|
+
it "should proxy execute methods to a read connection" do
|
143
|
+
@pool_connection.should_receive(:current_read_connection).and_return(@read_connection_1)
|
144
|
+
@read_connection_1.should_receive(:execute).with('SQL').and_return(:retval)
|
145
|
+
@pool_connection.execute('SQL').should == :retval
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should proxy select_rows methods to a read connection" do
|
149
|
+
@pool_connection.should_receive(:current_read_connection).and_return(@read_connection_1)
|
150
|
+
@read_connection_1.should_receive(:select_rows).with('SQL').and_return(:retval)
|
151
|
+
@pool_connection.select_rows('SQL').should == :retval
|
152
|
+
end
|
153
|
+
|
142
154
|
# Master connection methods
|
143
155
|
|
144
156
|
it "should proxy insert method to the master connection" do
|
@@ -247,11 +259,11 @@ describe "SeamlessDatabasePoolAdapter" do
|
|
247
259
|
connection_error = ActiveRecord::ConnectionAdapters::SeamlessDatabasePoolAdapter::DatabaseConnectionError.new
|
248
260
|
connection_error.wrapped_exception = StandardError.new("Error")
|
249
261
|
@pool_connection.should_receive(:current_read_connection).and_return(@read_connection_1)
|
250
|
-
@pool_connection.should_receive(:proxy_connection_method).with(@read_connection_1, :select, :read, 'SQL'
|
262
|
+
@pool_connection.should_receive(:proxy_connection_method).with(@read_connection_1, :select, :read, 'SQL').and_raise(connection_error)
|
251
263
|
@read_connection_1.should_receive(:active?).and_return(true)
|
252
264
|
@pool_connection.should_not_receive(:suppress_read_connection)
|
253
265
|
SeamlessDatabasePool.should_not_receive(:set_persistent_read_connection)
|
254
|
-
@pool_connection.should_receive(:proxy_connection_method).with(@read_connection_1, :select, :retry, 'SQL'
|
266
|
+
@pool_connection.should_receive(:proxy_connection_method).with(@read_connection_1, :select, :retry, 'SQL').and_return(:results)
|
255
267
|
@pool_connection.send(:select, 'SQL').should == :results
|
256
268
|
end
|
257
269
|
|
@@ -259,7 +271,7 @@ describe "SeamlessDatabasePoolAdapter" do
|
|
259
271
|
connection_error = ActiveRecord::ConnectionAdapters::SeamlessDatabasePoolAdapter::DatabaseConnectionError.new
|
260
272
|
connection_error.wrapped_exception = StandardError.new("Error")
|
261
273
|
@pool_connection.should_receive(:current_read_connection).and_return(@read_connection_1)
|
262
|
-
@pool_connection.should_receive(:proxy_connection_method).with(@read_connection_1, :select, :read, 'SQL'
|
274
|
+
@pool_connection.should_receive(:proxy_connection_method).with(@read_connection_1, :select, :read, 'SQL').and_raise(connection_error)
|
263
275
|
@pool_connection.use_master_connection do
|
264
276
|
lambda{@pool_connection.send(:select, 'SQL')}.should raise_error("Error")
|
265
277
|
end
|
@@ -267,7 +279,7 @@ describe "SeamlessDatabasePoolAdapter" do
|
|
267
279
|
|
268
280
|
it "should not try to execute a read statement again after a non-connection error" do
|
269
281
|
@pool_connection.should_receive(:current_read_connection).and_return(@read_connection_1)
|
270
|
-
@pool_connection.should_receive(:proxy_connection_method).with(@read_connection_1, :select, :read, 'SQL'
|
282
|
+
@pool_connection.should_receive(:proxy_connection_method).with(@read_connection_1, :select, :read, 'SQL').and_raise("SQL Error")
|
271
283
|
lambda{@pool_connection.send(:select, 'SQL')}.should raise_error("SQL Error")
|
272
284
|
end
|
273
285
|
|
@@ -275,11 +287,11 @@ describe "SeamlessDatabasePoolAdapter" do
|
|
275
287
|
connection_error = ActiveRecord::ConnectionAdapters::SeamlessDatabasePoolAdapter::DatabaseConnectionError.new
|
276
288
|
connection_error.wrapped_exception = StandardError.new("Error")
|
277
289
|
@pool_connection.should_receive(:current_read_connection).and_return(@read_connection_1, @read_connection_2)
|
278
|
-
@pool_connection.should_receive(:proxy_connection_method).with(@read_connection_1, :select, :read, 'SQL'
|
290
|
+
@pool_connection.should_receive(:proxy_connection_method).with(@read_connection_1, :select, :read, 'SQL').and_raise(connection_error)
|
279
291
|
@read_connection_1.should_receive(:active?).and_return(false)
|
280
292
|
@pool_connection.should_receive(:suppress_read_connection).with(@read_connection_1, 30)
|
281
293
|
SeamlessDatabasePool.should_receive(:set_persistent_read_connection).with(@pool_connection, @read_connection_2)
|
282
|
-
@pool_connection.should_receive(:proxy_connection_method).with(@read_connection_2, :select, :retry, 'SQL'
|
294
|
+
@pool_connection.should_receive(:proxy_connection_method).with(@read_connection_2, :select, :retry, 'SQL').and_return(:results)
|
283
295
|
@pool_connection.send(:select, 'SQL').should == :results
|
284
296
|
end
|
285
297
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: seamless_database_pool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Durand
|
@@ -9,11 +9,11 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-05
|
12
|
+
date: 2009-10-05 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description:
|
16
|
+
description: Add support for master/slave database clusters in ActiveRecord to improve performance.
|
17
17
|
email: brian@embellishedvisions.com
|
18
18
|
executables: []
|
19
19
|
|
@@ -60,7 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
60
60
|
requirements:
|
61
61
|
- rspec 1.0.8 or higher is needed to run the tests
|
62
62
|
rubyforge_project: seamlessdbpool
|
63
|
-
rubygems_version: 1.3.
|
63
|
+
rubygems_version: 1.3.5
|
64
64
|
signing_key:
|
65
65
|
specification_version: 3
|
66
66
|
summary: Support for master/slave database clusters in ActiveRecord
|