Cloud Function GCS 触发器过早响应部分文件上传
Cloud Function GCS trigger is prematurely responding to partial file upload
完整工作流程:
- SFTP 镜像将新文件从 SFTP 上传到 GCS 存储桶
- 新的 GCS 对象触发 Cloud Function
- Cloud Function 触发 Composer/Airflow DAG 并将其发送到新 GCS 对象的路径
查看 Composer/Airflow UI 中的 DAG 运行 历史记录,其中有一个任务失败,然后紧接着是任务成功。
任务的目的是上传一个文件到BQ。文件路径由 Cloud Function 提供。
有一个清晰的模式,其中失败任务的日志显示该任务试图处理具有 my_timestamped_file_name.csv.part
等模式的文件
以下成功的任务在日志中显示它处理的文件具有相同的模式但没有 .part
:my_timestamped_file_name.csv
在我看来,云功能 (CF) 是由 SFTP 镜像创建的部分上传文件触发的,而不是等待文件完成上传。当然,当文件完全上传后,.part
文件消失,任务失败,因为它没有任何处理。
我的云函数的事件类型定义为 Finalize/Create。有没有办法避免部分上传的文件?除了在 CF 中使用 hacky 条件语句来避免以 .part
?
结尾的文件之外
我们正在创建的规则是,无论何时创建文件,它都应该触发 GCF,因此它可以正确地完成工作。可能的解决方案是
- 在 GCF 中过滤 .part 文件
- 如果可能,将临时目录作为不同的文件夹传递给 SFTP 镜像
完整工作流程:
- SFTP 镜像将新文件从 SFTP 上传到 GCS 存储桶
- 新的 GCS 对象触发 Cloud Function
- Cloud Function 触发 Composer/Airflow DAG 并将其发送到新 GCS 对象的路径
查看 Composer/Airflow UI 中的 DAG 运行 历史记录,其中有一个任务失败,然后紧接着是任务成功。
任务的目的是上传一个文件到BQ。文件路径由 Cloud Function 提供。
有一个清晰的模式,其中失败任务的日志显示该任务试图处理具有 my_timestamped_file_name.csv.part
以下成功的任务在日志中显示它处理的文件具有相同的模式但没有 .part
:my_timestamped_file_name.csv
在我看来,云功能 (CF) 是由 SFTP 镜像创建的部分上传文件触发的,而不是等待文件完成上传。当然,当文件完全上传后,.part
文件消失,任务失败,因为它没有任何处理。
我的云函数的事件类型定义为 Finalize/Create。有没有办法避免部分上传的文件?除了在 CF 中使用 hacky 条件语句来避免以 .part
?
我们正在创建的规则是,无论何时创建文件,它都应该触发 GCF,因此它可以正确地完成工作。可能的解决方案是
- 在 GCF 中过滤 .part 文件
- 如果可能,将临时目录作为不同的文件夹传递给 SFTP 镜像