我成为Apache Airflow的贡献者的故事
我发现了Google Providers的错误。
在最近的DAG开发中,我使用了Google提供的CloudDataTransferServiceJobStatusSensor(apache-airflow-providers-google==8.9.0),但发现当省略project_id这个可选参数时,会出现错误。
[2023-03-09, 02:31:24 UTC] {taskinstance.py:1774} ERROR - Task failed with exception
Traceback (most recent call last):
File "/home/airflow/.local/lib/python3.8/site-packages/airflow/sensors/base.py", line 236, in execute
while not self.poke(context):
File "/home/airflow/.local/lib/python3.8/site-packages/airflow/providers/google/cloud/sensors/cloud_storage_transfer_service.py", line 91, in poke
operations = hook.list_transfer_operations(
File "/home/airflow/.local/lib/python3.8/site-packages/airflow/providers/google/cloud/hooks/cloud_storage_transfer_service.py", line 380, in list_transfer_operations
request_filter = self._inject_project_id(request_filter, FILTER, FILTER_PROJECT_ID)
File "/home/airflow/.local/lib/python3.8/site-packages/airflow/providers/google/cloud/hooks/cloud_storage_transfer_service.py", line 459, in _inject_project_id
raise AirflowException(
airflow.exceptions.AirflowException: The project id must be passed either as `project_id` key in `filter` parameter or as project_id extra in Google Cloud connection definition. Both are not set!
由于修复看起来并不那么困难,所以我决定直接处理修复工作,而不是向Airflow报告问题。
閲読Contributor的步骤来进行环境配置。
不如随意编码,我认为先阅读CONTRIBUTING文件为好,我找到了以下的文档。
由于长度过长,我只阅读了前半部分并参照了贡献流程,顺利地搭建了本地开发环境。有些可能会有困难的地方基本上都在文档中得到了总结。
发展
首先,如果不模仿其他地方并未指定project_id,则编写一个单元测试任务。由于没有实现任何功能,测试肯定会失败。然后,将CloudDataTransferServiceJobStatusSensor的实现更改为明确指定project_id的方式,以便从hook.project_id中获取。
- request_filter={"project_id": self.project_id, "job_names": [self.job_name]}
+ request_filter={"project_id": self.project_id or hook.project_id, "job_names": [self.job_name]}

接受测试
2周后,我收到了一条关于“apache-airflow-providers-google 8.12.0rc1”的发布测试请求,该请求来自于问题(issue)。
我安装了8.12.0rc1版本并且验证了CloudDataTransferServiceJobStatusSensor的运作,没有出现任何问题,所以我回复说它运作良好。

数日后,8.12.0版本平稳发布了。
支持无需指定project_id的CloudDataTransferServiceJobStatusSensor (#30035)。
修正已经正确记录在发布说明中。虽然没有直接提交到core,但我成为了Apache Airflow的贡献者。
我对此的想法
感谢Airflow一直以来给予我的帮助,我很高兴能够为其做出贡献。我想这有助于加深理解并提升动力。
由于还有许多地方可以改进,因此我希望继续提交更新以后续持续贡献。