From e9253347dec34f5973f00fcb5fc37b99c07acec6 Mon Sep 17 00:00:00 2001 From: RaviTeja Pothana Date: Fri, 20 Nov 2020 21:07:53 +0530 Subject: [PATCH] Add upgrade rule to check for mesos executor and flag to change it. (#11528) * add upgrade rule to check for mesos config and flag to remove it. * change from checking the mesos config section to core/executor config * remove leading new line and indent in desc (cherry picked from commit 6739b537a016a81f5da495a894a0fe990c8ad25e) --- .../upgrade/rules/mesos_executor_removed.py | 36 ++++++++++++++ .../rules/test_mesos_executor_removed.py | 48 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 airflow/upgrade/rules/mesos_executor_removed.py create mode 100644 tests/upgrade/rules/test_mesos_executor_removed.py diff --git a/airflow/upgrade/rules/mesos_executor_removed.py b/airflow/upgrade/rules/mesos_executor_removed.py new file mode 100644 index 000000000000..c0e6b52efdeb --- /dev/null +++ b/airflow/upgrade/rules/mesos_executor_removed.py @@ -0,0 +1,36 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +from airflow.upgrade.rules.base_rule import BaseRule +from airflow.configuration import conf + + +class MesosExecutorRemovedRule(BaseRule): + """ + MesosExecutorRemovedRule class to ease upgrade to Airflow 2.0 + """ + title = "Removal of Mesos Executor" + description = "The Mesos Executor has been deprecated as it was not widely used and not maintained." + + def check(self): + executor_key = conf.get(section="core", key="executor") + if executor_key == "MesosExecutor": + return ( + "The Mesos Executor has been deprecated as it was not widely used and not maintained." + "Please migrate to any of the supported executors." + "See https://airflow.apache.org/docs/stable/executor/index.html for more details." + ) diff --git a/tests/upgrade/rules/test_mesos_executor_removed.py b/tests/upgrade/rules/test_mesos_executor_removed.py new file mode 100644 index 000000000000..2b1e53065153 --- /dev/null +++ b/tests/upgrade/rules/test_mesos_executor_removed.py @@ -0,0 +1,48 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +from unittest import TestCase + +from airflow.upgrade.rules.mesos_executor_removed import MesosExecutorRemovedRule +from tests.test_utils.config import conf_vars + + +class TestMesosExecutorRemovedRule(TestCase): + @conf_vars({("core", "executor"): "MesosExecutor"}) + def test_invalid_check(self): + rule = MesosExecutorRemovedRule() + + assert isinstance(rule.description, str) + assert isinstance(rule.title, str) + + msg = ( + "The Mesos Executor has been deprecated as it was not widely used and not maintained." + "Please migrate to any of the supported executors." + "See https://airflow.apache.org/docs/stable/executor/index.html for more details." + ) + + response = rule.check() + assert response == msg + + @conf_vars({("core", "executor"): "SequentialExecutor"}) + def test_check(self): + rule = MesosExecutorRemovedRule() + + assert isinstance(rule.description, str) + assert isinstance(rule.title, str) + + response = rule.check() + assert response is None