Skip to content
Snippets Groups Projects
Unverified Commit b6c8f93e authored by Anthony Martin's avatar Anthony Martin Committed by GitHub
Browse files

Merge pull request #12 from steemit/6-recover-requested-blocks

6 recover requested blocks
parents 58c66e46 421e4cb3
No related branches found
No related tags found
No related merge requests found
......@@ -149,19 +149,6 @@ module Steem
@@signatures[url][rpc_method_name] ||= Api::jsonrpc(url).get_signature(method: rpc_method_name).result
end
# @private
def raise_error_response(rpc_method_name, rpc_args, response)
raise UnknownError, "#{rpc_method_name}: #{response}" if response.error.nil?
error = response.error
if error.message == 'Invalid Request'
raise Steem::ArgumentError, "Unexpected arguments: #{rpc_args.inspect}. Expected: #{rpc_method_name} (#{args_keys_to_s(rpc_method_name)})"
end
BaseError.build_error(error, rpc_method_name)
end
# @private
def respond_to_missing?(m, include_private = false)
methods.nil? ? false : methods.include?(m.to_sym)
......@@ -203,14 +190,6 @@ module Steem
response = rpc_client.rpc_execute(@api_name, m, rpc_args)
if defined?(response.error) && !!response.error
if !!response.error.message
raise_error_response rpc_method_name, rpc_args, response
else
raise Steem::ArgumentError, response.error.inspect
end
end
if !!block
case response
when Hashie::Mash then yield response.result, response.error, response.id
......
......@@ -161,6 +161,19 @@ module Steem
sleep @backoff
end
# @private
def raise_error_response(rpc_method_name, rpc_args, response)
raise UnknownError, "#{rpc_method_name}: #{response}" if response.error.nil?
error = response.error
if error.message == 'Invalid Request'
raise Steem::ArgumentError, "Unexpected arguments: #{rpc_args.inspect}. Expected: #{rpc_method_name} (#{args_keys_to_s(rpc_method_name)})"
end
BaseError.build_error(error, rpc_method_name)
end
end
end
end
......@@ -17,7 +17,7 @@ module Steem
#
# @private
TIMEOUT_ERRORS = [Net::OpenTimeout, JSON::ParserError, Net::ReadTimeout,
Errno::EBADF, IOError, Errno::ENETDOWN]
Errno::EBADF, IOError, Errno::ENETDOWN, Steem::RemoteDatabaseLockError]
# @private
POST_HEADERS = {
......@@ -108,6 +108,22 @@ module Steem
else; response
end
[response].flatten.each_with_index do |r, i|
if defined?(r.error) && !!r.error
if !!r.error.message
begin
rpc_method_name = "#{api_name}.#{api_method}"
rpc_args = [request_object].flatten[i]
raise_error_response rpc_method_name, rpc_args, r
rescue *TIMEOUT_ERRORS => e
throw retry_timeout(:tota_cera_pila, e)
end
else
raise Steem::ArgumentError, r.error.inspect
end
end
end
yield_response response, &block
when '504' # Gateway Timeout
throw retry_timeout(:tota_cera_pila, response.body)
......
......@@ -91,6 +91,14 @@ module Steem
# @option options [Integer] :until_block_num Ends the stream at the given block number. Default: nil.
def transactions(options = {}, &block)
blocks(options) do |block, block_num|
if block.nil?
warn "Batch missing block_num: #{block_num}, retrying ..."
block = block_api.get_block(block_num: block_num) do |result|
result.block
end
end
block.transactions.each_with_index do |transaction, index|
trx_id = block.transaction_ids[index]
......@@ -332,9 +340,8 @@ module Steem
end
response = account_history_api.get_ops_in_block(*get_ops_in_block_options)
result = response.result
if result.nil?
if response.nil? || (result = response.result).nil?
if retries < MAX_RETRY_COUNT
warn "Retrying get_ops_in_block on block #{block_num}" unless @no_warn
retries = retries + 1
......@@ -360,7 +367,8 @@ module Steem
retries = retries + 1
redo
else
raise TooManyRetriesError, "unable to find virtual operations for block: #{block_num}"
warn "unable to find virtual operations for block: #{block_num}"
# raise TooManyRetriesError, "unable to find virtual operations for block: #{block_num}"
end
end
......@@ -374,4 +382,4 @@ module Steem
end
end
end
end
\ No newline at end of file
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment