class Cequel::Metal::Policy::CassandraError::ClearAndRetryPolicy

Attributes

clear_before_retry[R]

@return Boolean if this policy clears connections before retry

max_retries[R]

@return Integer maximum number of retries to reconnect to Cassandra

retry_delay[R]

@return Float delay between retries to reconnect to Cassandra

Public Class Methods

new(options = {}) click to toggle source
# File lib/cequel/metal/policy/cassandra_error.rb, line 33
def initialize(options = {})
  @max_retries = options.fetch(:max_retries, 3)
  @retry_delay = options.fetch(:retry_delay, 0.5)
  @clear_before_retry = !!options.fetch(:clear_before_retry, true)
  
  if @retry_delay <= 0.0
    raise ArgumentError, "The value for retry must be a positive number, not '#{@retry_delay}'"
  end
end

Public Instance Methods

execute_stmt(keyspace) { || ... } click to toggle source
# File lib/cequel/metal/policy/cassandra_error.rb, line 43
def execute_stmt(keyspace)
  retries_remaining = max_retries
  begin
    yield
  rescue Cassandra::Errors::NoHostsAvailable,
        Cassandra::Errors::ExecutionError,
        Cassandra::Errors::TimeoutError => error
    raise error if retries_remaining == 0
    sleep(retry_delay)
    keyspace.clear_active_connections! if clear_before_retry
    retries_remaining -= 1
    retry                    
  end
end