-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Delete workload-related things if the rest of the operation was unsuccessful #47110
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
Merged
Merged
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
In the cleanup rollback logic, the code deletes the target directory without checking if it exists. To prevent a potential DirectoryNotFoundException, consider adding a conditional check using Directory.Exists(targetFolder) before calling Directory.Delete.
Copilot uses AI. Check for mistakes.
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.
This is checked via directoryExists
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.
Theoretically, directoryExists could be false if the directory existed but was empty if I'm reading the call right. That isn't related to what copilot is chatting about but just something I noticed.
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.
But if the directory did not exist, we'd still try to delete it. That would throw.
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.
There are five cases that cover all possibilities:
Directory exists and is not empty, crash after line 332: directoryExists is true, but this is overwritten via the first 'if', so this doesn't really change anything (rollback is already correct)
Directory exists and is not empty, crash before line 332: directoryExists is true, and neither this new rollback code nor the old rollback code run. Rollback is already correct.
Directory exists and is empty: directoryExists is false. We delete whatever we find. The directory should not exist if it's empty, so though this is a minor change, I think it's slightly beneficial
Directory does not exist, crash after line 332: directoryExists is false, and this deletes the new folder copied to this location. This is currently broken, fixed by this PR
Directory does not exist, crash before line 332: directoryExists is false, and this throws erroneously.
I actually did test that last scenario, and it didn't cause any problems. I looked into why that doesn't cause actually matter in this case. This is the last part of the rollback code, so it doesn't affect this particular rollback action. Each rollback action is executed separately in a try/catch by CliTransaction, so it catches this exception. It then executes RollbackFailed, which in our case just prints out a message and continues, so the exception is essentially ignored, and this bug is roughly irrelevant until we change any part of this just slightly 🙂
I think that's still worth changing, though it's interesting that we have enough try/catches around this that it actually doesn't matter until we change the code again.