switchman 1.10.3 → 1.10.4
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 +5 -5
- data/lib/switchman/database_server.rb +30 -37
- data/lib/switchman/version.rb +1 -1
- metadata +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: ec38b2f9f4514dd6e8a395c91d56ec88e110df9f65901b09e9990de84d7b5144
         | 
| 4 | 
            +
              data.tar.gz: 8b1941a4f918b184917a0f4293b67a0f10a3317187eb98fa6736693201801a9b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 54771d8a12ce199e67802b8be9c195b00ed8203a602027b6d0ab8776042341ad6ccf40f33c0cf0ac644c1339bcde9fe6668f442e0a864763f28be0ab8d5ba62d
         | 
| 7 | 
            +
              data.tar.gz: 53e9832319bd99cdbe0032a6c66c0749f57e9c08e09df5bd7239b872d1a4a29b868603a43d13e7d6f23c6157a14fb7a75650b90c13b7f18e424c3e5e98ad54ac
         | 
| @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            require "securerandom"
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            module Switchman
         | 
| 2 4 | 
             
              class DatabaseServer
         | 
| 3 5 | 
             
                attr_accessor :id
         | 
| @@ -136,27 +138,14 @@ module Switchman | |
| 136 138 | 
             
                  create_schema = options[:schema]
         | 
| 137 139 | 
             
                  # look for another shard associated with this db
         | 
| 138 140 | 
             
                  other_shard = self.shards.where("name<>':memory:' OR name IS NULL").order(:id).first
         | 
| 139 | 
            -
                  temp_name = other_shard&.name unless id == ::Rails.env
         | 
| 140 | 
            -
                  temp_name = Shard.default.name if id == ::Rails.env
         | 
| 141 141 |  | 
| 142 142 | 
             
                  case config[:adapter]
         | 
| 143 143 | 
             
                    when 'postgresql'
         | 
| 144 | 
            -
                      temp_name ||= 'public'
         | 
| 145 144 | 
             
                      create_statement = lambda { "CREATE SCHEMA #{name}" }
         | 
| 146 145 | 
             
                      password = " PASSWORD #{::ActiveRecord::Base.connection.quote(config[:password])}" if config[:password]
         | 
| 147 146 | 
             
                    when 'sqlite3'
         | 
| 148 | 
            -
                       | 
| 149 | 
            -
                        # Try to create a db on-disk even if the only shards for sqlite are in-memory
         | 
| 150 | 
            -
                        temp_name = nil if temp_name == ':memory:'
         | 
| 151 | 
            -
                        # Put it in the db directory if there are no other sqlite shards
         | 
| 152 | 
            -
                        temp_name ||= 'db/dummy'
         | 
| 153 | 
            -
                        temp_name = File.join(File.dirname(temp_name), "#{name}.sqlite3")
         | 
| 154 | 
            -
                        # If they really asked for :memory:, give them :memory:
         | 
| 155 | 
            -
                        temp_name = name if name == ':memory:'
         | 
| 156 | 
            -
                        name = temp_name
         | 
| 157 | 
            -
                      end
         | 
| 147 | 
            +
                      # no create_statement
         | 
| 158 148 | 
             
                    else
         | 
| 159 | 
            -
                      temp_name ||= self.config[:database] % self.config
         | 
| 160 149 | 
             
                      create_statement = lambda { "CREATE DATABASE #{name}" }
         | 
| 161 150 | 
             
                  end
         | 
| 162 151 | 
             
                  sharding_config = Switchman.config
         | 
| @@ -170,27 +159,35 @@ module Switchman | |
| 170 159 | 
             
                  end
         | 
| 171 160 |  | 
| 172 161 | 
             
                  create_shard = lambda do
         | 
| 173 | 
            -
                     | 
| 174 | 
            -
             | 
| 175 | 
            -
             | 
| 162 | 
            +
                    shard_id = options.fetch(:id) do
         | 
| 163 | 
            +
                      case config[:adapter]
         | 
| 164 | 
            +
                        when 'postgresql'
         | 
| 165 | 
            +
                          id_seq = Shard.connection.quote(Shard.connection.quote_table_name('switchman_shards_id_seq'))
         | 
| 166 | 
            +
                          next_id = Shard.connection.select_value("SELECT nextval(#{id_seq})")
         | 
| 167 | 
            +
                          next_id.to_i
         | 
| 168 | 
            +
                        else
         | 
| 169 | 
            +
                          nil
         | 
| 170 | 
            +
                      end
         | 
| 171 | 
            +
                    end
         | 
| 172 | 
            +
             | 
| 173 | 
            +
                    if name.nil?
         | 
| 174 | 
            +
                      base_name = self.config[:database].to_s % self.config
         | 
| 175 | 
            +
                      base_name = $1 if base_name =~ /(?:.*\/)(.+)_shard_\d+(?:\.sqlite3)?$/
         | 
| 176 | 
            +
                      base_name = nil if base_name == ':memory:'
         | 
| 177 | 
            +
                      base_name << '_' if base_name
         | 
