Use lockCtx when necessary

This commit is contained in:
Lunny Xiao 2024-08-27 21:15:32 -07:00
parent 4bf86e9594
commit 1e1d6e947e
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
2 changed files with 17 additions and 16 deletions

View File

@ -170,13 +170,6 @@ func Merge(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.U
return fmt.Errorf("unable to load head repo: %w", err) return fmt.Errorf("unable to load head repo: %w", err)
} }
ctx, releaser, err := globallock.Lock(ctx, getPullWorkingLockKey(pr.ID))
if err != nil {
log.Error("lock.Lock(): %v", err)
return fmt.Errorf("lock.Lock: %w", err)
}
defer releaser()
prUnit, err := pr.BaseRepo.GetUnit(ctx, unit.TypePullRequests) prUnit, err := pr.BaseRepo.GetUnit(ctx, unit.TypePullRequests)
if err != nil { if err != nil {
log.Error("pr.BaseRepo.GetUnit(unit.TypePullRequests): %v", err) log.Error("pr.BaseRepo.GetUnit(unit.TypePullRequests): %v", err)
@ -189,11 +182,18 @@ func Merge(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.U
return models.ErrInvalidMergeStyle{ID: pr.BaseRepo.ID, Style: mergeStyle} return models.ErrInvalidMergeStyle{ID: pr.BaseRepo.ID, Style: mergeStyle}
} }
lockCtx, releaser, err := globallock.Lock(ctx, getPullWorkingLockKey(pr.ID))
if err != nil {
log.Error("lock.Lock(): %v", err)
return fmt.Errorf("lock.Lock: %w", err)
}
defer func() { defer func() {
go AddTestPullRequestTask(doer, pr.BaseRepo.ID, pr.BaseBranch, false, "", "") go AddTestPullRequestTask(doer, pr.BaseRepo.ID, pr.BaseBranch, false, "", "")
}() }()
_, err = doMergeAndPush(ctx, pr, doer, mergeStyle, expectedHeadCommitID, message, repo_module.PushTriggerPRMergeToBase) _, err = doMergeAndPush(lockCtx, pr, doer, mergeStyle, expectedHeadCommitID, message, repo_module.PushTriggerPRMergeToBase)
releaser()
if err != nil { if err != nil {
return err return err
} }
@ -492,14 +492,13 @@ func CheckPullBranchProtections(ctx context.Context, pr *issues_model.PullReques
// MergedManually mark pr as merged manually // MergedManually mark pr as merged manually
func MergedManually(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.User, baseGitRepo *git.Repository, commitID string) error { func MergedManually(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.User, baseGitRepo *git.Repository, commitID string) error {
ctx, releaser, err := globallock.Lock(ctx, getPullWorkingLockKey(pr.ID)) lockCtx, releaser, err := globallock.Lock(ctx, getPullWorkingLockKey(pr.ID))
if err != nil { if err != nil {
log.Error("lock.Lock(): %v", err) log.Error("lock.Lock(): %v", err)
return fmt.Errorf("lock.Lock: %w", err) return fmt.Errorf("lock.Lock: %w", err)
} }
defer releaser()
if err := db.WithTx(ctx, func(ctx context.Context) error { err = db.WithTx(lockCtx, func(ctx context.Context) error {
if err := pr.LoadBaseRepo(ctx); err != nil { if err := pr.LoadBaseRepo(ctx); err != nil {
return err return err
} }
@ -549,7 +548,9 @@ func MergedManually(ctx context.Context, pr *issues_model.PullRequest, doer *use
return fmt.Errorf("SetMerged failed") return fmt.Errorf("SetMerged failed")
} }
return nil return nil
}); err != nil { })
releaser()
if err != nil {
return err return err
} }

View File

@ -42,13 +42,13 @@ func TransferOwnership(ctx context.Context, doer, newOwner *user_model.User, rep
oldOwner := repo.Owner oldOwner := repo.Owner
ctx, releaser, err := globallock.Lock(ctx, getRepoWorkingLockKey(repo.ID)) lockCtx, releaser, err := globallock.Lock(ctx, getRepoWorkingLockKey(repo.ID))
if err != nil { if err != nil {
log.Error("lock.Lock(): %v", err) log.Error("lock.Lock(): %v", err)
return fmt.Errorf("lock.Lock: %w", err) return fmt.Errorf("lock.Lock: %w", err)
} }
if err := transferOwnership(ctx, doer, newOwner.Name, repo); err != nil { if err := transferOwnership(lockCtx, doer, newOwner.Name, repo); err != nil {
releaser() releaser()
return err return err
} }
@ -368,13 +368,13 @@ func ChangeRepositoryName(ctx context.Context, doer *user_model.User, repo *repo
// repo so that we can automatically rename the repo path and updates the // repo so that we can automatically rename the repo path and updates the
// local copy's origin accordingly. // local copy's origin accordingly.
ctx, releaser, err := globallock.Lock(ctx, getRepoWorkingLockKey(repo.ID)) lockCtx, releaser, err := globallock.Lock(ctx, getRepoWorkingLockKey(repo.ID))
if err != nil { if err != nil {
log.Error("lock.Lock(): %v", err) log.Error("lock.Lock(): %v", err)
return fmt.Errorf("lock.Lock: %w", err) return fmt.Errorf("lock.Lock: %w", err)
} }
if err := changeRepositoryName(ctx, repo, newRepoName); err != nil { if err := changeRepositoryName(lockCtx, repo, newRepoName); err != nil {
releaser() releaser()
return err return err
} }