This is an automated email from the ASF dual-hosted git repository. kaxilnaik pushed a commit to branch v1-10-stable in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/v1-10-stable by this push: new 4aec433 Skip `DatabaseVersionCheckRule` check if invalid version is detected (#15122) 4aec433 is described below commit 4aec433e48dcc66c9c7b74947c499260ab6be9e9 Author: Kaxil Naik <kaxiln...@gmail.com> AuthorDate: Fri Apr 2 23:59:43 2021 +0100 Skip `DatabaseVersionCheckRule` check if invalid version is detected (#15122) When the version is something like `12.2 (Debian 12.2-2.pgdg100+1)`, the upgrade check errors with the following: ``` Traceback (most recent call last): File "<string>", line 1, in <module> File "/usr/local/lib/python3.7/site-packages/airflow/upgrade/checker.py", line 130, in __main__ run(args) File "/usr/local/lib/python3.7/site-packages/airflow/upgrade/checker.py", line 118, in run all_problems = check_upgrade(formatter, rules) File "/usr/local/lib/python3.7/site-packages/airflow/upgrade/checker.py", line 38, in check_upgrade rule_status = RuleStatus.from_rule(rule) File "/usr/local/lib/python3.7/site-packages/airflow/upgrade/problem.py", line 44, in from_rule result = rule.check() File "/usr/local/lib/python3.7/site-packages/airflow/utils/db.py", line 74, in wrapper return func(*args, **kwargs) File "/usr/local/lib/python3.7/site-packages/airflow/upgrade/rules/postgres_mysql_sqlite_version_upgrade_check.py", line 52, in check installed_postgres_version = Version(session.execute('SHOW server_version;').scalar()) File "/usr/local/lib/python3.7/site-packages/packaging/version.py", line 298, in __init__ raise InvalidVersion("Invalid version: '{0}'".format(version)) packaging.version.InvalidVersion: Invalid version: '12.2 (Debian 12.2-2.pgdg100+1)' ``` This commit will SKIP the check during such occasions --- .../rules/postgres_mysql_sqlite_version_upgrade_check.py | 13 ++++++++++++- .../test_postgres_mysql_sqlite_version_upgrade_check.py | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/airflow/upgrade/rules/postgres_mysql_sqlite_version_upgrade_check.py b/airflow/upgrade/rules/postgres_mysql_sqlite_version_upgrade_check.py index 6020665..d02e2f2 100644 --- a/airflow/upgrade/rules/postgres_mysql_sqlite_version_upgrade_check.py +++ b/airflow/upgrade/rules/postgres_mysql_sqlite_version_upgrade_check.py @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -from packaging.version import Version +from packaging.version import InvalidVersion, Version from airflow.configuration import conf from airflow.upgrade.rules.base_rule import BaseRule @@ -34,6 +34,17 @@ SQLite - 3.15+ @provide_session def check(self, session=None): + return self._check(session=session) + + def should_skip(self): + try: + self._check() + except InvalidVersion: + return "Unable to parse DB version, skipped!" + + @staticmethod + @provide_session + def _check(session=None): more_info = "See link below for more details: https://github.com/apache/airflow#requirements" diff --git a/tests/upgrade/rules/test_postgres_mysql_sqlite_version_upgrade_check.py b/tests/upgrade/rules/test_postgres_mysql_sqlite_version_upgrade_check.py index 4ce7802..d0bf0f8 100644 --- a/tests/upgrade/rules/test_postgres_mysql_sqlite_version_upgrade_check.py +++ b/tests/upgrade/rules/test_postgres_mysql_sqlite_version_upgrade_check.py @@ -16,6 +16,7 @@ # under the License. from unittest import TestCase +from airflow.upgrade.problem import RuleStatus from airflow.upgrade.rules.postgres_mysql_sqlite_version_upgrade_check import DatabaseVersionCheckRule from tests.compat import patch from tests.test_utils.config import conf_vars @@ -113,3 +114,17 @@ class TestDatabaseVersionCheckRule(TestCase): msg = rule.check(session=session) assert msg == expected + + @conf_vars({("core", "sql_alchemy_conn"): MYSQL_CONN}) + def test_invalid_version(self, mock_session): + session = mock_session() + session.execute().scalar.return_value = '12.2 (Debian 12.2-2.pgdg100+1)' + + rule = DatabaseVersionCheckRule() + + assert isinstance(rule.title, str) + assert isinstance(rule.description, str) + + msg = RuleStatus.from_rule(rule=rule) + assert msg.skipped + assert msg.messages == ['Unable to parse DB version, skipped!']