-
Notifications
You must be signed in to change notification settings - Fork 14.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bug Fix - S3DeleteObjectsOperator will try and delete all keys #21458
Conversation
If a templated rendered empty list of key is passed into S3DeleteObjectsOperator without any prefix it will deleted everything on the bucket
Congratulations on your first Pull Request and welcome to the Apache Airflow community! If you have any issues or are unsure about any anything please check our Contribution Guide (https://github.com/apache/airflow/blob/main/CONTRIBUTING.rst)
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah. Good call. Could you please add a unit test covering it ?
I also think the test should remain in the init as well.. passing both key and prefix at init should fail dag parsing (fail as early as possible when the input parameters are wrong).
@njrs92 For some context here, the values of |
Hello - how about the unit test :) ? I'd love to merge that one. |
Sorry got a bit distracted working on other stuff. I will commit the unit tests shortly |
1afbfc1
to
6b5149e
Compare
Sorry my line endings messed up the diff and there is a bunch of unrelated changes that got committed accidentally. |
63facef
to
44a5027
Compare
… into S3DeleteObjectsOperator-bug-fix
The PR is likely OK to be merged with just subset of tests for default Python and Database versions without running the full matrix of tests, because it does not modify the core of Airflow. If the committers decide that the full tests matrix is needed, they will add the label 'full tests needed'. Then you should rebase to the latest main or amend the last commit of the PR, and push it with --force-with-lease. |
Awesome work, congrats on your first merged pull request! |
There is a bug when an empty list is passed into S3DeleteObjectsOperator from another task it will try and deleted all keys on the bucket. While the intent of passing in an empty prefix might be to delete all keys, the intent of passing in a empty keys list would be to delete no keys.
This is because I assume templating does something with init so the check for this condition is not run.
The case is:
In line 379 because keys is an empty list it is false so keys is now assigned the return values from list_keys which when passed no prefix will return all keys.
The change is to move the xor check of keys or prefix is inside the execute function to ensure it is checked at run time