fresh_connection 0.1.0 → 0.1.1
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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3707472745859247112e68f0b348876811dcea97
|
4
|
+
data.tar.gz: 032461a6457f8ff4b5f566ef54e4ace7160aeebd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 504d3589083726b6403c1e828dbe5d4b692e6b0bd695c21422a23daad8f6427dc8151fb9f00dd1dd18c4929189dbbf621d736e7fc176b52fa9fe8f7d17e87649
|
7
|
+
data.tar.gz: ead47efa46d780b2a1e0586c2a5be2347c1f4e8bf7a47323d38cd8b90d9f33af344d874642792a8c59ba01b3444627f24bca04ad33825b7a1c67a708c359076f
|
data/fresh_connection.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency 'activerecord', '
|
21
|
+
spec.add_dependency 'activerecord', '>= 3.2.0'
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
24
24
|
spec.add_development_dependency "rake"
|
@@ -13,11 +13,11 @@ module ActiveRecord
|
|
13
13
|
private
|
14
14
|
|
15
15
|
def change_connection
|
16
|
-
|
17
|
-
@connection, FreshConnection::SlaveConnection.
|
16
|
+
master_connection, @connection =
|
17
|
+
@connection, FreshConnection::SlaveConnection.raw_connection
|
18
18
|
yield
|
19
19
|
ensure
|
20
|
-
@connection =
|
20
|
+
@connection = master_connection
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -5,18 +5,20 @@ module ActiveRecord
|
|
5
5
|
def exec_queries_with_slave_connection
|
6
6
|
return @records if loaded?
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
elsif go_slave?
|
11
|
-
FreshConnection::SlaveConnection.slave_access { exec_queries_without_slave_connection }
|
12
|
-
else
|
13
|
-
FreshConnection::SlaveConnection.master_access { exec_queries_without_slave_connection }
|
8
|
+
FreshConnection::SlaveConnection.manage_access(@klass.name, go_slave?) do
|
9
|
+
exec_queries_without_slave_connection
|
14
10
|
end
|
15
11
|
end
|
16
12
|
alias_method_chain :exec_queries, :slave_connection
|
17
13
|
|
18
|
-
|
19
|
-
|
14
|
+
if Rails.version.to_f > 3
|
15
|
+
def go_slave?
|
16
|
+
connection.open_transactions == 0 && (readonly_value.nil? || readonly_value)
|
17
|
+
end
|
18
|
+
else
|
19
|
+
def go_slave?
|
20
|
+
connection.open_transactions == 0 && (@readonly_value.nil? || @readonly_value)
|
21
|
+
end
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
@@ -6,8 +6,8 @@ module FreshConnection
|
|
6
6
|
class << self
|
7
7
|
attr_writer :ignore_models, :ignore_configure_connection, :master_clear_connection
|
8
8
|
|
9
|
-
def
|
10
|
-
slave_connection
|
9
|
+
def raw_connection
|
10
|
+
slave_connection.raw_connection
|
11
11
|
end
|
12
12
|
|
13
13
|
def clear_all_connections!
|
@@ -17,26 +17,18 @@ module FreshConnection
|
|
17
17
|
@slave_connections = {}
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
def force_master_access
|
35
|
-
now_target = Thread.current[TARGET]
|
36
|
-
Thread.current[TARGET] = :master
|
37
|
-
yield
|
38
|
-
ensure
|
39
|
-
Thread.current[TARGET] = now_target
|
20
|
+
def manage_access(model_name, go_slave, &block)
|
21
|
+
if ignore_model?(model_name)
|
22
|
+
force_master_access(&block)
|
23
|
+
else
|
24
|
+
target = go_slave ? :slave : :master
|
25
|
+
begin
|
26
|
+
access_in(target)
|
27
|
+
block.call
|
28
|
+
ensure
|
29
|
+
access_out
|
30
|
+
end
|
31
|
+
end
|
40
32
|
end
|
41
33
|
|
42
34
|
def slave_access?
|
@@ -57,6 +49,14 @@ module FreshConnection
|
|
57
49
|
|
58
50
|
private
|
59
51
|
|
52
|
+
def force_master_access
|
53
|
+
now_target = Thread.current[TARGET]
|
54
|
+
Thread.current[TARGET] = :master
|
55
|
+
yield
|
56
|
+
ensure
|
57
|
+
Thread.current[TARGET] = now_target
|
58
|
+
end
|
59
|
+
|
60
60
|
def access_in(target)
|
61
61
|
Thread.current[COUNT] = (Thread.current[COUNT] || 0) + 1
|
62
62
|
Thread.current[TARGET] ||= target
|
@@ -70,7 +70,6 @@ module FreshConnection
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
|
74
73
|
def slave_connection
|
75
74
|
@slave_connections ||= {}
|
76
75
|
@slave_connections[current_thread_id] ||= new_connection
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fresh_connection
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tsukasa OISHI
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 3.2.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 3.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|