From 66d4d13286c74ab01f60ddf6b1e6ad4b44003a64 Mon Sep 17 00:00:00 2001 From: Raghuram Devarakonda Date: Fri, 3 Mar 2023 19:19:55 -0500 Subject: [PATCH] Check and return errors while validating science image. Fixes #540. --- servicex_app/servicex/docker_repo_adapter.py | 18 ++++++++++++------ .../resources/transformation/submit.py | 4 ++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/servicex_app/servicex/docker_repo_adapter.py b/servicex_app/servicex/docker_repo_adapter.py index 89ec9c3e7..e93ade4c3 100644 --- a/servicex_app/servicex/docker_repo_adapter.py +++ b/servicex_app/servicex/docker_repo_adapter.py @@ -35,7 +35,7 @@ class DockerRepoAdapter: def __init__(self, registry_endpoint="https://hub.docker.com"): self.registry_endpoint = registry_endpoint - def check_image_exists(self, tagged_image: str) -> bool: + def check_image_exists(self, tagged_image: str) -> (bool, str): """ Checks that the given Docker image :param tagged_image: Full Docker image name, e.g. "sslhep/servicex_app:latest". @@ -43,15 +43,21 @@ def check_image_exists(self, tagged_image: str) -> bool: """ search_result = re.search("(.+)/(.+):(.+)", tagged_image) if not search_result or len(search_result.groups()) != 3: - return False + return False, f"Requested transformer docker image is not in the right format: {tagged_image}" (repo, image, tag) = search_result.groups() query = f'{self.registry_endpoint}/v2/repositories/{repo}/{image}/tags/{tag}' r = requests.get(query) + + if r.status_code >= 200 and r.status_code < 300: + current_app.logger.info(f"Requested Image: {tagged_image} exists, " + f"last updated {r.json()['last_updated']}") + return True, "" + if r.status_code == 404: - return False + return False, f"Requested transformer docker image doesn't exist: {tagged_image}" + + msg = f"Unexpected error in validating transformer docker image ({tagged_image}), status_code: {r.status_code}, msg ({r.content})" + return False, msg - current_app.logger.info(f"Requested Image: {tagged_image} exists, " - f"last updated {r.json()['last_updated']}") - return True diff --git a/servicex_app/servicex/resources/transformation/submit.py b/servicex_app/servicex/resources/transformation/submit.py index 68c153d7e..56877024d 100644 --- a/servicex_app/servicex/resources/transformation/submit.py +++ b/servicex_app/servicex/resources/transformation/submit.py @@ -150,8 +150,8 @@ def post(self): request_rec.image = codegen_transformer_image if config['TRANSFORMER_VALIDATE_DOCKER_IMAGE']: - if not self.docker_repo_adapter.check_image_exists(request_rec.image): - msg = f"Requested transformer docker image doesn't exist: {request_rec.image}" + exists, msg = self.docker_repo_adapter.check_image_exists(request_rec.image) + if not exists: current_app.logger.error(msg, extra={'requestId': request_id}) return {'message': msg}, 400