google-cloud-spanner 2.4.0 → 2.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 +4 -4
- data/CHANGELOG.md +6 -0
- data/CONTRIBUTING.md +1 -1
- data/LOGGING.md +1 -1
- data/lib/google/cloud/spanner/backup.rb +2 -2
- data/lib/google/cloud/spanner/backup/job.rb +8 -8
- data/lib/google/cloud/spanner/backup/job/list.rb +2 -2
- data/lib/google/cloud/spanner/backup/list.rb +2 -2
- data/lib/google/cloud/spanner/batch_snapshot.rb +2 -2
- data/lib/google/cloud/spanner/batch_update.rb +3 -1
- data/lib/google/cloud/spanner/client.rb +43 -49
- data/lib/google/cloud/spanner/data.rb +4 -5
- data/lib/google/cloud/spanner/database/job/list.rb +2 -2
- data/lib/google/cloud/spanner/database/list.rb +4 -4
- data/lib/google/cloud/spanner/fields.rb +3 -2
- data/lib/google/cloud/spanner/instance/config/list.rb +4 -4
- data/lib/google/cloud/spanner/instance/list.rb +4 -4
- data/lib/google/cloud/spanner/partition.rb +4 -2
- data/lib/google/cloud/spanner/policy.rb +3 -2
- data/lib/google/cloud/spanner/pool.rb +10 -10
- data/lib/google/cloud/spanner/results.rb +6 -6
- data/lib/google/cloud/spanner/service.rb +6 -2
- data/lib/google/cloud/spanner/session.rb +5 -5
- data/lib/google/cloud/spanner/status.rb +4 -1
- data/lib/google/cloud/spanner/version.rb +1 -1
- metadata +10 -10
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 9768d839e58d7697a3ec4d57f924c6dd251bf59b1bb531ca2fbcf14da1b6120d
         | 
| 4 | 
            +
              data.tar.gz: 2fd33ab3bfddeaed840fd815d057e3ddb81bf3a4b746b88f20dcc72ecca46e44
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: ba9f01ea9fc094a4ece357bacddc46cf235704f242eea88393de8ea5b1e5ae56b1f5260ad26e999ad53047d4a4c7f6d855612ea6de139e80ae7d60ec6b305fdf
         | 
| 7 | 
            +
              data.tar.gz: fb498abaae70d4b8c56736b8267f87ae3637ddfe6b3aad675ad35c2faa1d4681a3a91be98ce6604454b185557a11aaf5a8294b0e007a849ff08ff19cad3088ae
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/CONTRIBUTING.md
    CHANGED
    
    | @@ -24,7 +24,7 @@ be able to accept your pull requests. | |
| 24 24 | 
             
            In order to use the google-cloud-spanner console and run the project's tests,
         | 
| 25 25 | 
             
            there is a small amount of setup:
         | 
| 26 26 |  | 
| 27 | 
            -
            1. Install Ruby. google-cloud-spanner requires Ruby 2. | 
| 27 | 
            +
            1. Install Ruby. google-cloud-spanner requires Ruby 2.5+. You may choose to
         | 
| 28 28 | 
             
               manage your Ruby and gem installations with [RVM](https://rvm.io/),
         | 
| 29 29 | 
             
               [rbenv](https://github.com/rbenv/rbenv), or
         | 
| 30 30 | 
             
               [chruby](https://github.com/postmodern/chruby).
         | 
    
        data/LOGGING.md
    CHANGED
    
    | @@ -3,7 +3,7 @@ | |
| 3 3 | 
             
            To enable logging for this library, set the logger for the underlying
         | 
| 4 4 | 
             
            [gRPC](https://github.com/grpc/grpc/tree/master/src/ruby) library. The logger
         | 
| 5 5 | 
             
            that you set may be a Ruby stdlib
         | 
| 6 | 
            -
            [`Logger`](https://ruby-doc.org/stdlib | 
| 6 | 
            +
            [`Logger`](https://ruby-doc.org/stdlib/libdoc/logger/rdoc/Logger.html) as
         | 
| 7 7 | 
             
            shown below, or a
         | 
| 8 8 | 
             
            [`Google::Cloud::Logging::Logger`](https://googleapis.dev/ruby/google-cloud-logging/latest)
         | 
| 9 9 | 
             
            that will write logs to [Stackdriver
         | 
| @@ -155,9 +155,9 @@ module Google | |
| 155 155 | 
             
                      @grpc.expire_time = Convert.time_to_timestamp time
         | 
| 156 156 | 
             
                      update_mask = Google::Protobuf::FieldMask.new paths: ["expire_time"]
         | 
| 157 157 | 
             
                      @grpc = service.update_backup @grpc, update_mask
         | 
| 158 | 
            -
                    rescue Google::Cloud::Error =>  | 
| 158 | 
            +
                    rescue Google::Cloud::Error => e
         | 
| 159 159 | 
             
                      @grpc.expire_time = expire_time_was
         | 
| 160 | 
            -
                      raise  | 
| 160 | 
            +
                      raise e
         | 
| 161 161 | 
             
                    end
         | 
| 162 162 |  | 
| 163 163 | 
             
                    ##
         | 
| @@ -39,7 +39,7 @@ module Google | |
| 39 39 | 
             
                    #
         | 
| 40 40 | 
             
                    #   database = spanner.database "my-instance", "my-database"
         | 
| 41 41 | 
             
                    #   expire_time = Time.now + 36000
         | 
| 42 | 
            -
                    #   job = database.create_backup "my-backup", expire_time | 
| 42 | 
            +
                    #   job = database.create_backup "my-backup", expire_time
         | 
| 43 43 | 
             
                    #
         | 
| 44 44 | 
             
                    #   job.done? #=> false
         | 
| 45 45 | 
             
                    #   job.reload! # API call
         | 
| @@ -80,7 +80,7 @@ module Google | |
| 80 80 | 
             
                      #
         | 
| 81 81 | 
             
                      #   database = spanner.database "my-instance", "my-database"
         | 
| 82 82 | 
             
                      #   expire_time = Time.now + 36000
         | 
| 83 | 
            -
                      #   job = database.create_backup "my-backup", expire_time | 
| 83 | 
            +
                      #   job = database.create_backup "my-backup", expire_time
         | 
| 84 84 | 
             
                      #
         | 
| 85 85 | 
             
                      #   job.done? #=> false
         | 
| 86 86 | 
             
                      #   job.reload!
         | 
| @@ -105,7 +105,7 @@ module Google | |
| 105 105 | 
             
                      #
         | 
| 106 106 | 
             
                      #   database = spanner.database "my-instance", "my-database"
         | 
| 107 107 | 
             
                      #   expire_time = Time.now + 36000
         | 
| 108 | 
            -
                      #   job = database.create_backup "my-backup", expire_time | 
| 108 | 
            +
                      #   job = database.create_backup "my-backup", expire_time
         | 
| 109 109 | 
             
                      #
         | 
| 110 110 | 
             
                      #   job.done? #=> false
         | 
| 111 111 | 
             
                      #
         | 
| @@ -125,7 +125,7 @@ module Google | |
| 125 125 | 
             
                      #
         | 
| 126 126 | 
             
                      #   database = spanner.database "my-instance", "my-database"
         | 
| 127 127 | 
             
                      #   expire_time = Time.now + 36000
         | 
| 128 | 
            -
                      #   job = database.create_backup "my-backup", expire_time | 
| 128 | 
            +
                      #   job = database.create_backup "my-backup", expire_time
         | 
| 129 129 | 
             
                      #
         | 
| 130 130 | 
             
                      #   job.error? #=> false
         | 
| 131 131 | 
             
                      #
         | 
| @@ -147,7 +147,7 @@ module Google | |
| 147 147 | 
             
                      #
         | 
| 148 148 | 
             
                      #   database = spanner.database "my-instance", "my-database"
         | 
| 149 149 | 
             
                      #   expire_time = Time.now + 36000
         | 
| 150 | 
            -
                      #   job = database.create_backup "my-backup", expire_time | 
| 150 | 
            +
                      #   job = database.create_backup "my-backup", expire_time
         | 
| 151 151 | 
             
                      #
         | 
| 152 152 | 
             
                      #   job.error? # true
         | 
| 153 153 | 
             
                      #
         | 
| @@ -172,7 +172,7 @@ module Google | |
| 172 172 | 
             
                      #
         | 
| 173 173 | 
             
                      #   database = spanner.database "my-instance", "my-database"
         | 
| 174 174 | 
             
                      #   expire_time = Time.now + 36000
         | 
| 175 | 
            -
                      #   job = database.create_backup "my-backup", expire_time | 
| 175 | 
            +
                      #   job = database.create_backup "my-backup", expire_time
         | 
| 176 176 | 
             
                      #
         | 
| 177 177 | 
             
                      #   job.done? #=> false
         | 
| 178 178 | 
             
                      #   job.reload! # API call
         | 
| @@ -195,7 +195,7 @@ module Google | |
| 195 195 | 
             
                      #
         | 
| 196 196 | 
             
                      #   database = spanner.database "my-instance", "my-database"
         | 
| 197 197 | 
             
                      #   expire_time = Time.now + 36000
         | 
| 198 | 
            -
                      #   job = database.create_backup "my-backup", expire_time | 
| 198 | 
            +
                      #   job = database.create_backup "my-backup", expire_time
         | 
| 199 199 | 
             
                      #
         | 
| 200 200 | 
             
                      #   job.done? #=> false
         | 
| 201 201 | 
             
                      #   job.wait_until_done!
         | 
| @@ -215,7 +215,7 @@ module Google | |
| 215 215 | 
             
                      #
         | 
| 216 216 | 
             
                      #   database = spanner.database "my-instance", "my-database"
         | 
| 217 217 | 
             
                      #   expire_time = Time.now + 36000
         | 
| 218 | 
            -
                      #   job = database.create_backup "my-backup", expire_time | 
| 218 | 
            +
                      #   job = database.create_backup "my-backup", expire_time
         | 
| 219 219 | 
             
                      #
         | 
| 220 220 | 
             
                      #   job.done? #=> false
         | 
| 221 221 | 
             
                      #   job.cancel
         | 
| @@ -130,12 +130,12 @@ module Google | |
| 130 130 | 
             
                        #     job.backup.backup_id
         | 
| 131 131 | 
             
                        #   end
         | 
| 132 132 | 
             
                        #
         | 
| 133 | 
            -
                        def all
         | 
| 133 | 
            +
                        def all &block
         | 
| 134 134 | 
             
                          return enum_for :all unless block_given?
         | 
| 135 135 |  | 
| 136 136 | 
             
                          results = self
         | 
| 137 137 | 
             
                          loop do
         | 
| 138 | 
            -
                            results.each | 
| 138 | 
            +
                            results.each(&block)
         | 
| 139 139 | 
             
                            break unless next?
         | 
| 140 140 | 
             
                            grpc.next_page
         | 
| 141 141 | 
             
                            results = self.class.from_grpc grpc, service
         | 
| @@ -128,12 +128,12 @@ module Google | |
| 128 128 | 
             
                      #     backup.backup_id
         | 
| 129 129 | 
             
                      #   end
         | 
| 130 130 | 
             
                      #
         | 
| 131 | 
            -
                      def all
         | 
| 131 | 
            +
                      def all &block
         | 
| 132 132 | 
             
                        return enum_for :all unless block_given?
         | 
| 133 133 |  | 
| 134 134 | 
             
                        results = self
         | 
| 135 135 | 
             
                        loop do
         | 
| 136 | 
            -
                          results.each | 
| 136 | 
            +
                          results.each(&block)
         | 
| 137 137 | 
             
                          break unless next?
         | 
| 138 138 | 
             
                          grpc.next_page
         | 
| 139 139 | 
             
                          results = self.class.from_grpc grpc, service
         | 
| @@ -373,9 +373,9 @@ module Google | |
| 373 373 |  | 
| 374 374 | 
             
                      opts = { call_options: call_options }
         | 
| 375 375 | 
             
                      if partition.execute?
         | 
| 376 | 
            -
                        execute_partition_query partition, opts
         | 
| 376 | 
            +
                        execute_partition_query partition, **opts
         | 
| 377 377 | 
             
                      elsif partition.read?
         | 
| 378 | 
            -
                        execute_partition_read partition, opts
         | 
| 378 | 
            +
                        execute_partition_read partition, **opts
         | 
| 379 379 | 
             
                      end
         | 
| 380 380 | 
             
                    end
         | 
| 381 381 |  | 
| @@ -59,7 +59,7 @@ module Google | |
| 59 59 | 
             
                      @instance_id = instance_id
         | 
| 60 60 | 
             
                      @database_id = database_id
         | 
| 61 61 | 
             
                      @session_labels = session_labels
         | 
| 62 | 
            -
                      @pool = Pool.new self, pool_opts
         | 
| 62 | 
            +
                      @pool = Pool.new self, **pool_opts
         | 
| 63 63 | 
             
                      @query_options = query_options
         | 
| 64 64 | 
             
                    end
         | 
| 65 65 |  | 
| @@ -1248,7 +1248,6 @@ module Google | |
| 1248 1248 | 
             
                    end
         | 
| 1249 1249 |  | 
| 1250 1250 | 
             
                    # rubocop:disable Metrics/AbcSize
         | 
| 1251 | 
            -
                    # rubocop:disable Metrics/BlockLength
         | 
| 1252 1251 | 
             
                    # rubocop:disable Metrics/MethodLength
         | 
| 1253 1252 |  | 
| 1254 1253 | 
             
                    ##
         | 
| @@ -1362,44 +1361,41 @@ module Google | |
| 1362 1361 | 
             
                      start_time = current_time
         | 
| 1363 1362 |  | 
| 1364 1363 | 
             
                      @pool.with_transaction do |tx|
         | 
| 1365 | 
            -
                         | 
| 1366 | 
            -
             | 
| 1367 | 
            -
             | 
| 1368 | 
            -
                           | 
| 1369 | 
            -
             | 
| 1370 | 
            -
             | 
| 1371 | 
            -
             | 
| 1372 | 
            -
             | 
| 1373 | 
            -
             | 
| 1374 | 
            -
             | 
| 1375 | 
            -
                         | 
| 1376 | 
            -
             | 
| 1377 | 
            -
                          if  | 
| 1378 | 
            -
                             | 
| 1379 | 
            -
                              err = Google::Cloud::Error.from_error err
         | 
| 1380 | 
            -
                            end
         | 
| 1381 | 
            -
                            raise err
         | 
| 1364 | 
            +
                        Thread.current[:transaction_id] = tx.transaction_id
         | 
| 1365 | 
            +
                        yield tx
         | 
| 1366 | 
            +
                        commit_resp = @project.service.commit \
         | 
| 1367 | 
            +
                          tx.session.path, tx.mutations,
         | 
| 1368 | 
            +
                          transaction_id: tx.transaction_id,
         | 
| 1369 | 
            +
                          commit_options: commit_options,
         | 
| 1370 | 
            +
                          call_options: call_options
         | 
| 1371 | 
            +
                        resp = CommitResponse.from_grpc commit_resp
         | 
| 1372 | 
            +
                        commit_options ? resp : resp.timestamp
         | 
| 1373 | 
            +
                      rescue GRPC::Aborted, Google::Cloud::AbortedError => e
         | 
| 1374 | 
            +
                        # Re-raise if deadline has passed
         | 
| 1375 | 
            +
                        if current_time - start_time > deadline
         | 
| 1376 | 
            +
                          if e.is_a? GRPC::BadStatus
         | 
| 1377 | 
            +
                            e = Google::Cloud::Error.from_error e
         | 
| 1382 1378 | 
             
                          end
         | 
| 1383 | 
            -
                           | 
| 1384 | 
            -
                          sleep(delay_from_aborted(err) || backoff *= 1.3)
         | 
| 1385 | 
            -
                          # Create new transaction on the session and retry the block
         | 
| 1386 | 
            -
                          tx = tx.session.create_transaction
         | 
| 1387 | 
            -
                          retry
         | 
| 1388 | 
            -
                        rescue StandardError => err
         | 
| 1389 | 
            -
                          # Rollback transaction when handling unexpected error
         | 
| 1390 | 
            -
                          tx.session.rollback tx.transaction_id
         | 
| 1391 | 
            -
                          # Return nil if raised with rollback.
         | 
| 1392 | 
            -
                          return nil if err.is_a? Rollback
         | 
| 1393 | 
            -
                          # Re-raise error.
         | 
| 1394 | 
            -
                          raise err
         | 
| 1395 | 
            -
                        ensure
         | 
| 1396 | 
            -
                          Thread.current[:transaction_id] = nil
         | 
| 1379 | 
            +
                          raise e
         | 
| 1397 1380 | 
             
                        end
         | 
| 1381 | 
            +
                        # Sleep the amount from RetryDelay, or incremental backoff
         | 
| 1382 | 
            +
                        sleep(delay_from_aborted(e) || backoff *= 1.3)
         | 
| 1383 | 
            +
                        # Create new transaction on the session and retry the block
         | 
| 1384 | 
            +
                        tx = tx.session.create_transaction
         | 
| 1385 | 
            +
                        retry
         | 
| 1386 | 
            +
                      rescue StandardError => e
         | 
| 1387 | 
            +
                        # Rollback transaction when handling unexpected error
         | 
| 1388 | 
            +
                        tx.session.rollback tx.transaction_id
         | 
| 1389 | 
            +
                        # Return nil if raised with rollback.
         | 
| 1390 | 
            +
                        return nil if e.is_a? Rollback
         | 
| 1391 | 
            +
                        # Re-raise error.
         | 
| 1392 | 
            +
                        raise e
         | 
| 1393 | 
            +
                      ensure
         | 
| 1394 | 
            +
                        Thread.current[:transaction_id] = nil
         | 
| 1398 1395 | 
             
                      end
         | 
| 1399 1396 | 
             
                    end
         | 
| 1400 1397 |  | 
| 1401 1398 | 
             
                    # rubocop:enable Metrics/AbcSize
         | 
| 1402 | 
            -
                    # rubocop:enable Metrics/BlockLength
         | 
| 1403 1399 | 
             
                    # rubocop:enable Metrics/MethodLength
         | 
| 1404 1400 |  | 
| 1405 1401 | 
             
                    ##
         | 
| @@ -1481,18 +1477,16 @@ module Google | |
| 1481 1477 | 
             
                      end
         | 
| 1482 1478 |  | 
| 1483 1479 | 
             
                      @pool.with_session do |session|
         | 
| 1484 | 
            -
                         | 
| 1485 | 
            -
                           | 
| 1486 | 
            -
             | 
| 1487 | 
            -
             | 
| 1488 | 
            -
             | 
| 1489 | 
            -
             | 
| 1490 | 
            -
             | 
| 1491 | 
            -
             | 
| 1492 | 
            -
             | 
| 1493 | 
            -
                         | 
| 1494 | 
            -
                          Thread.current[:transaction_id] = nil
         | 
| 1495 | 
            -
                        end
         | 
| 1480 | 
            +
                        snp_grpc = @project.service.create_snapshot \
         | 
| 1481 | 
            +
                          session.path, strong: strong,
         | 
| 1482 | 
            +
                                        timestamp: (timestamp || read_timestamp),
         | 
| 1483 | 
            +
                                        staleness: (staleness || exact_staleness),
         | 
| 1484 | 
            +
                                        call_options: call_options
         | 
| 1485 | 
            +
                        Thread.current[:transaction_id] = snp_grpc.id
         | 
| 1486 | 
            +
                        snp = Snapshot.from_grpc snp_grpc, session
         | 
| 1487 | 
            +
                        yield snp if block_given?
         | 
| 1488 | 
            +
                      ensure
         | 
| 1489 | 
            +
                        Thread.current[:transaction_id] = nil
         | 
| 1496 1490 | 
             
                      end
         | 
| 1497 1491 | 
             
                      nil
         | 
| 1498 1492 | 
             
                    end
         | 
| @@ -1691,7 +1685,7 @@ module Google | |
| 1691 1685 | 
             
                    def batch_create_new_sessions total
         | 
| 1692 1686 | 
             
                      sessions = []
         | 
| 1693 1687 | 
             
                      remaining = total
         | 
| 1694 | 
            -
                      while remaining | 
| 1688 | 
            +
                      while remaining.positive?
         | 
| 1695 1689 | 
             
                        sessions += batch_create_sessions remaining
         | 
| 1696 1690 | 
             
                        remaining = total - sessions.count
         | 
| 1697 1691 | 
             
                      end
         | 
| @@ -1795,7 +1789,7 @@ module Google | |
| 1795 1789 |  | 
| 1796 1790 | 
             
                    def validate_deadline deadline
         | 
| 1797 1791 | 
             
                      return 120 unless deadline.is_a? Numeric
         | 
| 1798 | 
            -
                      return 120 if deadline | 
| 1792 | 
            +
                      return 120 if deadline.negative?
         | 
| 1799 1793 | 
             
                      deadline
         | 
| 1800 1794 | 
             
                    end
         | 
| 1801 1795 |  | 
| @@ -1816,7 +1810,7 @@ module Google | |
| 1816 1810 | 
             
                        seconds = err.metadata["retryDelay"]["seconds"].to_i
         | 
| 1817 1811 | 
             
                        nanos = err.metadata["retryDelay"]["nanos"].to_i
         | 
| 1818 1812 | 
             
                        return seconds if nanos.zero?
         | 
| 1819 | 
            -
                        return seconds + (nanos /  | 
| 1813 | 
            +
                        return seconds + (nanos / 1_000_000_000.0)
         | 
| 1820 1814 | 
             
                      end
         | 
| 1821 1815 | 
             
                      # No metadata? Try the inner error
         | 
| 1822 1816 | 
             
                      delay_from_aborted err.cause
         | 
| @@ -139,9 +139,10 @@ module Google | |
| 139 139 | 
             
                    #
         | 
| 140 140 | 
             
                    def to_a skip_dup_check: nil
         | 
| 141 141 | 
             
                      values.map do |value|
         | 
| 142 | 
            -
                         | 
| 142 | 
            +
                        case value
         | 
| 143 | 
            +
                        when Data
         | 
| 143 144 | 
             
                          value.to_h skip_dup_check: skip_dup_check
         | 
| 144 | 
            -
                         | 
| 145 | 
            +
                        when Array
         | 
| 145 146 | 
             
                          value.map do |v|
         | 
| 146 147 | 
             
                            v.is_a?(Data) ? v.to_h(skip_dup_check: skip_dup_check) : v
         | 
| 147 148 | 
             
                          end
         | 
| @@ -169,9 +170,7 @@ module Google | |
| 169 170 | 
             
                    #   or indexes and corresponding values.
         | 
| 170 171 | 
             
                    #
         | 
| 171 172 | 
             
                    def to_h skip_dup_check: nil
         | 
| 172 | 
            -
                       | 
| 173 | 
            -
                        raise DuplicateNameError if fields.duplicate_names?
         | 
| 174 | 
            -
                      end
         | 
| 173 | 
            +
                      raise DuplicateNameError if !skip_dup_check && fields.duplicate_names?
         | 
| 175 174 |  | 
| 176 175 | 
             
                      Hash[keys.zip to_a(skip_dup_check: skip_dup_check)]
         | 
| 177 176 | 
             
                    end
         | 
| @@ -130,12 +130,12 @@ module Google | |
| 130 130 | 
             
                        #     job.database.database_id
         | 
| 131 131 | 
             
                        #   end
         | 
| 132 132 | 
             
                        #
         | 
| 133 | 
            -
                        def all
         | 
| 133 | 
            +
                        def all &block
         | 
| 134 134 | 
             
                          return enum_for :all unless block_given?
         | 
| 135 135 |  | 
| 136 136 | 
             
                          results = self
         | 
| 137 137 | 
             
                          loop do
         | 
| 138 | 
            -
                            results.each | 
| 138 | 
            +
                            results.each(&block)
         | 
| 139 139 | 
             
                            break unless next?
         | 
| 140 140 | 
             
                            grpc.next_page
         | 
| 141 141 | 
             
                            results = self.class.from_grpc grpc, service
         | 
| @@ -71,7 +71,7 @@ module Google | |
| 71 71 | 
             
                        return nil unless next?
         | 
| 72 72 | 
             
                        ensure_service!
         | 
| 73 73 | 
             
                        options = { token: token, max: @max }
         | 
| 74 | 
            -
                        grpc = @service.list_databases @instance_id, options
         | 
| 74 | 
            +
                        grpc = @service.list_databases @instance_id, **options
         | 
| 75 75 | 
             
                        self.class.from_grpc grpc, @service, @max
         | 
| 76 76 | 
             
                      end
         | 
| 77 77 |  | 
| @@ -123,17 +123,17 @@ module Google | |
| 123 123 | 
             
                      #     puts database.database_id
         | 
| 124 124 | 
             
                      #   end
         | 
| 125 125 | 
             
                      #
         | 
| 126 | 
            -
                      def all request_limit: nil
         | 
| 126 | 
            +
                      def all request_limit: nil, &block
         | 
| 127 127 | 
             
                        request_limit = request_limit.to_i if request_limit
         | 
| 128 128 | 
             
                        unless block_given?
         | 
| 129 129 | 
             
                          return enum_for :all, request_limit: request_limit
         | 
| 130 130 | 
             
                        end
         | 
| 131 131 | 
             
                        results = self
         | 
| 132 132 | 
             
                        loop do
         | 
| 133 | 
            -
                          results.each | 
| 133 | 
            +
                          results.each(&block)
         | 
| 134 134 | 
             
                          if request_limit
         | 
| 135 135 | 
             
                            request_limit -= 1
         | 
| 136 | 
            -
                            break if request_limit | 
| 136 | 
            +
                            break if request_limit.negative?
         | 
| 137 137 | 
             
                          end
         | 
| 138 138 | 
             
                          break unless results.next?
         | 
| 139 139 | 
             
                          results = results.next
         | 
| @@ -133,13 +133,14 @@ module Google | |
| 133 133 | 
             
                    #
         | 
| 134 134 | 
             
                    def types
         | 
| 135 135 | 
             
                      @grpc_fields.map(&:type).map do |type|
         | 
| 136 | 
            -
                         | 
| 136 | 
            +
                        case type.code
         | 
| 137 | 
            +
                        when :ARRAY
         | 
| 137 138 | 
             
                          if type.array_element_type.code == :STRUCT
         | 
| 138 139 | 
             
                            [Fields.from_grpc(type.array_element_type.struct_type.fields)]
         | 
| 139 140 | 
             
                          else
         | 
| 140 141 | 
             
                            [type.array_element_type.code]
         | 
| 141 142 | 
             
                          end
         | 
| 142 | 
            -
                         | 
| 143 | 
            +
                        when :STRUCT
         | 
| 143 144 | 
             
                          Fields.from_grpc type.struct_type.fields
         | 
| 144 145 | 
             
                        else
         | 
| 145 146 | 
             
                          type.code
         | 
| @@ -73,7 +73,7 @@ module Google | |
| 73 73 | 
             
                          return nil unless next?
         | 
| 74 74 | 
             
                          ensure_service!
         | 
| 75 75 | 
             
                          options = { token: token, max: @max }
         | 
| 76 | 
            -
                          grpc = @service.list_instance_configs | 
| 76 | 
            +
                          grpc = @service.list_instance_configs(**options)
         | 
| 77 77 | 
             
                          self.class.from_grpc grpc, @service, @max
         | 
| 78 78 | 
             
                        end
         | 
| 79 79 |  | 
| @@ -123,17 +123,17 @@ module Google | |
| 123 123 | 
             
                        #     puts config.instance_config_id
         | 
| 124 124 | 
             
                        #   end
         | 
| 125 125 | 
             
                        #
         | 
| 126 | 
            -
                        def all request_limit: nil
         | 
| 126 | 
            +
                        def all request_limit: nil, &block
         | 
| 127 127 | 
             
                          request_limit = request_limit.to_i if request_limit
         | 
| 128 128 | 
             
                          unless block_given?
         | 
| 129 129 | 
             
                            return enum_for :all, request_limit: request_limit
         | 
| 130 130 | 
             
                          end
         | 
| 131 131 | 
             
                          results = self
         | 
| 132 132 | 
             
                          loop do
         | 
| 133 | 
            -
                            results.each | 
| 133 | 
            +
                            results.each(&block)
         | 
| 134 134 | 
             
                            if request_limit
         | 
| 135 135 | 
             
                              request_limit -= 1
         | 
| 136 | 
            -
                              break if request_limit | 
| 136 | 
            +
                              break if request_limit.negative?
         | 
| 137 137 | 
             
                            end
         | 
| 138 138 | 
             
                            break unless results.next?
         | 
| 139 139 | 
             
                            results = results.next
         | 
| @@ -71,7 +71,7 @@ module Google | |
| 71 71 | 
             
                        return nil unless next?
         | 
| 72 72 | 
             
                        ensure_service!
         | 
| 73 73 | 
             
                        options = { token: token, max: @max }
         | 
| 74 | 
            -
                        grpc = @service.list_instances | 
| 74 | 
            +
                        grpc = @service.list_instances(**options)
         | 
| 75 75 | 
             
                        self.class.from_grpc grpc, @service, @max
         | 
| 76 76 | 
             
                      end
         | 
| 77 77 |  | 
| @@ -120,17 +120,17 @@ module Google | |
| 120 120 | 
             
                      #     puts instance.instance_id
         | 
| 121 121 | 
             
                      #   end
         | 
| 122 122 | 
             
                      #
         | 
| 123 | 
            -
                      def all request_limit: nil
         | 
| 123 | 
            +
                      def all request_limit: nil, &block
         | 
| 124 124 | 
             
                        request_limit = request_limit.to_i if request_limit
         | 
| 125 125 | 
             
                        unless block_given?
         | 
| 126 126 | 
             
                          return enum_for :all, request_limit: request_limit
         | 
| 127 127 | 
             
                        end
         | 
| 128 128 | 
             
                        results = self
         | 
| 129 129 | 
             
                        loop do
         | 
| 130 | 
            -
                          results.each | 
| 130 | 
            +
                          results.each(&block)
         | 
| 131 131 | 
             
                          if request_limit
         | 
| 132 132 | 
             
                            request_limit -= 1
         | 
| 133 | 
            -
                            break if request_limit | 
| 133 | 
            +
                            break if request_limit.negative?
         | 
| 134 134 | 
             
                          end
         | 
| 135 135 | 
             
                          break unless results.next?
         | 
| 136 136 | 
             
                          results = results.next
         | 
| @@ -45,11 +45,13 @@ module Google | |
| 45 45 | 
             
                  #
         | 
| 46 46 | 
             
                  class Partition
         | 
| 47 47 | 
             
                    # @ private
         | 
| 48 | 
            -
                    attr_reader :execute | 
| 48 | 
            +
                    attr_reader :execute
         | 
| 49 | 
            +
                    attr_reader :read
         | 
| 49 50 |  | 
| 50 51 | 
             
                    ##
         | 
| 51 52 | 
             
                    # @private Creates a Partition object.
         | 
| 52 | 
            -
                    def initialize | 
| 53 | 
            +
                    def initialize
         | 
| 54 | 
            +
                    end
         | 
| 53 55 |  | 
| 54 56 | 
             
                    ##
         | 
| 55 57 | 
             
                    # Whether the partition was created for an execute_query/query
         | 
| @@ -70,7 +70,8 @@ module Google | |
| 70 70 | 
             
                  #   end
         | 
| 71 71 | 
             
                  #
         | 
| 72 72 | 
             
                  class Policy
         | 
| 73 | 
            -
                    attr_reader :etag | 
| 73 | 
            +
                    attr_reader :etag
         | 
| 74 | 
            +
                    attr_reader :roles
         | 
| 74 75 |  | 
| 75 76 | 
             
                    ##
         | 
| 76 77 | 
             
                    # @private Creates a Policy object.
         | 
| @@ -169,7 +170,7 @@ module Google | |
| 169 170 | 
             
                            role: role_name,
         | 
| 170 171 | 
             
                            members: roles[role_name]
         | 
| 171 172 | 
             
                          )
         | 
| 172 | 
            -
                        end
         | 
| 173 | 
            +
                        end.compact
         | 
| 173 174 | 
             
                      )
         | 
| 174 175 | 
             
                    end
         | 
| 175 176 |  | 
| @@ -29,7 +29,9 @@ module Google | |
| 29 29 | 
             
                  # {Google::Cloud::Spanner::Session} instances.
         | 
| 30 30 | 
             
                  #
         | 
| 31 31 | 
             
                  class Pool
         | 
| 32 | 
            -
                    attr_accessor :all_sessions | 
| 32 | 
            +
                    attr_accessor :all_sessions
         | 
| 33 | 
            +
                    attr_accessor :session_queue
         | 
| 34 | 
            +
                    attr_accessor :transaction_queue
         | 
| 33 35 |  | 
| 34 36 | 
             
                    def initialize client, min: 10, max: 100, keepalive: 1800,
         | 
| 35 37 | 
             
                                   write_ratio: 0.3, fail: true, threads: nil
         | 
| @@ -38,7 +40,7 @@ module Google | |
| 38 40 | 
             
                      @max = max
         | 
| 39 41 | 
             
                      @keepalive = keepalive
         | 
| 40 42 | 
             
                      @write_ratio = write_ratio
         | 
| 41 | 
            -
                      @write_ratio = 0 if write_ratio | 
| 43 | 
            +
                      @write_ratio = 0 if write_ratio.negative?
         | 
| 42 44 | 
             
                      @write_ratio = 1 if write_ratio > 1
         | 
| 43 45 | 
             
                      @fail = fail
         | 
| 44 46 | 
             
                      @threads = threads || [2, Concurrent.processor_count * 2].max
         | 
| @@ -143,13 +145,13 @@ module Google | |
| 143 145 | 
             
                      return new_transaction! if action == :new
         | 
| 144 146 | 
             
                    end
         | 
| 145 147 |  | 
| 146 | 
            -
                    def checkin_transaction  | 
| 148 | 
            +
                    def checkin_transaction txn
         | 
| 147 149 | 
             
                      @mutex.synchronize do
         | 
| 148 | 
            -
                        unless all_sessions.include?  | 
| 150 | 
            +
                        unless all_sessions.include? txn.session
         | 
| 149 151 | 
             
                          raise ArgumentError, "Cannot checkin session"
         | 
| 150 152 | 
             
                        end
         | 
| 151 153 |  | 
| 152 | 
            -
                        transaction_queue.push  | 
| 154 | 
            +
                        transaction_queue.push txn
         | 
| 153 155 |  | 
| 154 156 | 
             
                        @resource.signal
         | 
| 155 157 | 
             
                      end
         | 
| @@ -182,7 +184,7 @@ module Google | |
| 182 184 | 
             
                      @mutex.synchronize do
         | 
| 183 185 | 
             
                        available_count = session_queue.count + transaction_queue.count
         | 
| 184 186 | 
             
                        release_count = @min - available_count
         | 
| 185 | 
            -
                        release_count = 0 if release_count | 
| 187 | 
            +
                        release_count = 0 if release_count.negative?
         | 
| 186 188 |  | 
| 187 189 | 
             
                        to_keepalive += (session_queue + transaction_queue).select do |x|
         | 
| 188 190 | 
             
                          x.idle_since? @keepalive
         | 
| @@ -282,10 +284,8 @@ module Google | |
| 282 284 | 
             
                      @keepalive_task.execute
         | 
| 283 285 | 
             
                    end
         | 
| 284 286 |  | 
| 285 | 
            -
                    def future
         | 
| 286 | 
            -
                      Concurrent::Future.new | 
| 287 | 
            -
                        yield
         | 
| 288 | 
            -
                      end.execute
         | 
| 287 | 
            +
                    def future &block
         | 
| 288 | 
            +
                      Concurrent::Future.new(executor: @thread_pool, &block).execute
         | 
| 289 289 | 
             
                    end
         | 
| 290 290 | 
             
                  end
         | 
| 291 291 | 
             
                end
         | 
| @@ -251,14 +251,14 @@ module Google | |
| 251 251 | 
             
                        @service.execute_streaming_sql(
         | 
| 252 252 | 
             
                          @session_path,
         | 
| 253 253 | 
             
                          @sql,
         | 
| 254 | 
            -
                           | 
| 254 | 
            +
                          **@execute_query_options.merge(resume_token: resume_token)
         | 
| 255 255 | 
             
                        )
         | 
| 256 256 | 
             
                      else
         | 
| 257 257 | 
             
                        @service.streaming_read_table(
         | 
| 258 258 | 
             
                          @session_path,
         | 
| 259 259 | 
             
                          @table,
         | 
| 260 260 | 
             
                          @columns,
         | 
| 261 | 
            -
                           | 
| 261 | 
            +
                          **@read_options.merge(resume_token: resume_token)
         | 
| 262 262 | 
             
                        )
         | 
| 263 263 | 
             
                      end
         | 
| 264 264 | 
             
                    end
         | 
| @@ -268,9 +268,9 @@ module Google | |
| 268 268 | 
             
                    # Retries a request, by re-executing it from scratch.
         | 
| 269 269 | 
             
                    def retry_request
         | 
| 270 270 | 
             
                      if @execute_query_options
         | 
| 271 | 
            -
                        @service.execute_streaming_sql @session_path, @sql,  | 
| 271 | 
            +
                        @service.execute_streaming_sql @session_path, @sql, **@execute_query_options
         | 
| 272 272 | 
             
                      else
         | 
| 273 | 
            -
                        @service.streaming_read_table @session_path, @table, @columns,  | 
| 273 | 
            +
                        @service.streaming_read_table @session_path, @table, @columns, **@read_options
         | 
| 274 274 | 
             
                      end
         | 
| 275 275 | 
             
                    end
         | 
| 276 276 |  | 
| @@ -326,7 +326,7 @@ module Google | |
| 326 326 | 
             
                        query_options: query_options, call_options: call_options
         | 
| 327 327 | 
             
                      }
         | 
| 328 328 | 
             
                      enum = service.execute_streaming_sql session_path, sql,
         | 
| 329 | 
            -
                                                           execute_query_options
         | 
| 329 | 
            +
                                                           **execute_query_options
         | 
| 330 330 | 
             
                      from_enum(enum, service).tap do |results|
         | 
| 331 331 | 
             
                        results.instance_variable_set :@session_path, session_path
         | 
| 332 332 | 
             
                        results.instance_variable_set :@sql,          sql
         | 
| @@ -346,7 +346,7 @@ module Google | |
| 346 346 | 
             
                        call_options: call_options
         | 
| 347 347 | 
             
                      }
         | 
| 348 348 | 
             
                      enum = service.streaming_read_table \
         | 
| 349 | 
            -
                        session_path, table, columns, read_options
         | 
| 349 | 
            +
                        session_path, table, columns, **read_options
         | 
| 350 350 | 
             
                      from_enum(enum, service).tap do |results|
         | 
| 351 351 | 
             
                        results.instance_variable_set :@session_path, session_path
         | 
| 352 352 | 
             
                        results.instance_variable_set :@table,        table
         | 
| @@ -28,8 +28,12 @@ module Google | |
| 28 28 | 
             
                  # @private Represents the gRPC Spanner service, including all the API
         | 
| 29 29 | 
             
                  # methods.
         | 
| 30 30 | 
             
                  class Service
         | 
| 31 | 
            -
                    attr_accessor :project | 
| 32 | 
            -
             | 
| 31 | 
            +
                    attr_accessor :project
         | 
| 32 | 
            +
                    attr_accessor :credentials
         | 
| 33 | 
            +
                    attr_accessor :timeout
         | 
| 34 | 
            +
                    attr_accessor :host
         | 
| 35 | 
            +
                    attr_accessor :lib_name
         | 
| 36 | 
            +
                    attr_accessor :lib_version
         | 
| 33 37 |  | 
| 34 38 | 
             
                    ##
         | 
| 35 39 | 
             
                    # Creates a new Service instance.
         | 
| @@ -639,7 +639,7 @@ module Google | |
| 639 639 | 
             
                        commit_options: commit_options,
         | 
| 640 640 | 
             
                        call_options: call_options
         | 
| 641 641 | 
             
                      }
         | 
| 642 | 
            -
                      commit | 
| 642 | 
            +
                      commit(**opts) do |c|
         | 
| 643 643 | 
             
                        c.upsert table, rows
         | 
| 644 644 | 
             
                      end
         | 
| 645 645 | 
             
                    end
         | 
| @@ -728,7 +728,7 @@ module Google | |
| 728 728 | 
             
                        commit_options: commit_options,
         | 
| 729 729 | 
             
                        call_options: call_options
         | 
| 730 730 | 
             
                      }
         | 
| 731 | 
            -
                      commit | 
| 731 | 
            +
                      commit(**opts) do |c|
         | 
| 732 732 | 
             
                        c.insert table, rows
         | 
| 733 733 | 
             
                      end
         | 
| 734 734 | 
             
                    end
         | 
| @@ -816,7 +816,7 @@ module Google | |
| 816 816 | 
             
                        commit_options: commit_options,
         | 
| 817 817 | 
             
                        call_options: call_options
         | 
| 818 818 | 
             
                      }
         | 
| 819 | 
            -
                      commit | 
| 819 | 
            +
                      commit(**opts) do |c|
         | 
| 820 820 | 
             
                        c.update table, rows
         | 
| 821 821 | 
             
                      end
         | 
| 822 822 | 
             
                    end
         | 
| @@ -906,7 +906,7 @@ module Google | |
| 906 906 | 
             
                        commit_options: commit_options,
         | 
| 907 907 | 
             
                        call_options: call_options
         | 
| 908 908 | 
             
                      }
         | 
| 909 | 
            -
                      commit | 
| 909 | 
            +
                      commit(**opts) do |c|
         | 
| 910 910 | 
             
                        c.replace table, rows
         | 
| 911 911 | 
             
                      end
         | 
| 912 912 | 
             
                    end
         | 
| @@ -974,7 +974,7 @@ module Google | |
| 974 974 | 
             
                        commit_options: commit_options,
         | 
| 975 975 | 
             
                        call_options: call_options
         | 
| 976 976 | 
             
                      }
         | 
