diff --git a/app/logical/danbooru/http.rb b/app/logical/danbooru/http.rb index 590271fe0..8e8655965 100644 --- a/app/logical/danbooru/http.rb +++ b/app/logical/danbooru/http.rb @@ -25,7 +25,6 @@ module Danbooru .headers("Accept-Encoding" => "gzip") .headers("User-Agent": "#{Danbooru.config.canonical_app_name}/#{Rails.application.config.x.git_hash}") .use(:auto_inflate) - .use(:retriable) .use(redirector: { max_redirects: MAX_REDIRECTS }) .use(:session) end diff --git a/app/logical/danbooru/http/retriable.rb b/app/logical/danbooru/http/retriable.rb index 681dd8bbe..23d5e865a 100644 --- a/app/logical/danbooru/http/retriable.rb +++ b/app/logical/danbooru/http/retriable.rb @@ -21,6 +21,8 @@ module Danbooru retries = max_retries while retriable?(response) && retries > 0 && retry_delay(response) <= max_delay + DanbooruLogger.info "Retrying url=#{request.uri} status=#{response.status} retries=#{retries} delay=#{retry_delay(response)}" + retries -= 1 sleep(retry_delay(response)) response = yield request diff --git a/app/logical/sources/strategies/nijie.rb b/app/logical/sources/strategies/nijie.rb index f3a15b576..b2a6fcc7a 100644 --- a/app/logical/sources/strategies/nijie.rb +++ b/app/logical/sources/strategies/nijie.rb @@ -180,7 +180,10 @@ module Sources http = Danbooru::Http.new form = { email: Danbooru.config.nijie_login, password: Danbooru.config.nijie_password } - response = http.cache(1.hour).post("https://nijie.info/login_int.php", form: form) + + # XXX `retriable` must come after `cache` so that retries don't return cached error responses. + response = http.cache(1.hour).use(:retriable).post("https://nijie.info/login_int.php", form: form) + DanbooruLogger.info "Nijie login failed (#{url}, #{response.status})" if response.status != 200 return nil unless response.status == 200 response = http.cookies(R18: 1).cache(1.minute).get(page_url)