Skip to content

Commit 9856ac5

Browse files
authored
fix race on indexer (#9136)
1 parent 7b4d2f7 commit 9856ac5

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

models/repo_indexer.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func (repo *Repository) updateIndexerStatus(sha string) error {
6060
}
6161

6262
type repoIndexerOperation struct {
63-
repo *Repository
63+
repoID int64
6464
deleted bool
6565
watchers []chan<- error
6666
}
@@ -145,7 +145,7 @@ func populateRepoIndexer(maxRepoID int64) {
145145
}
146146
for _, repo := range repos {
147147
repoIndexerOperationQueue <- repoIndexerOperation{
148-
repo: repo,
148+
repoID: repo.ID,
149149
deleted: false,
150150
}
151151
maxRepoID = repo.ID - 1
@@ -154,7 +154,12 @@ func populateRepoIndexer(maxRepoID int64) {
154154
log.Info("Done populating the repo indexer with existing repositories")
155155
}
156156

157-
func updateRepoIndexer(repo *Repository) error {
157+
func updateRepoIndexer(repoID int64) error {
158+
repo, err := getRepositoryByID(x, repoID)
159+
if err != nil {
160+
return err
161+
}
162+
158163
sha, err := getDefaultBranchSha(repo)
159164
if err != nil {
160165
return err
@@ -362,11 +367,11 @@ func processRepoIndexerOperationQueue() {
362367
op := <-repoIndexerOperationQueue
363368
var err error
364369
if op.deleted {
365-
if err = indexer.DeleteRepoFromIndexer(op.repo.ID); err != nil {
370+
if err = indexer.DeleteRepoFromIndexer(op.repoID); err != nil {
366371
log.Error("DeleteRepoFromIndexer: %v", err)
367372
}
368373
} else {
369-
if err = updateRepoIndexer(op.repo); err != nil {
374+
if err = updateRepoIndexer(op.repoID); err != nil {
370375
log.Error("updateRepoIndexer: %v", err)
371376
}
372377
}
@@ -378,12 +383,12 @@ func processRepoIndexerOperationQueue() {
378383

379384
// DeleteRepoFromIndexer remove all of a repository's entries from the indexer
380385
func DeleteRepoFromIndexer(repo *Repository, watchers ...chan<- error) {
381-
addOperationToQueue(repoIndexerOperation{repo: repo, deleted: true, watchers: watchers})
386+
addOperationToQueue(repoIndexerOperation{repoID: repo.ID, deleted: true, watchers: watchers})
382387
}
383388

384389
// UpdateRepoIndexer update a repository's entries in the indexer
385390
func UpdateRepoIndexer(repo *Repository, watchers ...chan<- error) {
386-
addOperationToQueue(repoIndexerOperation{repo: repo, deleted: false, watchers: watchers})
391+
addOperationToQueue(repoIndexerOperation{repoID: repo.ID, deleted: false, watchers: watchers})
387392
}
388393

389394
func addOperationToQueue(op repoIndexerOperation) {

0 commit comments

Comments
 (0)