Skip to content

Commit 1cb262b

Browse files
committed
Use transactions for issues, PRs and users
Signed-off-by: Carlos Martín <carlos.martin.sanchez@gmail.com>
1 parent dbc9caf commit 1cb262b

File tree

3 files changed

+27
-18
lines changed

3 files changed

+27
-18
lines changed

shallow/issue.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,30 @@ import (
1414

1515
type IssueSyncer struct {
1616
db *sql.DB
17-
store *models.IssueStore
1817
client *github.Client
1918
}
2019

2120
func NewIssueSyncer(db *sql.DB, c *github.Client) *IssueSyncer {
2221
return &IssueSyncer{
2322
db: db,
24-
store: models.NewIssueStore(db),
2523
client: c,
2624
}
2725
}
2826

2927
func (s *IssueSyncer) Sync(owner, repo string, logger log.Logger) error {
28+
store := models.NewIssueStore(s.db)
29+
return store.Transaction(func(store *models.IssueStore) error {
30+
return s.doIssues(store, owner, repo, logger)
31+
})
32+
}
33+
34+
func (s *IssueSyncer) doIssues(store *models.IssueStore, owner, repo string, logger log.Logger) error {
3035
opts := &github.IssueListByRepoOptions{}
3136
opts.ListOptions.PerPage = listOptionsPerPage
3237
opts.State = "all"
3338

3439
logger.Infof("starting to retrieve issues")
3540

36-
// TODO transaction for faster times
37-
3841
// Get the list of all issues
3942
for {
4043
issues, r, err := s.client.Issues.ListByRepo(context.TODO(), owner, repo, opts)
@@ -49,7 +52,7 @@ func (s *IssueSyncer) Sync(owner, repo string, logger log.Logger) error {
4952

5053
logger := logger.With(log.Fields{"issue": i.GetNumber()})
5154

52-
_, err := s.store.FindOne(models.NewIssueQuery().
55+
_, err := store.FindOne(models.NewIssueQuery().
5356
Where(kallax.And(
5457
kallax.Eq(models.Schema.Issue.RepositoryOwner, owner),
5558
kallax.Eq(models.Schema.Issue.RepositoryName, repo),
@@ -70,7 +73,7 @@ func (s *IssueSyncer) Sync(owner, repo string, logger log.Logger) error {
7073
record := models.NewIssue()
7174
record.Issue = *i
7275

73-
err = s.store.Insert(record)
76+
err = store.Insert(record)
7477
if err != nil {
7578
logger.Errorf(err, "failed to write the resource into the DB")
7679
return fmt.Errorf("failed to write the resource into the DB: %v", err)

shallow/pull_request.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,30 @@ import (
1414

1515
type PullRequestSyncer struct {
1616
db *sql.DB
17-
store *models.PullRequestStore
1817
client *github.Client
1918
}
2019

2120
func NewPullRequestSyncer(db *sql.DB, c *github.Client) *PullRequestSyncer {
2221
return &PullRequestSyncer{
2322
db: db,
24-
store: models.NewPullRequestStore(db),
2523
client: c,
2624
}
2725
}
2826

2927
func (s *PullRequestSyncer) Sync(owner, repo string, logger log.Logger) error {
28+
store := models.NewPullRequestStore(s.db)
29+
return store.Transaction(func(store *models.PullRequestStore) error {
30+
return s.doPRs(store, owner, repo, logger)
31+
})
32+
}
33+
34+
func (s *PullRequestSyncer) doPRs(store *models.PullRequestStore, owner, repo string, logger log.Logger) error {
3035
opts := &github.PullRequestListOptions{}
3136
opts.ListOptions.PerPage = listOptionsPerPage
3237
opts.State = "all"
3338

3439
logger.Infof("starting to retrieve PRs")
3540

36-
// TODO transaction for faster times
37-
3841
// Get the list of all PRs
3942
for {
4043
prs, r, err := s.client.PullRequests.List(context.TODO(), owner, repo, opts)
@@ -45,7 +48,7 @@ func (s *PullRequestSyncer) Sync(owner, repo string, logger log.Logger) error {
4548
for _, pr := range prs {
4649
logger := logger.With(log.Fields{"pr": pr.GetNumber()})
4750

48-
_, err := s.store.FindOne(models.NewPullRequestQuery().
51+
_, err := store.FindOne(models.NewPullRequestQuery().
4952
Where(kallax.And(
5053
kallax.Eq(models.Schema.Issue.RepositoryOwner, owner),
5154
kallax.Eq(models.Schema.Issue.RepositoryName, repo),
@@ -66,7 +69,7 @@ func (s *PullRequestSyncer) Sync(owner, repo string, logger log.Logger) error {
6669
record := models.NewPullRequest()
6770
record.PullRequest = *pr
6871

69-
err = s.store.Insert(record)
72+
err = store.Insert(record)
7073
if err != nil {
7174
logger.Errorf(err, "failed to write the resource into the DB")
7275
return fmt.Errorf("failed to write the resource into the DB: %v", err)

shallow/user.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,29 @@ import (
1414

1515
type UserSyncer struct {
1616
db *sql.DB
17-
store *models.UserStore
1817
client *github.Client
1918
}
2019

2120
func NewUserSyncer(db *sql.DB, c *github.Client) *UserSyncer {
2221
return &UserSyncer{
2322
db: db,
24-
store: models.NewUserStore(db),
2523
client: c,
2624
}
2725
}
2826

2927
func (s *UserSyncer) Sync(org string, logger log.Logger) error {
28+
store := models.NewUserStore(s.db)
29+
return store.Transaction(func(store *models.UserStore) error {
30+
return s.doUsers(store, org, logger)
31+
})
32+
}
33+
34+
func (s *UserSyncer) doUsers(store *models.UserStore, org string, logger log.Logger) error {
3035
opts := &github.ListMembersOptions{}
3136
opts.ListOptions.PerPage = listOptionsPerPage
3237

3338
logger.Infof("starting to retrieve users")
3439

35-
// TODO transaction for faster times
36-
3740
// Get the list of all users
3841
for {
3942
users, r, err := s.client.Organizations.ListMembers(context.TODO(), org, opts)
@@ -44,7 +47,7 @@ func (s *UserSyncer) Sync(org string, logger log.Logger) error {
4447
for _, user := range users {
4548
logger := logger.With(log.Fields{"user": user.GetLogin()})
4649

47-
_, err := s.store.FindOne(models.NewUserQuery().
50+
_, err := store.FindOne(models.NewUserQuery().
4851
Where(kallax.And(
4952
kallax.Eq(models.Schema.User.ID, user.GetID()),
5053
)),
@@ -62,7 +65,7 @@ func (s *UserSyncer) Sync(org string, logger log.Logger) error {
6265
record := models.NewUser()
6366
record.User = *user
6467

65-
err = s.store.Insert(record)
68+
err = store.Insert(record)
6669
if err != nil {
6770
logger.Errorf(err, "failed to write the resource into the DB")
6871
return fmt.Errorf("failed to write the resource into the DB: %v", err)

0 commit comments

Comments
 (0)