From fc8f7cc217203d9faa348e4554450662ea7a4c55 Mon Sep 17 00:00:00 2001 From: Anthony Martin <github@martin-studio.com> Date: Tue, 23 Oct 2018 19:56:48 -0700 Subject: [PATCH] move raise_error_response into base_client, call from http_client so it's closer to the error origin #6 --- lib/steem/api.rb | 21 --------------------- lib/steem/rpc/base_client.rb | 13 +++++++++++++ lib/steem/rpc/http_client.rb | 18 +++++++++++++++++- 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/lib/steem/api.rb b/lib/steem/api.rb index 513b390..2a72a31 100644 --- a/lib/steem/api.rb +++ b/lib/steem/api.rb @@ -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 diff --git a/lib/steem/rpc/base_client.rb b/lib/steem/rpc/base_client.rb index 8d7387e..d5ae9fd 100644 --- a/lib/steem/rpc/base_client.rb +++ b/lib/steem/rpc/base_client.rb @@ -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 diff --git a/lib/steem/rpc/http_client.rb b/lib/steem/rpc/http_client.rb index 0517fa0..1d153b5 100644 --- a/lib/steem/rpc/http_client.rb +++ b/lib/steem/rpc/http_client.rb @@ -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) -- GitLab