| 977 | 
            -
                      commit | 
| 977 | 
            +
                      commit(**opts) do |c|
         | 
| 978 978 | 
             
                        c.delete table, keys
         | 
| 979 979 | 
             
                      end
         | 
| 980 980 | 
             
                    end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: google-cloud-spanner
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2. | 
| 4 | 
            +
              version: 2.5.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Mike Moore
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2021- | 
| 12 | 
            +
            date: 2021-03-11 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: google-cloud-core
         | 
| @@ -87,14 +87,14 @@ dependencies: | |
| 87 87 | 
             
                requirements:
         | 
| 88 88 | 
             
                - - "~>"
         | 
| 89 89 | 
             
                  - !ruby/object:Gem::Version
         | 
| 90 | 
            -
                    version: 1. | 
| 90 | 
            +
                    version: 1.25.1
         | 
| 91 91 | 
             
              type: :development
         | 
| 92 92 | 
             
              prerelease: false
         | 
| 93 93 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 94 94 | 
             
                requirements:
         | 
| 95 95 | 
             
                - - "~>"
         | 
| 96 96 | 
             
                  - !ruby/object:Gem::Version
         | 
| 97 | 
            -
                    version: 1. | 
| 97 | 
            +
                    version: 1.25.1
         | 
| 98 98 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 99 99 | 
             
              name: minitest
         | 
