active_record_shards 5.3.3 → 5.5.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.
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: f9e4c9f26a03dde94772c0888e49e3af56d68ffc4576fff3123a8dd50a73cce7
         | 
| 4 | 
            +
              data.tar.gz: d4ea926bf565928ac2873e02b08b481cf731d3d62483482de450137886505d4d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 699945070cfc1dde026841e71489a1e3d9e743cb4b49ff8e9a5f0849c1f50f3a55dab9833614377b8a998b8b181755c0efd2d090d3acd1d0f180c7dffee69c03
         | 
| 7 | 
            +
              data.tar.gz: 6c1d7c1eb206352102e9d13b2f045e4e9cbd7262f8fe6baab0218ad9273e0ecab21442900730d8b1b07754b65e15d07f7341415f495930265ff892e455eb73c7
         | 
| @@ -5,6 +5,11 @@ require 'active_record_shards/shard_support' | |
| 5 5 | 
             
            module ActiveRecordShards
         | 
| 6 6 | 
             
              module ConnectionSwitcher
         | 
| 7 7 | 
             
                class LegacyConnectionHandlingError < StandardError; end
         | 
| 8 | 
            +
                class IsolationLevelError < StandardError; end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                Thread.attr_accessor :_active_record_shards_disallow_replica_by_thread,
         | 
| 11 | 
            +
                                     :_active_record_shards_in_migration,
         | 
| 12 | 
            +
                                     :_active_record_shards_shard_selection
         | 
| 8 13 |  | 
| 9 14 | 
             
                case "#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}"
         | 
| 10 15 | 
             
                when '6.1', '7.0'
         | 
| @@ -19,6 +24,9 @@ module ActiveRecordShards | |
| 19 24 |  | 
| 20 25 | 
             
                  base.singleton_class.send(:alias_method, :table_exists_without_default_shard?, :table_exists?)
         | 
| 21 26 | 
             
                  base.singleton_class.send(:alias_method, :table_exists?, :table_exists_with_default_shard?)
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  base.singleton_class.send(:alias_method, :reset_primary_key_without_default_shard, :reset_primary_key)
         | 
| 29 | 
            +
                  base.singleton_class.send(:alias_method, :reset_primary_key, :reset_primary_key_with_default_shard)
         | 
| 22 30 | 
             
                end
         | 
| 23 31 |  | 
| 24 32 | 
             
                def on_primary_db(&block)
         | 
| @@ -118,11 +126,11 @@ module ActiveRecordShards | |
| 118 126 | 
             
                end
         | 
| 119 127 |  | 
| 120 128 | 
             
                def disallow_replica=(value)
         | 
| 121 | 
            -
                  Thread.current | 
| 129 | 
            +
                  Thread.current._active_record_shards_disallow_replica_by_thread = value
         | 
| 122 130 | 
             
                end
         | 
| 123 131 |  | 
| 124 132 | 
             
                def disallow_replica
         | 
| 125 | 
            -
                  Thread.current | 
| 133 | 
            +
                  Thread.current._active_record_shards_disallow_replica_by_thread ||= 0
         | 
| 126 134 | 
             
                end
         | 
| 127 135 |  | 
| 128 136 | 
             
                def supports_sharding?
         | 
| @@ -134,7 +142,7 @@ module ActiveRecordShards | |
| 134 142 | 
             
                end
         | 
| 135 143 |  | 
| 136 144 | 
             
                def current_shard_selection
         | 
| 137 | 
            -
                  Thread.current | 
| 145 | 
            +
                  Thread.current._active_record_shards_shard_selection ||= ShardSelection.new
         | 
| 138 146 | 
             
                end
         | 
| 139 147 |  | 
| 140 148 | 
             
                def current_shard_id
         | 
| @@ -145,6 +153,10 @@ module ActiveRecordShards | |
| 145 153 | 
             
                  config_for_env[SHARD_NAMES_CONFIG_KEY] || []
         | 
| 146 154 | 
             
                end
         | 
| 147 155 |  | 
| 156 | 
            +
                def reset_primary_key_with_default_shard
         | 
| 157 | 
            +
                  with_default_shard { reset_primary_key_without_default_shard }
         | 
| 158 | 
            +
                end
         | 
| 159 | 
            +
             | 
| 148 160 | 
             
                private
         | 
| 149 161 |  | 
| 150 162 | 
             
                def config_for_env
         | 