| 178 | 
            +
                      base_id = shard_id || SecureRandom.uuid
         | 
| 179 | 
            +
                      name = "#{base_name}shard_#{base_id}"
         | 
| 180 | 
            +
                      if config[:adapter] == 'sqlite3'
         | 
| 181 | 
            +
                        name = File.join('db', "#{name}.sqlite3")
         | 
| 182 | 
            +
                      end
         | 
| 176 183 | 
             
                    end
         | 
| 184 | 
            +
             | 
| 185 | 
            +
                    shard = Shard.create!(:id => shard_id,
         | 
| 186 | 
            +
                                          :name => name,
         | 
| 187 | 
            +
                                          :database_server => self)
         | 
| 188 | 
            +
             | 
| 177 189 | 
             
                    begin
         | 
| 178 190 | 
             
                      self.class.creating_new_shard = true
         | 
| 179 | 
            -
                      if name.nil?
         | 
| 180 | 
            -
                        base_name = self.config[:database] % self.config
         | 
| 181 | 
            -
                        base_name = $1 if base_name =~ /(?:.*\/)(.+)_shard_\d+(?:\.sqlite3)?$/
         | 
| 182 | 
            -
                        base_name = nil if base_name == ':memory:'
         | 
| 183 | 
            -
                        base_name << '_' if base_name
         | 
| 184 | 
            -
                        name = "#{base_name}shard_#{shard.id}"
         | 
| 185 | 
            -
                        if config[:adapter] == 'sqlite3'
         | 
| 186 | 
            -
                          # Try to create a db on-disk even if the only shards for sqlite are in-memory
         | 
| 187 | 
            -
                          temp_name = nil if temp_name == ':memory:'
         | 
| 188 | 
            -
                          # Put it in the db directory if there are no other sqlite shards
         | 
| 189 | 
            -
                          temp_name ||= 'db/dummy'
         | 
| 190 | 
            -
                          name = File.join(File.dirname(temp_name), "#{name}.sqlite3")
         | 
| 191 | 
            -
                          shard.name = name
         | 
| 192 | 
            -
                        end
         | 
| 193 | 
            -
                      end
         | 
| 194 191 | 
             
                      shard.activate(*Shard.categories) do
         | 
| 195 192 | 
             
                        ::Shackles.activate(:deploy) do
         | 
| 196 193 | 
             
                          begin
         | 
| @@ -199,14 +196,11 @@ module Switchman | |
| 199 196 | 
             
                                ::ActiveRecord::Base.connection.execute(stmt)
         | 
| 200 197 | 
             
                              end
         | 
| 201 198 | 
             
                              # have to disconnect and reconnect to the correct db
         | 
| 202 | 
            -
                              shard.name = name
         | 
| 203 199 | 
             
                              if self.shareable? && other_shard
         | 
| 204 200 | 
             
                                other_shard.activate { ::ActiveRecord::Base.connection }
         | 
| 205 201 | 
             
                              else
         | 
| 206 202 | 
             
                                ::ActiveRecord::Base.connection_pool.current_pool.disconnect!
         | 
| 207 203 | 
             
                              end
         | 
| 208 | 
            -
                            else
         | 
| 209 | 
            -
                              shard.name = name
         | 
| 210 204 | 
             
                            end
         | 
| 211 205 | 
             
                            old_proc = ::ActiveRecord::Base.connection.raw_connection.set_notice_processor {} if config[:adapter] == 'postgresql'
         | 
| 212 206 | 
             
                            old_verbose = ::ActiveRecord::Migration.verbose
         | 
| @@ -229,11 +223,10 @@ module Switchman | |
| 229 223 | 
             
                          end
         | 
| 230 224 | 
             
                        end
         | 
| 231 225 | 
             
                      end
         | 
| 232 | 
            -
                      shard.save!
         | 
| 233 226 | 
             
                      shard
         | 
| 234 227 | 
             
                    rescue
         | 
| 235 228 | 
             
                      shard.destroy
         | 
| 236 | 
            -
                      shard.drop_database  | 
| 229 | 
            +
                      shard.drop_database rescue nil
         | 
| 237 230 | 
             
                      reset_column_information unless create_schema == false rescue nil
         | 
| 238 231 | 
             
                      raise
         | 
| 239 232 | 
             
                    ensure
         | 
    
        data/lib/switchman/version.rb
    CHANGED
    
    
    
        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.10. | 
| 4 | 
            +
              version: 1.10.4
         | 
| 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:  | 
| 13 | 
            +
            date: 2018-05-07 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: railties
         | 
| @@ -243,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 243 243 | 
             
                  version: '0'
         | 
| 244 244 | 
             
            requirements: []
         | 
| 245 245 | 
             
            rubyforge_project: 
         | 
| 246 | 
            -
            rubygems_version: 2.6 | 
| 246 | 
            +
            rubygems_version: 2.7.6
         | 
| 247 247 | 
             
            signing_key: 
         | 
| 248 248 | 
             
            specification_version: 4
         | 
| 249 249 | 
             
            summary: Rails 4 sharding magic
         |