class Google::Cloud::Bigquery::Service::Backoff
Attributes
backoff[RW]
reasons[RW]
retries[RW]
Public Class Methods
new(retries: nil, reasons: nil, backoff: nil)
click to toggle source
# File lib/google/cloud/bigquery/service.rb, line 584 def initialize retries: nil, reasons: nil, backoff: nil @retries = (retries || Backoff.retries).to_i @reasons = (reasons || Backoff.reasons).to_a @backoff = backoff || Backoff.backoff end
Public Instance Methods
execute() { || ... }
click to toggle source
# File lib/google/cloud/bigquery/service.rb, line 590 def execute current_retries = 0 loop do return yield rescue Google::Apis::Error => e raise e unless retry? e.body, current_retries @backoff.call current_retries current_retries += 1 end end
Protected Instance Methods
retry?(result, current_retries)
click to toggle source
# File lib/google/cloud/bigquery/service.rb, line 604 def retry? result, current_retries if current_retries < @retries && retry_error_reason?(result) return true end false end
retry_error_reason?(err_body)
click to toggle source
# File lib/google/cloud/bigquery/service.rb, line 611 def retry_error_reason? err_body err_hash = JSON.parse err_body json_errors = Array err_hash["error"]["errors"] return false if json_errors.empty? json_errors.each do |json_error| return false unless @reasons.include? json_error["reason"] end true rescue StandardError false end