switchman 1.5.4 → 1.5.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: afbf29688ae3158c8e0a6e02d5dd27355d33fcc9
4
- data.tar.gz: 104a872cbf73ba12f5a9bdc74d25db7d25d68c59
3
+ metadata.gz: a9f1b18d5c70d7c7c0db5295eecc955e89eb7ffc
4
+ data.tar.gz: 9c87565145d1c2d28319c5dd0fcfba2be42d63e6
5
5
  SHA512:
6
- metadata.gz: 453bb244bc91a04501f5952f629a964ebcb338629a6ba4e3530954a71325bb268acbc514619e1ca06d68c6d56d333e24575dc6eb053c8c86a22506462882c0ca
7
- data.tar.gz: 9f39e116166e29ce9bfaf22aff35d84821f8d8ccbd2ff93032cb8dfbabd77c695e4a4a1aaf4608ca5171b31b17a66325357f16a85b9b6aeb83bb1aa9c8f84941
6
+ metadata.gz: e5c427e9b504ba9f24407e635e59d4b53fe898666095390b18049ce17831aa72387bbf04fa4996face96ee1a958f861441a5064f7acc9c79c96f40fd38631d87
7
+ data.tar.gz: 23e544a6a514824bdca90f51a12de4832b350a1b63adba3569ec73bd51da8c5267b8b71e53685197330e37973c284314a7895764ee47e91e29892d1d46246afd
@@ -115,10 +115,9 @@ module Switchman
115
115
  # for multishard associations, it's the owner object itself
116
116
  # (all associated shards)
117
117
 
118
- # this is the default behavior of partition_by_shard, so just set it to nil
118
+ # this is the default behavior of partition_by_shard, so just let it be nil
119
119
  # to avoid the proc call
120
120
  # partition_proc = ->(owner) { owner }
121
- partitition_proc = nil
122
121
  end
123
122
 
124
123
  records = Shard.partition_by_shard(owners, partition_proc) do |partitioned_owners|
@@ -128,7 +128,7 @@ module Switchman
128
128
  end
129
129
 
130
130
  def hash
131
- self.class.sharded_primary_key? ? global_id.hash : super
131
+ self.class.sharded_primary_key? ? Shard.global_id_for(id).hash : super
132
132
  end
133
133
 
134
134
  def to_param
@@ -0,0 +1,18 @@
1
+ require "switchman/shard_aware_statement_cache"
2
+
3
+ module Switchman
4
+ module ActiveRecord
5
+ module Core
6
+ def initialize_find_by_cache
7
+ if ::Rails.version < '5'
8
+ self.find_by_statement_cache = ShardAwareStatementCache.new(shard_category)
9
+ else
10
+ # note that this will not work beyond ActiveRecord 5.0.0.beta3 since
11
+ # as of beta4 this has been replaced with a hash containing two separate caches:
12
+ # one for prepared statements, and one for unprepared ones
13
+ @find_by_statement_cache = ShardAwareStatementCache.new(shard_category)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -15,7 +15,7 @@ module Switchman
15
15
  current_shard = Shard.current(klass.shard_category)
16
16
  target_shard ||= current_shard
17
17
 
18
- bind_values = bind_map.bind(params, current_shard, target_shard || current_shard)
18
+ bind_values = bind_map.bind(params, current_shard, target_shard)
19
19
 
20
20
  sql = query_builder.sql_for(bind_values, connection)
21
21
  target_shard.activate(klass.shard_category) do
@@ -69,4 +69,4 @@ module Switchman
69
69
  end
70
70
  end
71
71
  end
72
- end
72
+ end
@@ -93,9 +93,11 @@ module Switchman
93
93
 
94
94
  if ::Rails.version > '4.2'
95
95
  require "switchman/active_record/statement_cache"
96
+ require "switchman/active_record/core"
96
97
  ::ActiveRecord::StatementCache.prepend(ActiveRecord::StatementCache)
