-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
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
Correctly rollback in ForkRepository #17034
Conversation
966439c
to
3d07d47
Compare
The rollback functionality in services/repository/repository.go:ForkRepository is incorrect and could lead to a deadlock as it uses DeleteRepository to delete the rolled-back repository - a function which creates its own transaction. This PR adjusts the rollback function to only use RemoveAll as any database changes will be automatically rolled-back. It also handles panics and adjusts the Close within WithTx to ensure that if there is a panic the session will always be closed. Signed-off-by: Andrew Thornton <[email protected]>
3d07d47
to
6da7f16
Compare
Codecov Report
@@ Coverage Diff @@
## main #17034 +/- ##
==========================================
+ Coverage 45.22% 45.24% +0.02%
==========================================
Files 766 766
Lines 86632 86637 +5
==========================================
+ Hits 39178 39203 +25
+ Misses 41107 41088 -19
+ Partials 6347 6346 -1
Continue to review full report at Codecov.
|
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.
While I can completely understand the implementation,
adding a test might be beneficial here so that this potential deadlock does not occur again sometime else.
I don't think it's testable. The deadlock could only happen if there was an error whilst creating the fork, even then it would only occur extremely randomly. We can't force an error, we can't force the deadlock. Even if we had a fully mocked up xorm we'd have to code in what it means to deadlock. There some very complex solutions that could help reduce the risk of these errors in future but they'd come with their own issues too. If you can think of a test then I'm happy to discuss. |
That is unfortunately correct. |
make lgtm work |
Backport go-gitea#17034 The rollback functionality in services/repository/repository.go:ForkRepository is incorrect and could lead to a deadlock as it uses DeleteRepository to delete the rolled-back repository - a function which creates its own transaction. This PR adjusts the rollback function to only use RemoveAll as any database changes will be automatically rolled-back. It also handles panics and adjusts the Close within WithTx to ensure that if there is a panic the session will always be closed. Signed-off-by: Andrew Thornton <[email protected]>
Backport #17034 The rollback functionality in services/repository/repository.go:ForkRepository is incorrect and could lead to a deadlock as it uses DeleteRepository to delete the rolled-back repository - a function which creates its own transaction. This PR adjusts the rollback function to only use RemoveAll as any database changes will be automatically rolled-back. It also handles panics and adjusts the Close within WithTx to ensure that if there is a panic the session will always be closed. Signed-off-by: Andrew Thornton <[email protected]> Co-authored-by: Lunny Xiao <[email protected]>
## [1.15.3](https://github.com/go-gitea/gitea/releases/tag/v1.15.3) - 2021-09-19 * ENHANCEMENTS * Add fluid to ui container class to remove margin (go-gitea#16396) (go-gitea#16976) * Add caller to cat-file batch calls (go-gitea#17082) (go-gitea#17089) * BUGFIXES * Render full plain readme. (go-gitea#17083) (go-gitea#17090) * Upgrade xorm to v1.2.4 (go-gitea#17059) * Fix bug of migrate comments which only fetch one page (go-gitea#17055) (go-gitea#17058) * Do not show issue context popup on external issues (go-gitea#17050) (go-gitea#17054) * Decrement Fork Num when converting from Fork (go-gitea#17035) (go-gitea#17046) * Correctly rollback in ForkRepository (go-gitea#17034) (go-gitea#17045) * Fix missing close in WalkGitLog (go-gitea#17008) (go-gitea#17009) * Add prefix to SVG id/class attributes (go-gitea#16997) (go-gitea#17000) * Fix bug of migrated repository not index (go-gitea#16991) (go-gitea#16996) * Skip AllowedUserVisibilityModes validation on update user if it is an organisation (go-gitea#16988) (go-gitea#16990) * Fix storage Iterate bug and Add storage doctor to delete garbage attachments (go-gitea#16971) (go-gitea#16977) * Fix issue with issue default mail template (go-gitea#16956) (go-gitea#16975) * Ensure that rebase conflicts are handled in updates (go-gitea#16952) (go-gitea#16960) * Prevent panic on diff generation (go-gitea#16950) (go-gitea#16951) Signed-off-by: Andrew Thornton <[email protected]>
## [1.15.3](https://github.com/go-gitea/gitea/releases/tag/v1.15.3) - 2021-09-19 * ENHANCEMENTS * Add fluid to ui container class to remove margin (#16396) (#16976) * Add caller to cat-file batch calls (#17082) (#17089) * BUGFIXES * Render full plain readme. (#17083) (#17090) * Upgrade xorm to v1.2.4 (#17059) * Fix bug of migrate comments which only fetch one page (#17055) (#17058) * Do not show issue context popup on external issues (#17050) (#17054) * Decrement Fork Num when converting from Fork (#17035) (#17046) * Correctly rollback in ForkRepository (#17034) (#17045) * Fix missing close in WalkGitLog (#17008) (#17009) * Add prefix to SVG id/class attributes (#16997) (#17000) * Fix bug of migrated repository not index (#16991) (#16996) * Skip AllowedUserVisibilityModes validation on update user if it is an organisation (#16988) (#16990) * Fix storage Iterate bug and Add storage doctor to delete garbage attachments (#16971) (#16977) * Fix issue with issue default mail template (#16956) (#16975) * Ensure that rebase conflicts are handled in updates (#16952) (#16960) * Prevent panic on diff generation (#16950) (#16951) Signed-off-by: Andrew Thornton <[email protected]> Co-authored-by: techknowlogick <[email protected]>
## [1.15.3](https://github.com/go-gitea/gitea/releases/tag/v1.15.3) - 2021-09-19 * ENHANCEMENTS * Add fluid to ui container class to remove margin (go-gitea#16396) (go-gitea#16976) * Add caller to cat-file batch calls (go-gitea#17082) (go-gitea#17089) * BUGFIXES * Render full plain readme. (go-gitea#17083) (go-gitea#17090) * Upgrade xorm to v1.2.4 (go-gitea#17059) * Fix bug of migrate comments which only fetch one page (go-gitea#17055) (go-gitea#17058) * Do not show issue context popup on external issues (go-gitea#17050) (go-gitea#17054) * Decrement Fork Num when converting from Fork (go-gitea#17035) (go-gitea#17046) * Correctly rollback in ForkRepository (go-gitea#17034) (go-gitea#17045) * Fix missing close in WalkGitLog (go-gitea#17008) (go-gitea#17009) * Add prefix to SVG id/class attributes (go-gitea#16997) (go-gitea#17000) * Fix bug of migrated repository not index (go-gitea#16991) (go-gitea#16996) * Skip AllowedUserVisibilityModes validation on update user if it is an organisation (go-gitea#16988) (go-gitea#16990) * Fix storage Iterate bug and Add storage doctor to delete garbage attachments (go-gitea#16971) (go-gitea#16977) * Fix issue with issue default mail template (go-gitea#16956) (go-gitea#16975) * Ensure that rebase conflicts are handled in updates (go-gitea#16952) (go-gitea#16960) * Prevent panic on diff generation (go-gitea#16950) (go-gitea#16951) Signed-off-by: Andrew Thornton <[email protected]> Co-authored-by: techknowlogick <[email protected]>
## [1.15.3](https://github.com/go-gitea/gitea/releases/tag/v1.15.3) - 2021-09-19 * ENHANCEMENTS * Add fluid to ui container class to remove margin (#16396) (#16976) * Add caller to cat-file batch calls (#17082) (#17089) * BUGFIXES * Render full plain readme. (#17083) (#17090) * Upgrade xorm to v1.2.4 (#17059) * Fix bug of migrate comments which only fetch one page (#17055) (#17058) * Do not show issue context popup on external issues (#17050) (#17054) * Decrement Fork Num when converting from Fork (#17035) (#17046) * Correctly rollback in ForkRepository (#17034) (#17045) * Fix missing close in WalkGitLog (#17008) (#17009) * Add prefix to SVG id/class attributes (#16997) (#17000) * Fix bug of migrated repository not index (#16991) (#16996) * Skip AllowedUserVisibilityModes validation on update user if it is an organisation (#16988) (#16990) * Fix storage Iterate bug and Add storage doctor to delete garbage attachments (#16971) (#16977) * Fix issue with issue default mail template (#16956) (#16975) * Ensure that rebase conflicts are handled in updates (#16952) (#16960) * Prevent panic on diff generation (#16950) (#16951) Signed-off-by: Andrew Thornton <[email protected]> Co-authored-by: techknowlogick <[email protected]> Co-authored-by: zeripath <[email protected]> Co-authored-by: techknowlogick <[email protected]>
The rollback functionality in
services/repository/repository.go:ForkRepository is incorrect and could
lead to a deadlock as it uses DeleteRepository to delete the rolled-back
repository - a function which creates its own transaction.
This PR adjusts the rollback function to only use RemoveAll as any
database changes will be automatically rolled-back. It also handles
panics and adjusts the Close within WithTx to ensure that if there is a
panic the session will always be closed.
Signed-off-by: Andrew Thornton [email protected]