| 100 100 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -227,28 +227,28 @@ dependencies: | |
| 227 227 | 
             
                requirements:
         | 
| 228 228 | 
             
                - - "~>"
         | 
| 229 229 | 
             
                  - !ruby/object:Gem::Version
         | 
| 230 | 
            -
                    version: 1. | 
| 230 | 
            +
                    version: '1.36'
         | 
| 231 231 | 
             
              type: :development
         | 
| 232 232 | 
             
              prerelease: false
         | 
| 233 233 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 234 234 | 
             
                requirements:
         | 
| 235 235 | 
             
                - - "~>"
         | 
| 236 236 | 
             
                  - !ruby/object:Gem::Version
         | 
| 237 | 
            -
                    version: 1. | 
| 237 | 
            +
                    version: '1.36'
         | 
| 238 238 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 239 239 | 
             
              name: grpc-tools
         | 
| 240 240 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 241 241 | 
             
                requirements:
         | 
| 242 242 | 
             
                - - "~>"
         | 
| 243 243 | 
             
                  - !ruby/object:Gem::Version
         | 
| 244 | 
            -
                    version: 1. | 
| 244 | 
            +
                    version: '1.36'
         | 
| 245 245 | 
             
              type: :development
         | 
| 246 246 | 
             
              prerelease: false
         | 
