From ff3afe391ce421a986dd928f609d04d0f308498d Mon Sep 17 00:00:00 2001 From: "Antoine R. Dumont (@ardumont)" Date: Fri, 20 Jul 2018 12:06:56 +0200 Subject: [PATCH] lister/core: Fix missing use case about no response from api server UnboundLocalError could happen otherwise --- swh/lister/core/indexing_lister.py | 3 +++ swh/lister/core/lister_base.py | 3 +++ swh/lister/core/page_by_page_lister.py | 5 ++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/swh/lister/core/indexing_lister.py b/swh/lister/core/indexing_lister.py index f76c4fc..3388077 100644 --- a/swh/lister/core/indexing_lister.py +++ b/swh/lister/core/indexing_lister.py @@ -174,6 +174,9 @@ class SWHIndexingLister(SWHListerBase): logging.info('listing repos starting at %s' % index) response, injected_repos = self.ingest_data(index) + if not response and not injected_repos: + logging.info('No response from api server, stopping') + break next_index = self.get_next_target_from_response(response) diff --git a/swh/lister/core/lister_base.py b/swh/lister/core/lister_base.py index b8f22f2..46ad64d 100644 --- a/swh/lister/core/lister_base.py +++ b/swh/lister/core/lister_base.py @@ -285,6 +285,7 @@ class SWHListerBase(abc.ABC, config.SWHConfig): """ retries_left = self.MAX_RETRIES do_cache = self.config['cache_responses'] + r = None while retries_left > 0: try: r = self.transport_request(identifier) @@ -486,6 +487,8 @@ class SWHListerBase(abc.ABC, config.SWHConfig): """ # Request (partial?) list of repositories info response = self.safely_issue_request(identifier) + if not response: + return response, [] models_list = self.transport_response_simplified(response) models_list = self.filter_before_inject(models_list) if checks: diff --git a/swh/lister/core/page_by_page_lister.py b/swh/lister/core/page_by_page_lister.py index 8286b4a..3b9e27e 100644 --- a/swh/lister/core/page_by_page_lister.py +++ b/swh/lister/core/page_by_page_lister.py @@ -121,7 +121,10 @@ class PageByPageLister(SWHListerBase): response, injected_repos = self.ingest_data(page, checks=check_existence) - if not injected_repos: + if not response and not injected_repos: + logging.info('No response from api server, stopping') + break + elif not injected_repos: logging.info('Repositories already seen, stopping') break