You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2021/07/15 05:38:08 UTC
[airflow] branch main updated: Drop support for Airflow 1.10 in
entrypoint_prod.sh and improve MSSQL compatibility (#17011)
This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new cc33d7e Drop support for Airflow 1.10 in entrypoint_prod.sh and improve MSSQL compatibility (#17011)
cc33d7e is described below
commit cc33d7e513e0f66a94a6e6277d6d30c08de94d64
Author: Kamil BreguĊa <mi...@users.noreply.github.com>
AuthorDate: Thu Jul 15 07:37:52 2021 +0200
Drop support for Airflow 1.10 in entrypoint_prod.sh and improve MSSQL compatibility (#17011)
---
docs/docker-stack/entrypoint.rst | 26 ++++-----------------
scripts/in_container/prod/entrypoint_prod.sh | 34 ++++------------------------
2 files changed, 9 insertions(+), 51 deletions(-)
diff --git a/docs/docker-stack/entrypoint.rst b/docs/docker-stack/entrypoint.rst
index 9438314..d6a028d 100644
--- a/docs/docker-stack/entrypoint.rst
+++ b/docs/docker-stack/entrypoint.rst
@@ -94,32 +94,14 @@ You can read more about it in the "Support arbitrary user ids" chapter in the
Waits for Airflow DB connection
-------------------------------
-In case Postgres or MySQL DB is used, the entrypoint will wait until the airflow DB connection becomes
-available. This happens always when you use the default entrypoint.
+The entrypoint is waiting for a connection to the database independent of the database engine. This allows us to increase
+the stability of the environment.
-The script detects backend type depending on the URL schema and assigns default port numbers if not specified
-in the URL. Then it loops until the connection to the host/port specified can be established
+Waiting for connection involves executing ``airflow db check`` command, which means that a ``select 1 as is_alive;`` statement
+is executed. Then it loops until the the command will be successful.
It tries :envvar:`CONNECTION_CHECK_MAX_COUNT` times and sleeps :envvar:`CONNECTION_CHECK_SLEEP_TIME` between checks
To disable check, set ``CONNECTION_CHECK_MAX_COUNT=0``.
-Supported schemes:
-
-* ``postgres://`` - default port 5432
-* ``mysql://`` - default port 3306
-* ``sqlite://``
-
-In case of SQLite backend, there is no connection to establish and waiting is skipped.
-
-For older than Airflow 1.10.14, waiting for connection involves checking if a matching port is open.
-The host information is derived from the variables :envvar:`AIRFLOW__CORE__SQL_ALCHEMY_CONN` and
-:envvar:`AIRFLOW__CORE__SQL_ALCHEMY_CONN_CMD`. If :envvar:`AIRFLOW__CORE__SQL_ALCHEMY_CONN_CMD` variable
-is passed to the container, it is evaluated as a command to execute and result of this evaluation is used
-as :envvar:`AIRFLOW__CORE__SQL_ALCHEMY_CONN`. The :envvar:`AIRFLOW__CORE__SQL_ALCHEMY_CONN_CMD` variable
-takes precedence over the :envvar:`AIRFLOW__CORE__SQL_ALCHEMY_CONN` variable.
-
-For newer versions, the ``airflow db check`` command is used, which means that a ``select 1 as is_alive;`` query
-is executed. This also means that you can keep your password in secret backend.
-
Waits for celery broker connection
----------------------------------
diff --git a/scripts/in_container/prod/entrypoint_prod.sh b/scripts/in_container/prod/entrypoint_prod.sh
index adeff61..9d8e74a 100755
--- a/scripts/in_container/prod/entrypoint_prod.sh
+++ b/scripts/in_container/prod/entrypoint_prod.sh
@@ -153,13 +153,6 @@ function create_www_user() {
--lastname "${_AIRFLOW_WWW_USER_LASTNME="Admin"}" \
--email "${_AIRFLOW_WWW_USER_EMAIL="airflowadmin@example.com"}" \
--role "${_AIRFLOW_WWW_USER_ROLE="Admin"}" \
- --password "${local_password}" ||
- airflow create_user \
- --username "${_AIRFLOW_WWW_USER_USERNAME="admin"}" \
- --firstname "${_AIRFLOW_WWW_USER_FIRSTNAME="Airflow"}" \
- --lastname "${_AIRFLOW_WWW_USER_LASTNME="Admin"}" \
- --email "${_AIRFLOW_WWW_USER_EMAIL="airflowadmin@example.com"}" \
- --role "${_AIRFLOW_WWW_USER_ROLE="Admin"}" \
--password "${local_password}" || true
}
@@ -193,30 +186,13 @@ function set_pythonpath_for_root_user() {
}
function wait_for_airflow_db() {
- # Check if Airflow has a command to check the connection to the database.
- if ! airflow db check --help >/dev/null 2>&1; then
- run_check_with_retries "airflow db check"
- else
- # Verify connections to the Airflow DB by guessing the database address based on environment variables,
- # then uses netcat to check that the host is reachable.
- # This is only used by Airflow 1.10+ as there are no built-in commands to check the db connection.
- local connection_url
- if [[ -n "${AIRFLOW__CORE__SQL_ALCHEMY_CONN_CMD=}" ]]; then
- connection_url="$(eval "${AIRFLOW__CORE__SQL_ALCHEMY_CONN_CMD}")"
- else
- # if no DB configured - use sqlite db by default
- connection_url="${AIRFLOW__CORE__SQL_ALCHEMY_CONN:="sqlite:///${AIRFLOW_HOME}/airflow.db"}"
- fi
- # SQLite doesn't require a remote connection, so we don't have to wait.
- if [[ ${connection_url} != sqlite* ]]; then
- wait_for_connection "${connection_url}"
- fi
- fi
+ # Wait for the command to run successfully to validate the database connection.
+ run_check_with_retries "airflow db check"
}
function upgrade_db() {
# Runs airflow db upgrade
- airflow db upgrade || airflow upgradedb || true
+ airflow db upgrade || true
}
function wait_for_celery_backend() {
@@ -232,8 +208,8 @@ function wait_for_celery_backend() {
}
function exec_to_bash_or_python_command_if_specified() {
- # If one of the commands: 'airflow', 'bash', 'python' is used, either run appropriate
- # command with exec or update the command line parameters
+ # If one of the commands: 'bash', 'python' is used, either run appropriate
+ # command with exec
if [[ ${AIRFLOW_COMMAND} == "bash" ]]; then
shift
exec "/bin/bash" "${@}"