lib/heirloom/aws/simpledb.rb in heirloom-0.12.5 vs lib/heirloom/aws/simpledb.rb in heirloom-0.12.7
- old
+ new
@@ -1,6 +1,7 @@
require 'fog'
+require 'retries'
module Heirloom
module AWS
class SimpleDB
@@ -18,43 +19,60 @@
end
@sdb = Fog::AWS::SimpleDB.new fog_args
end
+ def retry_options
+ {:max_retries => 3,
+ :rescue => Excon::Errors::ServiceUnavailable,
+ :base_sleep_seconds => 10,
+ :max_sleep_seconds => 60}
+ end
+
def domains
- @sdb.list_domains.body['Domains']
+ with_retries(retry_options) do
+ @sdb.list_domains.body['Domains']
+ end
end
def domain_exists?(domain)
domains.include? domain
end
def create_domain(domain)
- @sdb.create_domain(domain) unless domain_exists?(domain)
+ with_retries(retry_options) do
+ @sdb.create_domain(domain) unless domain_exists?(domain)
+ end
end
def delete_domain(domain)
- @sdb.delete_domain(domain)
+ with_retries(retry_options) do
+ @sdb.delete_domain(domain)
+ end
end
def domain_empty?(domain)
count(domain).zero?
end
def put_attributes(domain, key, attributes, options = {})
- @sdb.put_attributes domain, key, attributes, options
+ with_retries(retry_options) do
+ @sdb.put_attributes domain, key, attributes, options
+ end
end
def select(query, opts = {})
has_more = true
next_token = nil
results = {}
logger.debug "Executing simpledb query '#{query}'."
if opts[:offset] && opts[:offset] > 0
- limit = @sdb.select("#{query} limit #{opts[:offset]}").body
+ limit = with_retries(retry_options) do
+ @sdb.select("#{query} limit #{opts[:offset]}").body
+ end
if limit['NextToken']
logger.debug "Next token found. Retrieving results."
next_token = limit['NextToken']
else
logger.debug "No more results. Query complete."
@@ -62,11 +80,13 @@
end
end
while has_more
logger.debug "Retrieving results from next token '#{next_token}'." if next_token
- more = @sdb.select(query, 'NextToken' => next_token).body
+ more = with_retries(retry_options) do
+ @sdb.select(query, 'NextToken' => next_token).body
+ end
more['Items'].each do |k, v|
block_given? ? yield(k, v) : results[k] = v
end
if more['NextToken']
logger.debug "Next token found. Retrieving results."
@@ -78,20 +98,26 @@
end
results unless block_given?
end
def delete(domain, key)
- @sdb.delete_attributes domain, key
+ with_retries(retry_options) do
+ @sdb.delete_attributes domain, key
+ end
end
def count(domain)
- body = @sdb.select("SELECT count(*) FROM `#{domain}`").body
- body['Items']['Domain']['Count'].first.to_i
+ with_retries(retry_options) do
+ body = @sdb.select("SELECT count(*) FROM `#{domain}`").body
+ body['Items']['Domain']['Count'].first.to_i
+ end
end
def item_count(domain, item)
- query = "SELECT count(*) FROM `#{domain}` WHERE itemName() = '#{item}'"
- @sdb.select(query).body['Items']['Domain']['Count'].first.to_i
+ with_retries(retry_options) do
+ query = "SELECT count(*) FROM `#{domain}` WHERE itemName() = '#{item}'"
+ @sdb.select(query).body['Items']['Domain']['Count'].first.to_i
+ end
end
def logger
@logger
end