fix potential lock when sqlite (#1647)

tokarchuk/v1.17
Lunny Xiao 8 years ago committed by GitHub
parent b6206e4788
commit 0f3923c4d7
  1. 48
      models/pull.go

@ -1058,29 +1058,30 @@ func (pr *PullRequest) checkAndUpdateStatus() {
// TODO: test more pull requests at same time. // TODO: test more pull requests at same time.
func TestPullRequests() { func TestPullRequests() {
prs := make([]*PullRequest, 0, 10) prs := make([]*PullRequest, 0, 10)
x.Iterate(PullRequest{
Status: PullRequestStatusChecking, err := x.Where("status = ?", PullRequestStatusChecking).Find(&prs)
}, if err != nil {
func(idx int, bean interface{}) error { log.Error(3, "Find Checking PRs", err)
pr := bean.(*PullRequest) return
}
if err := pr.GetBaseRepo(); err != nil {
log.Error(3, "GetBaseRepo: %v", err) var checkedPRs = make(map[int64]struct{})
return nil
}
if pr.manuallyMerged() {
return nil
}
if err := pr.testPatch(); err != nil {
log.Error(3, "testPatch: %v", err)
return nil
}
prs = append(prs, pr)
return nil
})
// Update pull request status. // Update pull request status.
for _, pr := range prs { for _, pr := range prs {
checkedPRs[pr.ID] = struct{}{}
if err := pr.GetBaseRepo(); err != nil {
log.Error(3, "GetBaseRepo: %v", err)
continue
}
if pr.manuallyMerged() {
continue
}
if err := pr.testPatch(); err != nil {
log.Error(3, "testPatch: %v", err)
continue
}
pr.checkAndUpdateStatus() pr.checkAndUpdateStatus()
} }
@ -1089,7 +1090,12 @@ func TestPullRequests() {
log.Trace("TestPullRequests[%v]: processing test task", prID) log.Trace("TestPullRequests[%v]: processing test task", prID)
pullRequestQueue.Remove(prID) pullRequestQueue.Remove(prID)
pr, err := GetPullRequestByID(com.StrTo(prID).MustInt64()) id := com.StrTo(prID).MustInt64()
if _, ok := checkedPRs[id]; ok {
continue
}
pr, err := GetPullRequestByID(id)
if err != nil { if err != nil {
log.Error(4, "GetPullRequestByID[%s]: %v", prID, err) log.Error(4, "GetPullRequestByID[%s]: %v", prID, err)
continue continue

Loading…
Cancel
Save