class Google::Cloud::Bigtable::RowsMutator
@private # RowsMutator
Retryable mutate rows helper
Constants
- RETRYABLE_CODES
@private Retryable status codes
- RETRY_LIMIT
@private
Public Class Methods
new(table, entries)
click to toggle source
@private
Creates a mutate rows instance.
@param table [Google::Cloud::Bigtable::TableDataOperations] @param entries [Array<Google::Cloud::Bigtable::MutationEntry>]
# File lib/google/cloud/bigtable/rows_mutator.rb, line 48 def initialize table, entries @table = table @entries = entries end
Public Instance Methods
apply_mutations()
click to toggle source
Applies mutations.
@return [Array<Google::Cloud::Bigtable::V2::MutateRowsResponse::Entry>]
# File lib/google/cloud/bigtable/rows_mutator.rb, line 58 def apply_mutations @req_entries = @entries.map(&:to_grpc) statuses = mutate_rows @req_entries # Collects retryable mutations indices. indices = statuses.each_with_object [] do |e, r| r << e.index if @entries[e.index].retryable? && RETRYABLE_CODES[e.status.code] end return statuses if indices.empty? (RETRY_LIMIT - 1).times do break if indices.empty? indices = retry_entries statuses, indices end statuses end
Private Instance Methods
mutate_rows(entries)
click to toggle source
Mutates rows.
@param entries [Array<Google::Cloud::Bigtable::MutationEntry>] @return [Array<Google::Cloud::Bigtable::V2::MutateRowsResponse::Entry>]
# File lib/google/cloud/bigtable/rows_mutator.rb, line 85 def mutate_rows entries response = @table.service.mutate_rows @table.path, entries, app_profile_id: @table.app_profile_id response.each_with_object [] do |res, statuses| statuses.concat res.entries end end
retry_entries(statuses, indices)
click to toggle source
Collects failed entries, retries mutation, and updates status.
@param statuses [Array<Google::Cloud::Bigtable::V2::MutateRowsResponse::Entry>] @param indices [Array<Integer>]
Retry entries position mapping list
@return [Array<Integer>]
New list of failed entries positions
# File lib/google/cloud/bigtable/rows_mutator.rb, line 101 def retry_entries statuses, indices entries = indices.map { |i| @req_entries[i] } retry_statuses = mutate_rows entries retry_statuses.each_with_object [] do |e, next_indices| next_indices << indices[e.index] if RETRYABLE_CODES[e.status.code] statuses[indices[e.index]].status = e.status end end