You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by ka...@apache.org on 2021/04/02 22:59:56 UTC

[airflow] branch v1-10-stable updated: Skip `DatabaseVersionCheckRule` check if invalid version is detected (#15122)

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 <ka...@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!']