| @@ -177,6 +189,7 @@ module ActiveRecordShards | |
| 177 189 |  | 
| 178 190 | 
             
                def switch_connection(options)
         | 
| 179 191 | 
             
                  ensure_legacy_connection_handling if ActiveRecord.version >= Gem::Version.new('6.1')
         | 
| 192 | 
            +
                  ensure_thread_isolation_level if ActiveRecord.version >= Gem::Version.new('7.0')
         | 
| 180 193 |  | 
| 181 194 | 
             
                  if options.any?
         | 
| 182 195 | 
             
                    if options.key?(:replica)
         | 
| @@ -199,6 +212,12 @@ module ActiveRecordShards | |
| 199 212 | 
             
                  end
         | 
| 200 213 | 
             
                end
         | 
| 201 214 |  | 
| 215 | 
            +
                def ensure_thread_isolation_level
         | 
| 216 | 
            +
                  unless ActiveSupport::IsolatedExecutionState.isolation_level == :thread
         | 
| 217 | 
            +
                    raise IsolationLevelError, "ActiveRecordShards is _only_ compatible when ActiveSupport::IsolatedExecutionState's isolation_level is set to :thread"
         | 
| 218 | 
            +
                  end
         | 
| 219 | 
            +
                end
         | 
| 220 | 
            +
             | 
| 202 221 | 
             
                def legacy_connection_handling_owner
         | 
| 203 222 | 
             
                  @legacy_connection_handling_owner ||=
         | 
| 204 223 | 
             
                    case "#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}"
         | 
| @@ -29,21 +29,6 @@ module ActiveRecordShards | |
| 29 29 | 
             
                  RUBY
         | 
| 30 30 | 
             
                end
         | 
| 31 31 |  | 
| 32 | 
            -
                def transaction_with_replica_off(*args, &block)
         | 
| 33 | 
            -
                  if on_replica_by_default?
         | 
| 34 | 
            -
                    begin
         | 
| 35 | 
            -
                      old_val = Thread.current[:_active_record_shards_in_tx]
         | 
| 36 | 
            -
                      Thread.current[:_active_record_shards_in_tx] = true
         | 
| 37 | 
            -
                      transaction_without_replica_off(*args, &block)
         | 
| 38 | 
            -
                    ensure
         | 
| 39 | 
            -
                      Thread.current[:_active_record_shards_in_tx] = old_val
         | 
| 40 | 
            -
                    end
         | 
| 41 | 
            -
                  else
         | 
| 42 | 
            -
                    transaction_without_replica_off(*args, &block)
         | 
| 43 | 
            -
                  end
         | 
| 44 | 
            -
                end
         | 
| 45 | 
            -
                ruby2_keywords(:transaction_with_replica_off) if respond_to?(:ruby2_keywords, true)
         | 
| 46 | 
            -
             | 
| 47 32 | 
             
                module InstanceMethods
         | 
| 48 33 | 
             
                  def on_replica_unless_tx
         | 
| 49 34 | 
             
                    self.class.on_replica_unless_tx { yield }
         | 
| @@ -80,17 +65,12 @@ module ActiveRecordShards | |
| 80 65 |  | 
| 81 66 | 
             
                  base.class_eval do
         | 
| 82 67 | 
             
                    include InstanceMethods
         | 
| 83 | 
            -
             | 
| 84 | 
            -
                    class << self
         | 
| 85 | 
            -
                      alias_method :transaction_without_replica_off, :transaction
         | 
| 86 | 
            -
                      alias_method :transaction, :transaction_with_replica_off
         | 
| 87 | 
            -
                    end
         | 
| 88 68 | 
             
                  end
         | 
| 89 69 | 
             
                end
         | 
| 90 70 |  | 
| 91 71 | 
             
                def on_replica_unless_tx(&block)
         | 
| 92 | 
            -
                  return yield if Thread.current | 
| 93 | 
            -
                  return yield if  | 
| 72 | 
            +
                  return yield if Thread.current._active_record_shards_in_migration
         | 
| 73 | 
            +
                  return yield if _in_transaction?
         | 
| 94 74 |  | 
| 95 75 | 
             
                  if on_replica_by_default?
         | 
| 96 76 | 
             
                    on_replica(&block)
         | 
| @@ -99,8 +79,12 @@ module ActiveRecordShards | |
| 99 79 | 
             
                  end
         | 
| 100 80 | 
             
                end
         | 
| 101 81 |  | 
| 82 | 
            +
                def _in_transaction?
         | 
