switchman 1.14.5 → 1.14.6

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: f75c819fb04253c0a686dbfeead8f7df63315d09a24143ede35f1bb65821296a
4
- data.tar.gz: ee1ef75ff91973e810938b81e1ade42a2f9b48a3f5f8897bbefa35b85146cb12
3
+ metadata.gz: 533a28f86239be95ad7e7dff0a5022082f3e6373fcd4bf8b2a2aabfd69a69147
4
+ data.tar.gz: 8dfc6d0f03db1b578101f776c0d764c647ba5cc795525cc26f765cfb4df1e19a
5
5
  SHA512:
6
- metadata.gz: 2acf90222fa2091a9311dda52ac523099ee1eaf6325058d39a7973c75654991cc925bdcc5e6983814ab6c4c33c0967b1ea0c8688da97243edc34dddf253ea92d
7
- data.tar.gz: c203ee0e6b8e1d5bdb66723ece7c2abf5cf532c3c1cf2f1e7fb97dc3509a9ae4d164c147da81604d15ef4750a125449c7d693e264c207a9d017a75bb3c27021a
6
+ metadata.gz: 1ed1aea70b720d0f78378eaeba6eb3370e52130c7484d652d490330b2d6594d06ab77f2f15854d282000d7b337832b14adfc52d139ac8ac7e6dbf01c498aff4e
7
+ data.tar.gz: 9a63a6e7df75e80d82ad04ee5730c13e70409218d9aa46e04b79a0c28b05285bfa6e3114e4d39c9b53cbd4131174d9bbc87a0a02ef9fc1b1db5d3d0592d886ac
@@ -179,6 +179,8 @@ module Switchman
179
179
  # still need a post-uniq, cause the default database server could be NULL or Rails.env in the db
180
180
  database_servers = scope.reorder('database_server_id').select(:database_server_id).distinct.
181
181
  map(&:database_server).compact.uniq
182
+ # nothing to do
183
+ return if database_servers.count == 0
182
184
  parallel = [(max_procs.to_f / database_servers.count).ceil, parallel].min if max_procs
183
185
 
