Skip to content

Commit cb9c818

Browse files
authored
Make Repo Code Indexer an Unique Queue (#17515)
The functioning of the code indexer queue really only makes sense as an unique queue and doing this allows use to simplify the indexer data to simply delete the data if the repo is no longer in the db. Signed-off-by: Andrew Thornton <art27@cantab.net>
1 parent e2995ef commit cb9c818

File tree

3 files changed

+12
-25
lines changed

3 files changed

+12
-25
lines changed

integrations/repo_search_test.go

-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ func TestSearchRepo(t *testing.T) {
4444
repo, err = models.GetRepositoryByOwnerAndName("user2", "glob")
4545
assert.NoError(t, err)
4646

47-
executeIndexer(t, repo, code_indexer.DeleteRepoFromIndexer)
4847
executeIndexer(t, repo, code_indexer.UpdateRepoIndexer)
4948

5049
testSearch(t, "/user2/glob/search?q=loren&page=1", []string{"a.txt"})

modules/indexer/code/indexer.go

+11-23
Original file line numberDiff line numberDiff line change
@@ -75,16 +75,18 @@ func filenameOfIndexerID(indexerID string) string {
7575

7676
// IndexerData represents data stored in the code indexer
7777
type IndexerData struct {
78-
RepoID int64
79-
IsDelete bool
78+
RepoID int64
8079
}
8180

8281
var (
83-
indexerQueue queue.Queue
82+
indexerQueue queue.UniqueQueue
8483
)
8584

8685
func index(indexer Indexer, repoID int64) error {
8786
repo, err := models.GetRepositoryByID(repoID)
87+
if models.IsErrRepoNotExist(err) {
88+
return indexer.Delete(repoID)
89+
}
8890
if err != nil {
8991
return err
9092
}
@@ -146,22 +148,16 @@ func Init() {
146148
log.Error("Unable to process provided datum: %v - not possible to cast to IndexerData", datum)
147149
continue
148150
}
149-
log.Trace("IndexerData Process: %v %t", indexerData.RepoID, indexerData.IsDelete)
150-
151-
if indexerData.IsDelete {
152-
if err := indexer.Delete(indexerData.RepoID); err != nil {
153-
log.Error("indexer.Delete: %v", err)
154-
}
155-
} else {
156-
if err := index(indexer, indexerData.RepoID); err != nil {
157-
log.Error("index: %v", err)
158-
continue
159-
}
151+
log.Trace("IndexerData Process Repo: %d", indexerData.RepoID)
152+
153+
if err := index(indexer, indexerData.RepoID); err != nil {
154+
log.Error("index: %v", err)
155+
continue
160156
}
161157
}
162158
}
163159

164-
indexerQueue = queue.CreateQueue("code_indexer", handler, &IndexerData{})
160+
indexerQueue = queue.CreateUniqueQueue("code_indexer", handler, &IndexerData{})
165161
if indexerQueue == nil {
166162
log.Fatal("Unable to create codes indexer queue")
167163
}
@@ -265,14 +261,6 @@ func Init() {
265261
}
266262
}
267263

268-
// DeleteRepoFromIndexer remove all of a repository's entries from the indexer
269-
func DeleteRepoFromIndexer(repo *models.Repository) {
270-
indexData := &IndexerData{RepoID: repo.ID, IsDelete: true}
271-
if err := indexerQueue.Push(indexData); err != nil {
272-
log.Error("Delete repo index data %v failed: %v", indexData, err)
273-
}
274-
}
275-
276264
// UpdateRepoIndexer update a repository's entries in the indexer
277265
func UpdateRepoIndexer(repo *models.Repository) {
278266
indexData := &IndexerData{RepoID: repo.ID}

modules/notification/indexer/indexer.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ func (r *indexerNotifier) NotifyDeleteComment(doer *models.User, comment *models
109109
func (r *indexerNotifier) NotifyDeleteRepository(doer *models.User, repo *models.Repository) {
110110
issue_indexer.DeleteRepoIssueIndexer(repo)
111111
if setting.Indexer.RepoIndexerEnabled {
112-
code_indexer.DeleteRepoFromIndexer(repo)
112+
code_indexer.UpdateRepoIndexer(repo)
113113
}
114114
}
115115

0 commit comments

Comments
 (0)