| 247 247 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 248 248 | 
             
                requirements:
         | 
| 249 249 | 
             
                - - "~>"
         | 
| 250 250 | 
             
                  - !ruby/object:Gem::Version
         | 
| 251 | 
            -
                    version: 1. | 
| 251 | 
            +
                    version: '1.36'
         | 
| 252 252 | 
             
            description: google-cloud-spanner is the official library for Google Cloud Spanner
         | 
| 253 253 | 
             
              API.
         | 
| 254 254 | 
             
            email:
         | 
| @@ -324,14 +324,14 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 324 324 | 
             
              requirements:
         | 
| 325 325 | 
             
              - - ">="
         | 
| 326 326 | 
             
                - !ruby/object:Gem::Version
         | 
| 327 | 
            -
                  version: '2. | 
| 327 | 
            +
                  version: '2.5'
         | 
| 328 328 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 329 329 | 
             
              requirements:
         | 
| 330 330 | 
             
              - - ">="
         | 
| 331 331 | 
             
                - !ruby/object:Gem::Version
         | 
| 332 332 | 
             
                  version: '0'
         | 
| 333 333 | 
             
            requirements: []
         | 
| 334 | 
            -
            rubygems_version: 3.2. | 
| 334 | 
            +
            rubygems_version: 3.2.13
         | 
| 335 335 | 
             
            signing_key: 
         | 
| 336 336 | 
             
            specification_version: 4
         | 
| 337 337 | 
             
            summary: API Client library for Google Cloud Spanner API
         |