184
186
  scopes = Hash[database_servers.map do |server|
@@ -699,11 +701,8 @@ module Switchman
699
701
  # make sure all connection pool proxies are referencing valid pools
700
702
  ::ActiveRecord::Base.connection_handler.connection_pools.each do |pool|
701
703
  next unless pool.is_a?(ConnectionPoolProxy)
702
- ::Shackles.activated_environments.each do |env|
703
- ::Shackles.activate(env) do
704
- pool.current_pool
705
- end
706
- end
704
+
705
+ pool.remove_shard!(self)
707
706
  end
708
707
  end
709
708
 
@@ -121,9 +121,8 @@ module Switchman
121
121
  group_fields = group_attrs
122
122
  end
123
123
 
124
- # .clone below corrects for what I consider a Rails bug. column_alias_for modifies the string in place.
125
124
  # to_s is because Rails 5 returns a string but Rails 6 returns a symbol.
126
- group_aliases = group_fields.map { |field| column_alias_for(field.clone).to_s }
125
+ group_aliases = group_fields.map { |field| column_alias_for(field.downcase.to_s).to_s }
127
126
  group_columns = group_aliases.zip(group_fields).map { |aliaz, field|
128
127
  [aliaz, type_for(field), column_name_for(field)]
129
128
  }
@@ -49,6 +49,9 @@ module Switchman
49
49
  else
50
50
  ::ActiveRecord::Base.configurations[::Rails.env] = config.stringify_keys
51
51
  end
52
+ else
53
+ # this is probably wrong now
54
+ Shard.default.remove_instance_variable(:@name) if Shard.default.instance_variable_defined?(:@name)
52
55
  end
53
56
 
54
57
  @shard_connection_pools ||= { [:master, Shard.default.database_server.shareable? ? ::Rails.env : Shard.default] => pool}
@@ -47,6 +47,20 @@ module Switchman
47
47
  end
48
48
  end
49
49
 
50
+ def remove_shard!(shard)
51
+ synchronize do
52
+ # The shard might be currently active, so we need to update our own shard
53
+ if self.shard == shard
54
+ self.shard = Shard.default
55
+ end
56
+ # Update out any connections that may be using this shard
57
+ @connections.each do |conn|
58
+ # This will also update the connection's shard to the default shard
59
+ switch_database(conn) if conn.shard == shard
60
+ end
61
+ end
62
+ end
63
+
50
64
  def clear_idle_connections!(since_when)
51
65
  synchronize do
52
66
  @connections.reject! do |conn|
@@ -23,7 +23,14 @@ module Switchman
23
23
  @category = category
24
24
  @default_pool = default_pool
25
25
  @connection_pools = shard_connection_pools
26
- @schema_cache = SchemaCache.new(self)
26
+ @schema_cache = default_pool.get_schema_cache(nil) if ::Rails.version >= '6'
27
+ @schema_cache = SchemaCache.new(self) unless @schema_cache.is_a?(SchemaCache)
28
+ if ::Rails.version >= '6'
29
+ @default_pool.set_schema_cache(@schema_cache)
30
+ @connection_pools.each_value do |pool|
31
+ pool.set_schema_cache(@schema_cache)
32
+ end
33
+ end
27
34
  end
28
35
 
29
36
  def active_shard
@@ -50,7 +57,7 @@ module Switchman
50
57
  pool = current_pool
51
58
  begin
52
59
  connection = pool.connection
53
- connection.instance_variable_set(:@schema_cache, @schema_cache)
60
+ connection.instance_variable_set(:@schema_cache, @schema_cache) unless ::Rails.version >= '6'
54
61
  connection
55
62
  rescue ConnectionError
56
63
  raise if active_shard.database_server == Shard.default.database_server && active_shackles_environment == :master
@@ -60,7 +67,7 @@ module Switchman
60
67
  pool = create_pool(config.dup)
61
68
  begin
62
69
  connection = pool.connection
63
- connection.instance_variable_set(:@schema_cache, @schema_cache)
70
+ connection.instance_variable_set(:@schema_cache, @schema_cache) unless ::Rails.version >= '6'
64
71
  rescue ConnectionError
65
72
  raise if idx == configs.length - 1
66
73
  next
@@ -71,6 +78,10 @@ module Switchman
71
78
  end
72
79
  end
73
80
 
81
+ def get_schema_cache(_connection)
82
+ @schema_cache
83
+ end
84
+
74
85
  %w{release_connection
75
86
  disconnect!
76
87
  flush!
@@ -98,6 +109,10 @@ module Switchman
98
109
  connection_pools.each { |pool| pool.clear_idle_connections!(since_when) }
99
110
  end
100
111
 
112
+ def remove_shard!(shard)
113
+ connection_pools.each { |pool| pool.remove_shard!(shard) }
114
+ end
115
+
101
116
  protected
102
117
 
103
118
  def connection_pools
@@ -132,15 +147,18 @@ module Switchman
132
147
  end
133
148
  end
134
149
  end
135
- args = [config, "#{config[:adapter]}_connection"]
136
- args.unshift(pool_key.join("/"))
137
- spec = ::ActiveRecord::ConnectionAdapters::ConnectionSpecification.new(*args)
150
+ spec = ::ActiveRecord::ConnectionAdapters::ConnectionSpecification.new(
151
+ category,
152
+ config,
153
+ "#{config[:adapter]}_connection"
154
+ )
138
155
  # unfortunately the AR code that does this require logic can't really be
139
156
  # called in isolation
140
157
  require "active_record/connection_adapters/#{config[:adapter]}_adapter"
141
158
 
142
159
  ::ActiveRecord::ConnectionAdapters::ConnectionPool.new(spec).tap do |pool|
143
160
  pool.shard = shard
161
+ pool.set_schema_cache(@schema_cache) if ::Rails.version >= '6'
144
162
  if ::Rails.version >= '5.0.1'
145
163
  pool.enable_query_cache! if !@connection_pools.empty? && @connection_pools.first.last.query_cache_enabled
146
164
  end
@@ -1,3 +1,3 @@
1
1
  module Switchman
2
- VERSION = "1.14.5"
2
+ VERSION = "1.14.6"
3
3
  end
@@ -20,7 +20,12 @@ module Switchman
20
20
  open = servers.delete('open')
21
21
 
22
22
  servers = servers.map { |server| DatabaseServer.find(server) }.compact
23
- servers.concat(DatabaseServer.all.select { |server| server.config[:open] }) if open
23
+ if open
24
+ open_servers = DatabaseServer.all.select { |server| server.config[:open] }
25
+ servers.concat(open_servers)
26
+ servers << DatabaseServer.find(nil) if open_servers.empty?
27
+ servers.uniq!
28
+ end
24
29
  servers = DatabaseServer.all - servers if negative
25
30
  end
26
31
 
@@ -195,9 +200,7 @@ module Switchman
195
200
  @filter_database_servers_chain ||= ->(servers) { servers }
196
201
  end
197
202
  end
198
- end
199
203
 
200
- module Switchman
201
204
  module ActiveRecord
202
205
  module PostgreSQLDatabaseTasks
203
206
  def structure_dump(filename, extra_flags=nil)
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.14.5
4
+ version: 1.14.6
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: 2019-08-12 00:00:00.000000000 Z
13
+ date: 2019-08-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: railties