| 83 | 
            +
                  connected? && connection.transaction_open?
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
             | 
| 102 86 | 
             
                def force_on_replica(&block)
         | 
| 103 | 
            -
                  return yield if Thread.current | 
| 87 | 
            +
                  return yield if Thread.current._active_record_shards_in_migration
         | 
| 104 88 |  | 
| 105 89 | 
             
                  on_cx_switch_block(:replica, construct_ro_scope: false, force: true, &block)
         | 
| 106 90 | 
             
                end
         | 
| @@ -121,8 +105,8 @@ module ActiveRecordShards | |
| 121 105 |  | 
| 122 106 | 
             
                module Rails52RelationPatches
         | 
| 123 107 | 
             
                  def connection
         | 
| 124 | 
            -
                    return super if Thread.current | 
| 125 | 
            -
                    return super if  | 
| 108 | 
            +
                    return super if Thread.current._active_record_shards_in_migration
         | 
| 109 | 
            +
                    return super if _in_transaction?
         | 
| 126 110 |  | 
| 127 111 | 
             
                    if @klass.on_replica_by_default?
         | 
| 128 112 | 
             
                      @klass.on_replica.connection
         | 
| @@ -213,8 +197,8 @@ module ActiveRecordShards | |
| 213 197 |  | 
| 214 198 | 
             
                module TypeCasterConnectionConnectionPatch
         | 
| 215 199 | 
             
                  def connection
         | 
| 216 | 
            -
                    return super if Thread.current | 
| 217 | 
            -
                    return super if  | 
| 200 | 
            +
                    return super if Thread.current._active_record_shards_in_migration
         | 
| 201 | 
            +
                    return super if ActiveRecord::Base._in_transaction?
         | 
| 218 202 |  | 
| 219 203 | 
             
                    if @klass.on_replica_by_default?
         | 
| 220 204 | 
             
                      @klass.on_replica.connection
         | 
| @@ -226,11 +210,11 @@ module ActiveRecordShards | |
| 226 210 |  | 
| 227 211 | 
             
                module SchemaDefinePatch
         | 
| 228 212 | 
             
                  def define(info, &block)
         | 
| 229 | 
            -
                    old_val = Thread.current | 
| 230 | 
            -
                    Thread.current | 
| 213 | 
            +
                    old_val = Thread.current._active_record_shards_in_migration
         | 
| 214 | 
            +
                    Thread.current._active_record_shards_in_migration = true
         | 
| 231 215 | 
             
                    super
         | 
| 232 216 | 
             
                  ensure
         | 
| 233 | 
            -
                    Thread.current | 
| 217 | 
            +
                    Thread.current._active_record_shards_in_migration = old_val
         | 
| 234 218 | 
             
                  end
         | 
| 235 219 | 
             
                end
         | 
| 236 220 | 
             
              end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: active_record_shards
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 5. | 
| 4 | 
            +
              version: 5.5.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Benjamin Quorning
         | 
| @@ -13,7 +13,7 @@ authors: | |
| 13 13 | 
             
            autorequire: 
         | 
| 14 14 | 
             
            bindir: bin
         | 
| 15 15 | 
             
            cert_chain: []
         | 
| 16 | 
            -
            date: 2023- | 
| 16 | 
            +
            date: 2023-08-26 00:00:00.000000000 Z
         | 
| 17 17 | 
             
            dependencies:
         | 
| 18 18 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 19 19 | 
             
              name: activerecord
         | 
| @@ -83,20 +83,6 @@ dependencies: | |
| 83 83 | 
             
                - - ">="
         | 
| 84 84 | 
             
                  - !ruby/object:Gem::Version
         | 
| 85 85 | 
             
                    version: 5.10.0
         | 
| 86 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 87 | 
            -
              name: minitest-rg
         | 
| 88 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 89 | 
            -
                requirements:
         | 
| 90 | 
            -
                - - ">="
         | 
| 91 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 92 | 
            -
                    version: '0'
         | 
| 93 | 
            -
              type: :development
         | 
| 94 | 
            -
              prerelease: false
         | 
| 95 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 96 | 
            -
                requirements:
         | 
| 97 | 
            -
                - - ">="
         | 
| 98 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 99 | 
            -
                    version: '0'
         | 
| 100 86 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 101 87 | 
             
              name: mysql2
         | 
| 102 88 | 
             
              requirement: !ruby/object:Gem::Requirement
         |