97
98
  ::ActiveRecord::StatementCache::BindMap.prepend(ActiveRecord::StatementCache::BindMap)
98
99
  ::ActiveRecord::StatementCache::Substitute.send(:attr_accessor, :primary, :sharded)
100
+ singleton_class.prepend ActiveRecord::Core
99
101
 
100
102
  ::ActiveRecord::Associations::CollectionAssociation.prepend(ActiveRecord::CollectionAssociation)
101
103
  end
@@ -0,0 +1,21 @@
1
+ module Switchman
2
+ class ShardAwareStatementCache
3
+
4
+ attr_accessor :__cache, :shard_category
5
+ private :__cache, :shard_category
6
+
7
+ def initialize(shard_category)
8
+ self.extend Mutex_m
9
+ self.__cache = {}
10
+ self.shard_category = shard_category
11
+ end
12
+
13
+ def [](key)
14
+ __cache[[key, Shard.current(shard_category).id]]
15
+ end
16
+
17
+ def []=(key, value)
18
+ __cache[[key, Shard.current(shard_category).id]] = value
19
+ end
20
+ end
21
+ end
@@ -1,3 +1,3 @@
1
1
  module Switchman
2
- VERSION = "1.5.4"
2
+ VERSION = "1.5.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: switchman
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.4
4
+ version: 1.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-05-04 00:00:00.000000000 Z
13
+ date: 2016-05-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: railties
@@ -19,9 +19,9 @@ dependencies:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
21
  version: '4.0'
22
- - - "<"
22
+ - - "<="
23
23
  - !ruby/object:Gem::Version
24
- version: '5.1'
24
+ version: 5.0.0.beta3
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,9 +29,9 @@ dependencies:
29
29
  - - ">="
30
30
  - !ruby/object:Gem::Version
31
31
  version: '4.0'
32
- - - "<"
32
+ - - "<="
33
33
  - !ruby/object:Gem::Version
34
- version: '5.1'
34
+ version: 5.0.0.beta3
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: activerecord
37
37
  requirement: !ruby/object:Gem::Requirement
@@ -39,9 +39,9 @@ dependencies:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: '4.0'
42
- - - "<"
42
+ - - "<="
43
43
  - !ruby/object:Gem::Version
44
- version: '5.1'
44
+ version: 5.0.0.beta3
45
45
  type: :runtime
46
46
  prerelease: false
47
47
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,9 +49,9 @@ dependencies:
49
49
  - - ">="
50
50
  - !ruby/object:Gem::Version
51
51
  version: '4.0'
52
- - - "<"
52
+ - - "<="
53
53
  - !ruby/object:Gem::Version
54
- version: '5.1'
54
+ version: 5.0.0.beta3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: shackles
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -171,6 +171,7 @@ files:
171
171
  - lib/switchman/active_record/calculations.rb
172
172
  - lib/switchman/active_record/connection_handler.rb
173
173
  - lib/switchman/active_record/connection_pool.rb
174
+ - lib/switchman/active_record/core.rb
174
175
  - lib/switchman/active_record/finder_methods.rb
175
176
  - lib/switchman/active_record/log_subscriber.rb
176
177
  - lib/switchman/active_record/model_schema.rb
@@ -200,6 +201,7 @@ files:
200
201
  - lib/switchman/schema_cache.rb
201
202
  - lib/switchman/shackles.rb
202
203
  - lib/switchman/shackles/relation.rb
204
+ - lib/switchman/shard_aware_statement_cache.rb
203
205
  - lib/switchman/sharded_instrumenter.rb
204
206
  - lib/switchman/test_helper.rb
205
207
  - lib/switchman/version.rb
@@ -224,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
224
226
  version: '0'
225
227
  requirements: []
226
228
  rubyforge_project:
227
- rubygems_version: 2.6.4
229
+ rubygems_version: 2.5.1
228
230
  signing_key:
229
231
  specification_version: 4
230
232
  summary: Rails 4 sharding magic