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!']