Run DB writes sequentially to avoid deadlocks

This commit is contained in:
2015-03-21 21:18:41 +07:00
parent 6a35467c1e
commit 8e779f76ec
4 changed files with 11 additions and 11 deletions
+2 -2
View File
@@ -27,14 +27,14 @@ func Authenticate(code string) (token, login string, err error) {
}
login = user.Login
log.Println("Saving user", user)
user.Save()
db.Queue(func() { user.Save() })
tok := &db.Token{
User: login,
Token: token,
}
log.Println("Saving token", tok)
tok.Save()
db.Queue(func() { tok.Save() })
return
}
+7 -7
View File
@@ -31,7 +31,7 @@ func SyncRepos(token, owner string) {
IsPrivate: *repo.Private,
IsFork: *repo.Fork,
}
r.Save()
db.Queue(func() { r.Save() })
}
if opt.Page >= resp.LastPage {
break
@@ -67,7 +67,7 @@ func SyncContrib(token, owner string, repo *db.Repo) {
Additions: *week.Additions,
Deletions: *week.Deletions,
}
c.Save()
db.Queue(func() { c.Save() })
}
}
}
@@ -102,7 +102,7 @@ func SyncUserOrgs(token string) (err error) {
}
go SyncOrgTeams(token, o)
go SyncOrgMembers(token, o)
o.Save()
db.Queue(func() { o.Save() })
}
if opt.Page >= resp.LastPage {
break
@@ -136,7 +136,7 @@ func SyncOrgTeams(token string, org *db.Org) (err error) {
}
go SyncTeamMembers(token, t)
go SyncTeamRepos(token, t)
t.Save()
db.Queue(func() { t.Save() })
}
if opt.Page >= resp.LastPage {
break
@@ -169,7 +169,7 @@ func SyncOrgMembers(token string, org *db.Org) (err error) {
break
}
}
db.SaveOrgMembers(org.ID, ids)
db.Queue(func() { db.SaveOrgMembers(org.ID, ids) })
return
}
@@ -196,7 +196,7 @@ func SyncTeamMembers(token string, team *db.Team) (err error) {
break
}
}
db.SaveTeamMembers(team.OrgID, team.ID, ids)
db.Queue(func() { db.SaveTeamMembers(team.OrgID, team.ID, ids) })
return
}
@@ -223,7 +223,7 @@ func SyncTeamRepos(token string, team *db.Team) (err error) {
break
}
}
db.SaveTeamRepos(team.OrgID, team.ID, ids)
db.Queue(func() { db.SaveTeamRepos(team.OrgID, team.ID, ids) })
return
}
+1 -1
View File
@@ -26,7 +26,7 @@ func saveResponseMeta(token string, res *github.Response) {
Remaining: res.Remaining,
ResetAt: res.Reset.Time,
}
tok.Save()
db.Queue(func() { tok.Save() })
}
func report(task string, start time.Time) {
+1 -1
View File
@@ -42,7 +42,7 @@ func SyncUserInfo(token, login string) (err error) {
defer report("SyncUserInfo", time.Now())
var u *db.User
if u, err = FetchUserInfo(token, login); err == nil {
u.Save()
db.Queue(func() { u.Save() })
}
return
}