From 16ab8a2ffd79aa08e691d88258af312ee515a1df Mon Sep 17 00:00:00 2001 From: mike Date: Thu, 28 Dec 2023 05:11:21 -0800 Subject: [PATCH] Track+log some migration failures instead of actually failing --- domain/Migrator.py | 52 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/domain/Migrator.py b/domain/Migrator.py index e1b1756..a9bae3c 100644 --- a/domain/Migrator.py +++ b/domain/Migrator.py @@ -212,14 +212,27 @@ class Migrator: if confirmation == "MIGRATE": self.__logger.info("Confirmation received; Processing ... ") - source_repos_successful = self._migrate_repos( + source_repos_successful, source_repos_failed = self._migrate_repos( destination_org_name=destination_org, destination_repo_name=destination_repo_name, destination_topics=destination_topics, do_destination_copy_topics=do_destination_copy_topics, repos=repos_migrate ) - self.__logger.info(f"{len(source_repos_successful)} of {len(repos_migrate)} repos successfully migrated.") + self.__logger.info( + f"{len(source_repos_successful)} of {len(repos_migrate)} repos successfully migrated." + ) + if len(source_repos_failed) > 0: + self.__logger.error(f"Failed to migrate {len(source_repos_failed)} repos:") + for repo, exception in source_repos_failed: + self.__logger.error( + f"> {repo.name}" + ) + self.__logger.error(f"Captured exception data:") + for repo, exception in source_repos_failed: + self.__logger.error( + f"Failed to migrate repo: {repo.name}\n> {exception}" + ) self._delete_migrated_repos(source_org_name=source_org, repos=source_repos_successful) @@ -323,6 +336,7 @@ class Migrator: ) source_repos_successful = [] + source_repos_failed = [] for source_repo in repos: source_repo: giteapy.Repository @@ -351,12 +365,28 @@ class Migrator: self.__logger.debug("Migrate body:") self.__logger.debug(migrate_body) - destination_api = self._get_repo_api( - hostname=self.__destination_host, - port=self.__destination_port, - token=self.__destination_token, - ) - repo_new = destination_api.repo_migrate(body=migrate_body) + try: + destination_api = self._get_repo_api( + hostname=self.__destination_host, + port=self.__destination_port, + token=self.__destination_token, + ) + except giteapy.rest.ApiException as e: + self.__logger.error(f"Failed to generate destination API: {e}") + source_repos_failed.append( + (source_repo, e) + ) + continue + + try: + repo_new = destination_api.repo_migrate(body=migrate_body) + except giteapy.rest.ApiException as e: + self.__logger.error(f"Failed to execute repo migration request via API: {e}") + source_repos_failed.append( + (source_repo, e) + ) + continue + self.__logger.debug(f"Migration result: {repo_new}") repo_new: giteapy.Repository @@ -384,10 +414,14 @@ class Migrator: source_repos_successful.append(source_repo) - return source_repos_successful + return source_repos_successful, source_repos_failed def _delete_migrated_repos(self, source_org_name: str, repos: list[giteapy.Repository]): + if len(repos) == 0: + self.__logger.warning(f"Cannot delete any migrated repos because none were successful!") + return + repo_api = self._get_repo_api( hostname=self.__source_host, port=self.__source_port,