|
@@ -41,23 +41,31 @@ class Sequencer
|
|
|
def resource_iteration(&block)
|
|
|
resource_collection.public_send(resource_iteration_method, &block)
|
|
|
rescue ZendeskAPI::Error::NetworkError => e
|
|
|
- status = e.response.status.to_s
|
|
|
+ return if expected_exception?(e)
|
|
|
+ raise if !retry_exception?(e)
|
|
|
+ raise if (fail_count ||= 1) > 10
|
|
|
|
|
|
- if status.match?(/^(4|5)\d\d$/)
|
|
|
+ logger.error e
|
|
|
+ logger.info "Sleeping 10 seconds after ZendeskAPI::Error::NetworkError and retry (##{fail_count}/10)."
|
|
|
+ sleep 10
|
|
|
|
|
|
- # #2262 Zendesk-Import fails for User & Organizations when 403 "access" denied
|
|
|
- return if status == '403' && resource_klass.in?(%w[UserField OrganizationField])
|
|
|
+ fail_count += 1
|
|
|
+ retry
|
|
|
+ end
|
|
|
|
|
|
- raise if (fail_count ||= 1) > 10
|
|
|
+ # #2262 Zendesk-Import fails for User & Organizations when 403 "access" denied
|
|
|
+ def expected_exception?(e)
|
|
|
+ status = e.response.status.to_s
|
|
|
+ return false if status != '403'
|
|
|
|
|
|
- logger.error e
|
|
|
- logger.info "Sleeping 10 seconds after ZendeskAPI::Error::NetworkError and retry (##{fail_count}/10)."
|
|
|
- sleep 10
|
|
|
+ %w[UserField OrganizationField].include?(resource_klass)
|
|
|
+ end
|
|
|
|
|
|
- (fail_count += 1) && retry
|
|
|
- end
|
|
|
+ def retry_exception?(e)
|
|
|
+ return true if e.message.include?('execution expired')
|
|
|
|
|
|
- raise
|
|
|
+ status = e.response.status.to_s
|
|
|
+ status.match?(/^(4|5)\d\d$/)
|
|
|
end
|
|
|
|
|
|
def resource_collection
|