This is an automated email from the ASF dual-hosted git repository. ephraimanierobi pushed a commit to branch v2-9-test in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 798946319eee45275b3bd09a038110d166619f43 Author: Ephraim Anierobi <[email protected]> AuthorDate: Mon Apr 29 12:28:48 2024 +0100 Update RELEASE_NOTES.rst --- RELEASE_NOTES.rst | 90 +++++++++++++++++++++++++++++++++++++ airflow/reproducible_build.yaml | 4 +- newsfragments/38071.significant.rst | 26 ----------- 3 files changed, 92 insertions(+), 28 deletions(-) diff --git a/RELEASE_NOTES.rst b/RELEASE_NOTES.rst index 1f323919ea..cac7563df0 100644 --- a/RELEASE_NOTES.rst +++ b/RELEASE_NOTES.rst @@ -21,6 +21,96 @@ .. towncrier release notes start +Airflow 2.9.1 (2024-05-03) +-------------------------- + +Significant Changes +^^^^^^^^^^^^^^^^^^^ + +Rename the ``name`` attribute of the StackdriverTaskHandler to ``gcp_log_name`` to avoid name overriding by the the ``DictConfigurator`` (#38071). +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +Airflow relies on the ``logging.config.dictConfig`` (`documentation <https://docs.python.org/3/library/logging.config.html>`_) method +to `setup the logging stack <https://github.com/apache/airflow/blob/a58441ca1b263cae61a5bb653e6839f0dd29b08e/airflow/logging_config.py#L69>`_. +However, during this setup, it iterates through the handlers and +`explicitly sets their name <https://github.com/python/cpython/blob/2a4cbf17af19a01d942f9579342f77c39fbd23c4/Lib/logging/config.py#L578>`_: + +.. code-block:: python + + for name in sorted(handlers): + try: + handler = self.configure_handler(handlers[name]) + handler.name = name + handlers[name] = handler + except Exception as e: + # [...] + pass + +So, before this fix: + +#. You setup the remote logging through the environment variables ``AIRFLOW__LOGGING__REMOTE_LOGGING="true"`` and ``AIRFLOW__LOGGING__REMOTE_BASE_LOG_FOLDER="stackdriver://host/path"``. +#. Airflow instantiates a ``StackdriverTaskHandler`` with the name of ``"path"`` +#. **BUT** the ``dictConfig`` call overrides the name of the handler with the key of the handlers configuration (i.e. `task <https://github.com/apache/airflow/blob/a58441ca1b263cae61a5bb653e6839f0dd29b08e/airflow/config_templates/airflow_local_settings.py#L350>`_). +#. Hence, the next calls to the ``emit`` method of the handler will generate logs to the wrong destination (``task`` instead of ``path``). + +Changing the field, from ``name`` to ``gcp_log_name`` prevents the overriding from the ``dictConfig``. + +Bug Fixes +""""""""" +- Make task log messages include run_id (#39280) +- Copy menu_item ``href`` for nav bar (#39282) +- Fix trigger kwarg encryption migration (#39246) +- Add workaround for datetime-local input in ``firefox`` (#39261) +- Add Grid button to Task Instance view (#39223) +- Get served logs when remote or executor logs not available for non-running task try (#39177) +- Fixed side effect of menu filtering causing disappearing menus (#39229) +- Use grid view for Task Instance's ``log_url`` (#39183) +- Improve task filtering ``UX`` (#39119) +- Improve rendered_template ``ux`` in react dag page (#39122) +- Graph view improvements (#38940) +- Check that the dataset<>task exists before trying to render graph (#39069) +- Hostname was "redacted", not "redact"; remove it when there is no context (#39037) +- Check whether ``AUTH_ROLE_PUBLIC`` is set in ``check_authentication`` (#39012) +- Move rendering of ``map_index_template`` so it renders for failed tasks as long as it was defined before the point of failure (#38902) +- ``Undeprecate`` ``BaseXCom.get_one`` method for now (#38991) +- Add ``inherit_cache`` attribute for ``CreateTableAs`` custom SA Clause (#38985) +- Don't wait for DagRun lock in mini scheduler (#38914) +- Fix calendar view with no DAG Run. (#38964) +- Changed the background color of external task in graph (#38969) +- Fix dag run selection (#38941) +- Fix ``SAWarning`` 'Coercing Subquery object into a select() for use in IN()' (#38926) +- Fix implicit ``cartesian`` product in AirflowSecurityManagerV2 (#38913) +- Fix problem that links in legacy log view can not be clicked (#38882) +- Fix dag run link params (#38873) +- Use async db calls in WorkflowTrigger (#38689) +- Fix audit log events filter (#38719) +- Use ``methodtools.lru_cache`` instead of ``functools.lru_cache`` in class methods (#37757) +- Raise deprecated warning in ``airflow dags backfill`` only if ``-I`` / ``--ignore-first-depends-on-past`` provided (#38676) + +Miscellaneous +""""""""""""" +- ``TriggerDagRunOperator`` deprecate ``exection_date`` in favor of ``logical_date`` (#39285) +- Force to use Airflow Deprecation warnings categories on ``@deprecated`` decorator (#39205) +- Add warning about run/import Airflow under the Windows (#39196) +- Update ``is_authorized_custom_view`` from auth manager to handle custom actions (#39167) +- Add in Trove classifiers Python 3.12 support (#39004) +- Use debug level for ``minischeduler`` skip (#38976) +- Bump ``undici`` from ``5.28.3 to 5.28.4`` in ``/airflow/www`` (#38751) + + +Doc Only Changes +"""""""""""""""" +- Fix supported k8s version in docs (#39172) +- Dynamic task mapping ``PythonOperator`` op_kwargs (#39242) +- Add link to ``user`` and ``role`` commands (#39224) +- Add ``k8s 1.29`` to supported version in docs (#39168) +- Data aware scheduling docs edits (#38687) +- Update ``DagBag`` class docstring to include all params (#38814) +- Correcting an example taskflow example (#39015) +- Remove decorator from rendering fields example (#38827) + + + Airflow 2.9.0 (2024-04-08) -------------------------- diff --git a/airflow/reproducible_build.yaml b/airflow/reproducible_build.yaml index c6683aa2c0..d01ee0908d 100644 --- a/airflow/reproducible_build.yaml +++ b/airflow/reproducible_build.yaml @@ -1,2 +1,2 @@ -release-notes-hash: aad86522e49984ce17db1b8647cfb54a -source-date-epoch: 1714165337 +release-notes-hash: 5ca5f2794a289f1739cebe1310599e7d +source-date-epoch: 1714390122 diff --git a/newsfragments/38071.significant.rst b/newsfragments/38071.significant.rst deleted file mode 100644 index 6193de613f..0000000000 --- a/newsfragments/38071.significant.rst +++ /dev/null @@ -1,26 +0,0 @@ -Rename the ``name`` attribute of the StackdriverTaskHandler to ``gcp_log_name`` to avoid name overriding by the the ``DictConfigurator``. - -Airflow relies on the ``logging.config.dictConfig`` (`documentation <https://docs.python.org/3/library/logging.config.html>`_) method -to `setup the logging stack <https://github.com/apache/airflow/blob/a58441ca1b263cae61a5bb653e6839f0dd29b08e/airflow/logging_config.py#L69>`_. -However, during this setup, it iterates through the handlers and -`explicitly sets their name <https://github.com/python/cpython/blob/2a4cbf17af19a01d942f9579342f77c39fbd23c4/Lib/logging/config.py#L578>`_: - -.. code-block:: python - - for name in sorted(handlers): - try: - handler = self.configure_handler(handlers[name]) - handler.name = name - handlers[name] = handler - except Exception as e: - # [...] - pass - -So, before this fix: - -#. You setup the remote logging through the environment variables ``AIRFLOW__LOGGING__REMOTE_LOGGING="true"`` and ``AIRFLOW__LOGGING__REMOTE_BASE_LOG_FOLDER="stackdriver://host/path"``. -#. Airflow instantiates a ``StackdriverTaskHandler`` with the name of ``"path"`` -#. **BUT** the ``dictConfig`` call overrides the name of the handler with the key of the handlers configuration (i.e. `task <https://github.com/apache/airflow/blob/a58441ca1b263cae61a5bb653e6839f0dd29b08e/airflow/config_templates/airflow_local_settings.py#L350>`_). -#. Hence, the next calls to the ``emit`` method of the handler will generate logs to the wrong destination (``task`` instead of ``path``). - -Changing the field, from ``name`` to ``gcp_log_name`` prevents the overriding from the dictConfig.
