potiuk commented on code in PR #39544:
URL: https://github.com/apache/airflow/pull/39544#discussion_r1596725025


##########
docs/apache-airflow/administration-and-deployment/listeners.rst:
##########
@@ -110,3 +110,87 @@ Airflow defines the specification as `hookspec 
<https://github.com/apache/airflo
 To include the listener in your Airflow installation, include it as a part of 
an :doc:`Airflow Plugin </authoring-and-scheduling/plugins>`.
 
 Listener API is meant to be called across all DAGs and all operators. You 
can't listen to events generated by specific DAGs. For that behavior, try 
methods like ``on_success_callback`` and ``pre_execute``. These provide 
callbacks for particular DAG authors or operator creators. The logs and 
``print()`` calls will be handled as part of the listeners.
+
+
+Compatibility note
+------------------
+
+The listeners interface might change over time. We are using ``pluggy`` 
specifications which
+means that implementation of the listeners written for older versions of the 
interface should be
+forward-compatible with future versions of Airflow.
+
+However, the opposite is not guaranteed, so if your listener is implemented 
against a newer version of the
+interface, it might not work with older versions of Airflow. It is not a 
problem if you target single version
+of Airflow, because you can adjust your implementation to the version of 
Airflow you use, but it is important
+if you are writing plugins or extensions that could be used with different 
versions of Airflow.
+
+For example if a new field is added to the interface (like the ``error`` field 
in the
+``on_task_instance_failed`` method in 2.10.0), the listener implementation 
will not handle the case when
+the field is not present in the event object and such listeners will only work 
for Airflow 2.10.0 and later.
+
+In order to implement a listener that is compatible with multiple versions of 
Airflow including using features
+and fields added in newer versions of Airflow, you should check version of 
Airflow used and use newer version
+of the interface implementation, but for older versions of Airflow you should 
use older version of the
+interface.
+
+For example if you want to implement a listener that uses the ``error`` field 
in the ``on_task_instance_failed``
+You should use code like this:
+
+.. code-block:: python
+
+    from importlib.metadata import version
+    from packaging.version import Version
+    from airflow.listeners import hookimpl
+
+
+    @hookimpl
+    def on_task_instance_failed(task_instance, **kwargs):

Review Comment:
   Removed the kwargs example



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@airflow.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to