Skip to content

Commit 5249912

Browse files
committed
Use transaction for repositores + issues and PRs
Since the issues, PRs and the reposity are all commited at the same time, we can remove the FindOne checks for issues and because we already know the repository was not found Signed-off-by: Carlos Martín <carlos.martin.sanchez@gmail.com>
1 parent 1cb262b commit 5249912

File tree

3 files changed

+35
-69
lines changed

3 files changed

+35
-69
lines changed

shallow/issue.go

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,28 @@ package shallow
22

33
import (
44
"context"
5-
"database/sql"
65
"fmt"
76

87
"github.com/src-d/ghsync/models"
98

109
"github.com/google/go-github/github"
11-
"gopkg.in/src-d/go-kallax.v1"
1210
"gopkg.in/src-d/go-log.v1"
1311
)
1412

1513
type IssueSyncer struct {
16-
db *sql.DB
14+
store *models.IssueStore
1715
client *github.Client
1816
}
1917

20-
func NewIssueSyncer(db *sql.DB, c *github.Client) *IssueSyncer {
18+
func NewIssueSyncer(s *models.IssueStore, c *github.Client) *IssueSyncer {
2119
return &IssueSyncer{
22-
db: db,
20+
store: s,
2321
client: c,
2422
}
2523
}
2624

2725
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 {
26+
return s.store.Transaction(func(store *models.IssueStore) error {
3027
return s.doIssues(store, owner, repo, logger)
3128
})
3229
}
@@ -52,24 +49,6 @@ func (s *IssueSyncer) doIssues(store *models.IssueStore, owner, repo string, log
5249

5350
logger := logger.With(log.Fields{"issue": i.GetNumber()})
5451

55-
_, err := store.FindOne(models.NewIssueQuery().
56-
Where(kallax.And(
57-
kallax.Eq(models.Schema.Issue.RepositoryOwner, owner),
58-
kallax.Eq(models.Schema.Issue.RepositoryName, repo),
59-
kallax.Eq(models.Schema.Issue.Number, i.GetNumber()),
60-
)),
61-
)
62-
63-
if err != nil && err != kallax.ErrNotFound {
64-
logger.Errorf(err, "failed to read the resource from the DB")
65-
return fmt.Errorf("failed to read the resource from the DB: %v", err)
66-
}
67-
68-
if err == nil {
69-
logger.Infof("resource already exists, skipping")
70-
continue
71-
}
72-
7352
record := models.NewIssue()
7453
record.Issue = *i
7554

shallow/pull_request.go

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,28 @@ package shallow
22

33
import (
44
"context"
5-
"database/sql"
65
"fmt"
76

87
"github.com/src-d/ghsync/models"
98

109
"github.com/google/go-github/github"
11-
"gopkg.in/src-d/go-kallax.v1"
1210
"gopkg.in/src-d/go-log.v1"
1311
)
1412

1513
type PullRequestSyncer struct {
16-
db *sql.DB
14+
store *models.PullRequestStore
1715
client *github.Client
1816
}
1917

20-
func NewPullRequestSyncer(db *sql.DB, c *github.Client) *PullRequestSyncer {
18+
func NewPullRequestSyncer(s *models.PullRequestStore, c *github.Client) *PullRequestSyncer {
2119
return &PullRequestSyncer{
22-
db: db,
20+
store: s,
2321
client: c,
2422
}
2523
}
2624

2725
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 {
26+
return s.store.Transaction(func(store *models.PullRequestStore) error {
3027
return s.doPRs(store, owner, repo, logger)
3128
})
3229
}
@@ -48,24 +45,6 @@ func (s *PullRequestSyncer) doPRs(store *models.PullRequestStore, owner, repo st
4845
for _, pr := range prs {
4946
logger := logger.With(log.Fields{"pr": pr.GetNumber()})
5047

51-
_, err := store.FindOne(models.NewPullRequestQuery().
52-
Where(kallax.And(
53-
kallax.Eq(models.Schema.Issue.RepositoryOwner, owner),
54-
kallax.Eq(models.Schema.Issue.RepositoryName, repo),
55-
kallax.Eq(models.Schema.Issue.Number, pr.GetNumber()),
56-
)),
57-
)
58-
59-
if err != nil && err != kallax.ErrNotFound {
60-
logger.Errorf(err, "failed to read the resource from the DB")
61-
return fmt.Errorf("failed to read the resource from the DB: %v", err)
62-
}
63-
64-
if err == nil {
65-
logger.Infof("resource already exists, skipping")
66-
continue
67-
}
68-
6948
record := models.NewPullRequest()
7049
record.PullRequest = *pr
7150

shallow/repository.go

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -82,28 +82,36 @@ func (s *RepositorySyncer) doRepo(repository *github.Repository, parentLogger lo
8282
return nil
8383
}
8484

85-
issueSyncer := NewIssueSyncer(s.db, s.client)
86-
err = issueSyncer.Sync(repository.GetOwner().GetLogin(), repository.GetName(), logger)
87-
if err != nil {
88-
return err
89-
}
85+
return s.store.Transaction(func(store *models.RepositoryStore) error {
86+
var issueStore models.IssueStore
87+
kallax.StoreFrom(&issueStore, store)
9088

91-
prSyncer := NewPullRequestSyncer(s.db, s.client)
92-
err = prSyncer.Sync(repository.GetOwner().GetLogin(), repository.GetName(), logger)
93-
if err != nil {
94-
return err
95-
}
89+
issueSyncer := NewIssueSyncer(&issueStore, s.client)
90+
err = issueSyncer.Sync(repository.GetOwner().GetLogin(), repository.GetName(), logger)
91+
if err != nil {
92+
return err
93+
}
9694

97-
record := models.NewRepository()
98-
record.Repository = *repository
95+
var prStore models.PullRequestStore
96+
kallax.StoreFrom(&prStore, store)
9997

100-
err = s.store.Insert(record)
101-
if err != nil {
102-
logger.Errorf(err, "failed to write the resource into the DB")
103-
return fmt.Errorf("failed to write the resource into the DB: %v", err)
104-
}
98+
prSyncer := NewPullRequestSyncer(&prStore, s.client)
99+
err = prSyncer.Sync(repository.GetOwner().GetLogin(), repository.GetName(), logger)
100+
if err != nil {
101+
return err
102+
}
105103

106-
logger.Debugf("resource written in the DB")
104+
record := models.NewRepository()
105+
record.Repository = *repository
107106

108-
return nil
107+
err = s.store.Insert(record)
108+
if err != nil {
109+
logger.Errorf(err, "failed to write the resource into the DB")
110+
return fmt.Errorf("failed to write the resource into the DB: %v", err)
111+
}
112+
113+
logger.Debugf("resource written in the DB")
114+
115+
return nil
116+
})
109117
}

0 commit comments

Comments
 (0)