activerecord-turntable 1.0.1 → 1.1.0
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/CHANGELOG.md +15 -0
- data/README.rdoc +1 -1
- data/activerecord-turntable.gemspec +2 -1
- data/lib/active_record/turntable/active_record_ext/persistence.rb +22 -0
- data/lib/active_record/turntable/base.rb +1 -1
- data/lib/active_record/turntable/pool_proxy.rb +3 -1
- data/lib/active_record/turntable/shard.rb +1 -1
- data/lib/active_record/turntable/version.rb +1 -1
- data/spec/active_record/turntable/active_record_ext/persistence_spec.rb +13 -1
- metadata +80 -78
data/CHANGELOG.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
## activerecord-turntable 1.1.0 ##
|
2
|
+
|
3
|
+
* AR::Base.clear_active_connections! should be proxied to all shards
|
4
|
+
|
5
|
+
* Reduce unnecessary query when reloading
|
6
|
+
|
7
|
+
|
8
|
+
## activerecord-turntable 1.0.1 ##
|
9
|
+
|
10
|
+
* Added missing setting for sequences at README and turntable.yml template.
|
11
|
+
|
12
|
+
|
13
|
+
## activerecord-turntable 1.0.0 ##
|
14
|
+
|
15
|
+
* First Release!
|
data/README.rdoc
CHANGED
@@ -1,5 +1,27 @@
|
|
1
1
|
module ActiveRecord::Turntable::ActiveRecordExt
|
2
2
|
module Persistence
|
3
|
+
::ActiveRecord::Persistence.class_eval do
|
4
|
+
def reload(options = nil)
|
5
|
+
clear_aggregation_cache
|
6
|
+
clear_association_cache
|
7
|
+
|
8
|
+
::ActiveRecord::IdentityMap.without do
|
9
|
+
fresh_object = self.class.unscoped {
|
10
|
+
finder_scope = if turntable_enabled? and self.class.primary_key != self.class.turntable_shard_key.to_s
|
11
|
+
self.class.where(self.class.turntable_shard_key => self.send(turntable_shard_key))
|
12
|
+
else
|
13
|
+
self.class
|
14
|
+
end
|
15
|
+
finder_scope.find(self.id, options)
|
16
|
+
}
|
17
|
+
@attributes.update(fresh_object.instance_variable_get('@attributes'))
|
18
|
+
end
|
19
|
+
|
20
|
+
@attributes_cache = {}
|
21
|
+
self
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
3
25
|
if ActiveRecord::VERSION::STRING < '3.1'
|
4
26
|
::ActiveRecord::Persistence.class_eval do
|
5
27
|
def destroy
|
@@ -77,7 +77,7 @@ module ActiveRecord::Turntable
|
|
77
77
|
raise "Please install the #{config['adapter']} adapter: `gem install activerecord-#{config['adapter']}-adapter` (#{e})"
|
78
78
|
end
|
79
79
|
adapter_method = "#{config['adapter']}_connection"
|
80
|
-
ActiveRecord::Base::ConnectionSpecification.new(config
|
80
|
+
ActiveRecord::Base::ConnectionSpecification.new(config, adapter_method)
|
81
81
|
end
|
82
82
|
|
83
83
|
def clear_all_connections!
|
@@ -45,8 +45,10 @@ module ActiveRecord::Turntable
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
-
%w(disconnect! release_connection clear_all_connections! clear_reloadable_connections! clear_stale_cached_connections! verify_active_connections!).each do |name|
|
48
|
+
%w(disconnect! release_connection clear_all_connections! clear_active_connections! clear_reloadable_connections! clear_stale_cached_connections! verify_active_connections!).each do |name|
|
49
49
|
define_method(name.to_sym) do
|
50
|
+
@proxy.master.connection_pool.send(name.to_sym)
|
51
|
+
@proxy.seq.connection_pool.try(name.to_sym) if @proxy.respond_to?(:seq)
|
50
52
|
@proxy.shards.values.each do |pool|
|
51
53
|
pool.connection_pool.send(name.to_sym)
|
52
54
|
end
|
@@ -41,7 +41,7 @@ module ActiveRecord::Turntable
|
|
41
41
|
raise "Please install the #{config['adapter']} adapter: `gem install activerecord-#{config['adapter']}-adapter` (#{e})"
|
42
42
|
end
|
43
43
|
adapter_method = "#{config['adapter']}_connection"
|
44
|
-
ActiveRecord::Base::ConnectionSpecification.new(config
|
44
|
+
ActiveRecord::Base::ConnectionSpecification.new(config, adapter_method)
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
@@ -112,13 +112,25 @@ describe ActiveRecord::Turntable::ActiveRecordExt::Persistence do
|
|
112
112
|
expect {
|
113
113
|
user_status.destroy
|
114
114
|
}.to_not raise_error
|
115
|
-
puts strio.string
|
116
115
|
strio.string.should =~ /WHERE `user_statuses`\.`id` = #{user_status.id} AND `user_statuses`\.`user_id` = #{user_status.user_id}[^\s]*$/
|
117
116
|
end
|
118
117
|
|
119
118
|
it "should warn when creating without shard_key" do
|
120
119
|
pending "doesn't need to implemented soon"
|
121
120
|
end
|
121
|
+
|
122
|
+
it "should execute one query when reloading" do
|
123
|
+
user; user_status
|
124
|
+
strio = StringIO.new
|
125
|
+
ActiveRecord::Base.logger = Logger.new(strio)
|
126
|
+
|
127
|
+
expect {
|
128
|
+
user_status.reload
|
129
|
+
}.to_not raise_error
|
130
|
+
puts strio.string
|
131
|
+
|
132
|
+
strio.string.split("\n").select {|stmt| stmt =~ /SELECT/}.should have(1).items
|
133
|
+
end
|
122
134
|
end
|
123
135
|
|
124
136
|
context "When the model is not sharded" do
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-turntable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.1
|
5
4
|
prerelease:
|
5
|
+
version: 1.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- gussan
|
@@ -12,245 +12,245 @@ cert_chain: []
|
|
12
12
|
date: 2013-01-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
15
|
+
version_requirements: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 3.0.0
|
20
|
+
none: false
|
21
|
+
name: activerecord
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
|
25
|
-
none: false
|
24
|
+
requirement: !ruby/object:Gem::Requirement
|
26
25
|
requirements:
|
27
26
|
- - ! '>='
|
28
27
|
- !ruby/object:Gem::Version
|
29
28
|
version: 3.0.0
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: activesupport
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
29
|
none: false
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
version_requirements: !ruby/object:Gem::Requirement
|
34
32
|
requirements:
|
35
33
|
- - ! '>='
|
36
34
|
- !ruby/object:Gem::Version
|
37
35
|
version: 3.0.0
|
36
|
+
none: false
|
37
|
+
name: activesupport
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
|
-
|
41
|
-
none: false
|
40
|
+
requirement: !ruby/object:Gem::Requirement
|
42
41
|
requirements:
|
43
42
|
- - ! '>='
|
44
43
|
- !ruby/object:Gem::Version
|
45
44
|
version: 3.0.0
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: sql_tree
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
45
|
none: false
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
48
|
requirements:
|
51
49
|
- - '='
|
52
50
|
- !ruby/object:Gem::Version
|
53
51
|
version: 0.2.0
|
52
|
+
none: false
|
53
|
+
name: sql_tree
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
|
-
|
57
|
-
none: false
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
58
57
|
requirements:
|
59
58
|
- - '='
|
60
59
|
- !ruby/object:Gem::Version
|
61
60
|
version: 0.2.0
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: bsearch
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
61
|
none: false
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
64
|
requirements:
|
67
65
|
- - ~>
|
68
66
|
- !ruby/object:Gem::Version
|
69
67
|
version: '1.5'
|
68
|
+
none: false
|
69
|
+
name: bsearch
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
|
-
|
73
|
-
none: false
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
74
73
|
requirements:
|
75
74
|
- - ~>
|
76
75
|
- !ruby/object:Gem::Version
|
77
76
|
version: '1.5'
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: httpclient
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
77
|
none: false
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
82
80
|
requirements:
|
83
81
|
- - ! '>='
|
84
82
|
- !ruby/object:Gem::Version
|
85
83
|
version: '0'
|
84
|
+
none: false
|
85
|
+
name: httpclient
|
86
86
|
type: :runtime
|
87
87
|
prerelease: false
|
88
|
-
|
89
|
-
none: false
|
88
|
+
requirement: !ruby/object:Gem::Requirement
|
90
89
|
requirements:
|
91
90
|
- - ! '>='
|
92
91
|
- !ruby/object:Gem::Version
|
93
92
|
version: '0'
|
94
|
-
- !ruby/object:Gem::Dependency
|
95
|
-
name: rake
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
97
93
|
none: false
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
version_requirements: !ruby/object:Gem::Requirement
|
98
96
|
requirements:
|
99
97
|
- - ~>
|
100
98
|
- !ruby/object:Gem::Version
|
101
99
|
version: 0.9.2
|
100
|
+
none: false
|
101
|
+
name: rake
|
102
102
|
type: :development
|
103
103
|
prerelease: false
|
104
|
-
|
105
|
-
none: false
|
104
|
+
requirement: !ruby/object:Gem::Requirement
|
106
105
|
requirements:
|
107
106
|
- - ~>
|
108
107
|
- !ruby/object:Gem::Version
|
109
108
|
version: 0.9.2
|
110
|
-
- !ruby/object:Gem::Dependency
|
111
|
-
name: rspec
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
113
109
|
none: false
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
version_requirements: !ruby/object:Gem::Requirement
|
114
112
|
requirements:
|
115
113
|
- - ! '>='
|
116
114
|
- !ruby/object:Gem::Version
|
117
115
|
version: '0'
|
116
|
+
none: false
|
117
|
+
name: rspec
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
|
-
|
121
|
-
none: false
|
120
|
+
requirement: !ruby/object:Gem::Requirement
|
122
121
|
requirements:
|
123
122
|
- - ! '>='
|
124
123
|
- !ruby/object:Gem::Version
|
125
124
|
version: '0'
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: rr
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
129
125
|
none: false
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
version_requirements: !ruby/object:Gem::Requirement
|
130
128
|
requirements:
|
131
129
|
- - ! '>='
|
132
130
|
- !ruby/object:Gem::Version
|
133
131
|
version: '0'
|
132
|
+
none: false
|
133
|
+
name: rr
|
134
134
|
type: :development
|
135
135
|
prerelease: false
|
136
|
-
|
137
|
-
none: false
|
136
|
+
requirement: !ruby/object:Gem::Requirement
|
138
137
|
requirements:
|
139
138
|
- - ! '>='
|
140
139
|
- !ruby/object:Gem::Version
|
141
140
|
version: '0'
|
142
|
-
- !ruby/object:Gem::Dependency
|
143
|
-
name: mysql2
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
145
141
|
none: false
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
version_requirements: !ruby/object:Gem::Requirement
|
146
144
|
requirements:
|
147
145
|
- - ! '>='
|
148
146
|
- !ruby/object:Gem::Version
|
149
147
|
version: '0'
|
148
|
+
none: false
|
149
|
+
name: mysql2
|
150
150
|
type: :development
|
151
151
|
prerelease: false
|
152
|
-
|
153
|
-
none: false
|
152
|
+
requirement: !ruby/object:Gem::Requirement
|
154
153
|
requirements:
|
155
154
|
- - ! '>='
|
156
155
|
- !ruby/object:Gem::Version
|
157
156
|
version: '0'
|
158
|
-
- !ruby/object:Gem::Dependency
|
159
|
-
name: fabrication
|
160
|
-
requirement: !ruby/object:Gem::Requirement
|
161
157
|
none: false
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
version_requirements: !ruby/object:Gem::Requirement
|
162
160
|
requirements:
|
163
161
|
- - ! '>='
|
164
162
|
- !ruby/object:Gem::Version
|
165
163
|
version: '0'
|
164
|
+
none: false
|
165
|
+
name: fabrication
|
166
166
|
type: :development
|
167
167
|
prerelease: false
|
168
|
-
|
169
|
-
none: false
|
168
|
+
requirement: !ruby/object:Gem::Requirement
|
170
169
|
requirements:
|
171
170
|
- - ! '>='
|
172
171
|
- !ruby/object:Gem::Version
|
173
172
|
version: '0'
|
174
|
-
- !ruby/object:Gem::Dependency
|
175
|
-
name: faker
|
176
|
-
requirement: !ruby/object:Gem::Requirement
|
177
173
|
none: false
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
version_requirements: !ruby/object:Gem::Requirement
|
178
176
|
requirements:
|
179
177
|
- - ! '>='
|
180
178
|
- !ruby/object:Gem::Version
|
181
179
|
version: '0'
|
180
|
+
none: false
|
181
|
+
name: faker
|
182
182
|
type: :development
|
183
183
|
prerelease: false
|
184
|
-
|
185
|
-
none: false
|
184
|
+
requirement: !ruby/object:Gem::Requirement
|
186
185
|
requirements:
|
187
186
|
- - ! '>='
|
188
187
|
- !ruby/object:Gem::Version
|
189
188
|
version: '0'
|
190
|
-
- !ruby/object:Gem::Dependency
|
191
|
-
name: activerecord-import
|
192
|
-
requirement: !ruby/object:Gem::Requirement
|
193
189
|
none: false
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
version_requirements: !ruby/object:Gem::Requirement
|
194
192
|
requirements:
|
195
193
|
- - ! '>='
|
196
194
|
- !ruby/object:Gem::Version
|
197
195
|
version: '0'
|
196
|
+
none: false
|
197
|
+
name: activerecord-import
|
198
198
|
type: :development
|
199
199
|
prerelease: false
|
200
|
-
|
201
|
-
none: false
|
200
|
+
requirement: !ruby/object:Gem::Requirement
|
202
201
|
requirements:
|
203
202
|
- - ! '>='
|
204
203
|
- !ruby/object:Gem::Version
|
205
204
|
version: '0'
|
206
|
-
- !ruby/object:Gem::Dependency
|
207
|
-
name: pry
|
208
|
-
requirement: !ruby/object:Gem::Requirement
|
209
205
|
none: false
|
206
|
+
- !ruby/object:Gem::Dependency
|
207
|
+
version_requirements: !ruby/object:Gem::Requirement
|
210
208
|
requirements:
|
211
209
|
- - ! '>='
|
212
210
|
- !ruby/object:Gem::Version
|
213
211
|
version: '0'
|
212
|
+
none: false
|
213
|
+
name: pry
|
214
214
|
type: :development
|
215
215
|
prerelease: false
|
216
|
-
|
217
|
-
none: false
|
216
|
+
requirement: !ruby/object:Gem::Requirement
|
218
217
|
requirements:
|
219
218
|
- - ! '>='
|
220
219
|
- !ruby/object:Gem::Version
|
221
220
|
version: '0'
|
222
|
-
- !ruby/object:Gem::Dependency
|
223
|
-
name: guard-rspec
|
224
|
-
requirement: !ruby/object:Gem::Requirement
|
225
221
|
none: false
|
222
|
+
- !ruby/object:Gem::Dependency
|
223
|
+
version_requirements: !ruby/object:Gem::Requirement
|
226
224
|
requirements:
|
227
225
|
- - ! '>='
|
228
226
|
- !ruby/object:Gem::Version
|
229
227
|
version: '0'
|
228
|
+
none: false
|
229
|
+
name: guard-rspec
|
230
230
|
type: :development
|
231
231
|
prerelease: false
|
232
|
-
|
233
|
-
none: false
|
232
|
+
requirement: !ruby/object:Gem::Requirement
|
234
233
|
requirements:
|
235
234
|
- - ! '>='
|
236
235
|
- !ruby/object:Gem::Version
|
237
236
|
version: '0'
|
238
|
-
- !ruby/object:Gem::Dependency
|
239
|
-
name: growl
|
240
|
-
requirement: !ruby/object:Gem::Requirement
|
241
237
|
none: false
|
238
|
+
- !ruby/object:Gem::Dependency
|
239
|
+
version_requirements: !ruby/object:Gem::Requirement
|
242
240
|
requirements:
|
243
241
|
- - ! '>='
|
244
242
|
- !ruby/object:Gem::Version
|
245
243
|
version: '0'
|
244
|
+
none: false
|
245
|
+
name: growl
|
246
246
|
type: :development
|
247
247
|
prerelease: false
|
248
|
-
|
249
|
-
none: false
|
248
|
+
requirement: !ruby/object:Gem::Requirement
|
250
249
|
requirements:
|
251
250
|
- - ! '>='
|
252
251
|
- !ruby/object:Gem::Version
|
253
252
|
version: '0'
|
253
|
+
none: false
|
254
254
|
description: AcviveRecord Sharding plugin
|
255
255
|
email:
|
256
256
|
executables: []
|
@@ -258,11 +258,13 @@ extensions: []
|
|
258
258
|
extra_rdoc_files:
|
259
259
|
- LICENSE.txt
|
260
260
|
- README.rdoc
|
261
|
+
- CHANGELOG.md
|
261
262
|
files:
|
262
263
|
- .document
|
263
264
|
- .gitignore
|
264
265
|
- .rspec
|
265
266
|
- .travis.yml
|
267
|
+
- CHANGELOG.md
|
266
268
|
- Gemfile
|
267
269
|
- Guardfile
|
268
270
|
- LICENSE.txt
|
@@ -400,17 +402,17 @@ rdoc_options: []
|
|
400
402
|
require_paths:
|
401
403
|
- lib
|
402
404
|
required_ruby_version: !ruby/object:Gem::Requirement
|
403
|
-
none: false
|
404
405
|
requirements:
|
405
406
|
- - ! '>='
|
406
407
|
- !ruby/object:Gem::Version
|
407
408
|
version: '0'
|
408
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
409
409
|
none: false
|
410
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
410
411
|
requirements:
|
411
412
|
- - ! '>='
|
412
413
|
- !ruby/object:Gem::Version
|
413
414
|
version: '0'
|
415
|
+
none: false
|
414
416
|
requirements: []
|
415
417
|
rubyforge_project: activerecord-turntable
|
416
418
|
rubygems_version: 1.8.23
|