switchman 3.1.0 → 3.1.3
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
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54ae135ce532aa5578592027f6ce46cf3aedecdf0a6fd097ae3597752f436bae
|
4
|
+
data.tar.gz: 02d88f28e64e487c6841940a383afd92a56378ea7c2e4b1156252c0bcf0fa71f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 383075584faafb39abc64be4f6e77a99c4ca3dfd5acc1c57bae885ba71c8d13ce2cb0f89d9332fd8387f5100886a5a0ffbb6f6d53e382b0e54412aea6b72cf06
|
7
|
+
data.tar.gz: 875421e2c515a671ed8503fd07b55d22e16f098ddde635b5530a3ab4801c9bebd06a5e4e75d7a547b1e84e5628288dac9aefc0c6f9a23cedad80b1f8389bb5de
|
@@ -256,20 +256,6 @@ module Switchman
|
|
256
256
|
attribute(attr_name)
|
257
257
|
end
|
258
258
|
end
|
259
|
-
|
260
|
-
private
|
261
|
-
|
262
|
-
def connection_class_for_self_for_reflection(reflection)
|
263
|
-
if reflection
|
264
|
-
if reflection.options[:polymorphic]
|
265
|
-
read_attribute(reflection.foreign_type)&.constantize&.connection_class_for_self
|
266
|
-
else
|
267
|
-
reflection.klass.connection_class_for_self
|
268
|
-
end
|
269
|
-
else
|
270
|
-
self.class.connection_class_for_self
|
271
|
-
end
|
272
|
-
end
|
273
259
|
end
|
274
260
|
end
|
275
261
|
end
|
@@ -22,16 +22,20 @@ module Switchman
|
|
22
22
|
@integral_id
|
23
23
|
end
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
%w[transaction insert_all upsert_all].each do |method|
|
26
|
+
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
27
|
+
def #{method}(*, **)
|
28
|
+
if self != ::ActiveRecord::Base && current_scope
|
29
|
+
current_scope.activate do
|
30
|
+
db = Shard.current(connection_class_for_self).database_server
|
31
|
+
db.unguard { super }
|
32
|
+
end
|
33
|
+
else
|
34
|
+
db = Shard.current(connection_class_for_self).database_server
|
35
|
+
db.unguard { super }
|
36
|
+
end
|
30
37
|
end
|
31
|
-
|
32
|
-
db = Shard.current(connection_class_for_self).database_server
|
33
|
-
db.unguard { super }
|
34
|
-
end
|
38
|
+
RUBY
|
35
39
|
end
|
36
40
|
|
37
41
|
def reset_column_information
|
@@ -138,9 +142,33 @@ module Switchman
|
|
138
142
|
else
|
139
143
|
Shard.current(self.class.connection_class_for_self)
|
140
144
|
end
|
145
|
+
readonly! if shadow_record? && !Switchman.config[:writable_shadow_records]
|
141
146
|
super
|
142
147
|
end
|
143
148
|
|
149
|
+
def shadow_record?
|
150
|
+
pkey = self[self.class.primary_key]
|
151
|
+
return false unless self.class.sharded_column?(self.class.primary_key) && pkey
|
152
|
+
|
153
|
+
pkey > Shard::IDS_PER_SHARD
|
154
|
+
end
|
155
|
+
|
156
|
+
def save_shadow_record(new_attrs: attributes, target_shard: Shard.current)
|
157
|
+
return if target_shard == shard
|
158
|
+
|
159
|
+
shadow_attrs = {}
|
160
|
+
new_attrs.each do |attr, value|
|
161
|
+
shadow_attrs[attr] = if self.class.sharded_column?(attr)
|
162
|
+
Shard.relative_id_for(value, shard, target_shard)
|
163
|
+
else
|
164
|
+
value
|
165
|
+
end
|
166
|
+
end
|
167
|
+
target_shard.activate do
|
168
|
+
self.class.upsert(shadow_attrs, unique_by: self.class.primary_key)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
144
172
|
def shard
|
145
173
|
@shard || Shard.current(self.class.connection_class_for_self) || Shard.default
|
146
174
|
end
|
@@ -20,13 +20,15 @@ module Switchman
|
|
20
20
|
end
|
21
21
|
|
22
22
|
module Migrator
|
23
|
-
# significant change:
|
24
|
-
#
|
25
|
-
# name you're accessing may not be consistent
|
26
|
-
# to run migrations against multiple shards in the same database
|
27
|
-
# concurrently
|
23
|
+
# significant change: use the shard name instead of the database name
|
24
|
+
# in the lock id. Especially if you're going through pgbouncer, the
|
25
|
+
# database name you're accessing may not be consistent
|
28
26
|
def generate_migrator_advisory_lock_id
|
29
|
-
|
27
|
+
db_name_hash = Zlib.crc32(Shard.current.name)
|
28
|
+
shard_name_hash = ::ActiveRecord::Migrator::MIGRATOR_SALT * db_name_hash
|
29
|
+
# Store in internalmetadata to allow other tools to be able to lock out migrations
|
30
|
+
::ActiveRecord::InternalMetadata[:migrator_advisory_lock_id] = shard_name_hash
|
31
|
+
shard_name_hash
|
30
32
|
end
|
31
33
|
|
32
34
|
# significant change: strip out prefer_secondary from config
|
data/lib/switchman/version.rb
CHANGED
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: switchman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cody Cutrer
|
8
8
|
- James Williams
|
9
9
|
- Jacob Fugal
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-
|
13
|
+
date: 2022-08-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
@@ -300,7 +300,7 @@ licenses:
|
|
300
300
|
- MIT
|
301
301
|
metadata:
|
302
302
|
rubygems_mfa_required: 'true'
|
303
|
-
post_install_message:
|
303
|
+
post_install_message:
|
304
304
|
rdoc_options: []
|
305
305
|
require_paths:
|
306
306
|
- lib
|
@@ -316,7 +316,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
316
316
|
version: '0'
|
317
317
|
requirements: []
|
318
318
|
rubygems_version: 3.1.6
|
319
|
-
signing_key:
|
319
|
+
signing_key:
|
320
320
|
specification_version: 4
|
321
321
|
summary: Rails sharding magic
|
322
322
|
test_files: []
|