class Cassandra::Retry::Policies::Backoff

This is a version of the default retry policy (github.com/datastax/ruby-driver/blob/v2.1.5/lib/cassandra/retry/policies/default.rb) with backoff retry configuration options

Public Class Methods

new(opts) click to toggle source
# File lib/logstash/outputs/cassandra/backoff_retry_policy.rb, line 12
def initialize(opts)
  @logger = opts['logger']
  @backoff_type = opts['backoff_type']
  @backoff_size = opts['backoff_size']
  @retry_limit = opts['retry_limit']
end

Public Instance Methods

read_timeout(statement, consistency, required, received, retrieved, retries) click to toggle source
# File lib/logstash/outputs/cassandra/backoff_retry_policy.rb, line 19
def read_timeout(statement, consistency, required, received, retrieved, retries)
  retry_with_backoff({ :statement => statement, :consistency => consistency, :required => required,
                       :received => received, :retrieved => retrieved, :retries => retries })
end
retry_with_backoff(opts) click to toggle source
# File lib/logstash/outputs/cassandra/backoff_retry_policy.rb, line 34
def retry_with_backoff(opts)
  if @retry_limit > -1 && opts[:retries] > @retry_limit
    @logger.error('backoff retries exhausted', :opts => opts)
    return reraise
  end

  @logger.error('activating backoff wait', :opts => opts)
  backoff_wait_before_next_retry(opts[:retries])

  try_again(opts[:consistency])
end
unavailable(statement, consistency, required, alive, retries) click to toggle source
# File lib/logstash/outputs/cassandra/backoff_retry_policy.rb, line 29
def unavailable(statement, consistency, required, alive, retries)
  retry_with_backoff({ :statement => statement, :consistency => consistency, :required => required,
                       :alive => alive, :retries => retries })
end
write_timeout(statement, consistency, type, required, received, retries) click to toggle source
# File lib/logstash/outputs/cassandra/backoff_retry_policy.rb, line 24
def write_timeout(statement, consistency, type, required, received, retries)
  retry_with_backoff({ :statement => statement, :consistency => consistency, :type => type,
                       :required => required, :received => received, :retries => retries })
end

Private Instance Methods

backoff_wait_before_next_retry(retries) click to toggle source
# File lib/logstash/outputs/cassandra/backoff_retry_policy.rb, line 47
def backoff_wait_before_next_retry(retries)
  backoff_wait_time = calculate_backoff_wait_time(retries)
  Kernel::sleep(backoff_wait_time)
end
calculate_backoff_wait_time(retries) click to toggle source
# File lib/logstash/outputs/cassandra/backoff_retry_policy.rb, line 52
def calculate_backoff_wait_time(retries)
  case @backoff_type
    when '**'
      return @backoff_size ** retries
    when '*'
      return @backoff_size * retries
    else
      raise ArgumentError, "unknown backoff type #{@backoff_type}"
  end
end