From 1eaeae184da8f09a0951ff5679833873878c4ad0 Mon Sep 17 00:00:00 2001 From: Andrew Thornton Date: Mon, 1 Nov 2021 20:55:24 +0000 Subject: [PATCH] Make Repo Code Indexer an Unique Queue 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 --- integrations/repo_search_test.go | 1 - modules/indexer/code/indexer.go | 34 ++++++++----------------- modules/notification/indexer/indexer.go | 2 +- 3 files changed, 12 insertions(+), 25 deletions(-) diff --git a/integrations/repo_search_test.go b/integrations/repo_search_test.go index 6f2ee3746002..56d89fee3040 100644 --- a/integrations/repo_search_test.go +++ b/integrations/repo_search_test.go @@ -44,7 +44,6 @@ func TestSearchRepo(t *testing.T) { repo, err = models.GetRepositoryByOwnerAndName("user2", "glob") assert.NoError(t, err) - executeIndexer(t, repo, code_indexer.DeleteRepoFromIndexer) executeIndexer(t, repo, code_indexer.UpdateRepoIndexer) testSearch(t, "/user2/glob/search?q=loren&page=1", []string{"a.txt"}) diff --git a/modules/indexer/code/indexer.go b/modules/indexer/code/indexer.go index 46b590505993..981167a8254a 100644 --- a/modules/indexer/code/indexer.go +++ b/modules/indexer/code/indexer.go @@ -75,16 +75,18 @@ func filenameOfIndexerID(indexerID string) string { // IndexerData represents data stored in the code indexer type IndexerData struct { - RepoID int64 - IsDelete bool + RepoID int64 } var ( - indexerQueue queue.Queue + indexerQueue queue.UniqueQueue ) func index(indexer Indexer, repoID int64) error { repo, err := models.GetRepositoryByID(repoID) + if models.IsErrRepoNotExist(err) { + return indexer.Delete(repoID) + } if err != nil { return err } @@ -146,22 +148,16 @@ func Init() { log.Error("Unable to process provided datum: %v - not possible to cast to IndexerData", datum) continue } - log.Trace("IndexerData Process: %v %t", indexerData.RepoID, indexerData.IsDelete) - - if indexerData.IsDelete { - if err := indexer.Delete(indexerData.RepoID); err != nil { - log.Error("indexer.Delete: %v", err) - } - } else { - if err := index(indexer, indexerData.RepoID); err != nil { - log.Error("index: %v", err) - continue - } + log.Trace("IndexerData Process Repo: %d", indexerData.RepoID) + + if err := index(indexer, indexerData.RepoID); err != nil { + log.Error("index: %v", err) + continue } } } - indexerQueue = queue.CreateQueue("code_indexer", handler, &IndexerData{}) + indexerQueue = queue.CreateUniqueQueue("code_indexer", handler, &IndexerData{}) if indexerQueue == nil { log.Fatal("Unable to create codes indexer queue") } @@ -265,14 +261,6 @@ func Init() { } } -// DeleteRepoFromIndexer remove all of a repository's entries from the indexer -func DeleteRepoFromIndexer(repo *models.Repository) { - indexData := &IndexerData{RepoID: repo.ID, IsDelete: true} - if err := indexerQueue.Push(indexData); err != nil { - log.Error("Delete repo index data %v failed: %v", indexData, err) - } -} - // UpdateRepoIndexer update a repository's entries in the indexer func UpdateRepoIndexer(repo *models.Repository) { indexData := &IndexerData{RepoID: repo.ID} diff --git a/modules/notification/indexer/indexer.go b/modules/notification/indexer/indexer.go index 205194ad3e26..109eb1f62d81 100644 --- a/modules/notification/indexer/indexer.go +++ b/modules/notification/indexer/indexer.go @@ -109,7 +109,7 @@ func (r *indexerNotifier) NotifyDeleteComment(doer *models.User, comment *models func (r *indexerNotifier) NotifyDeleteRepository(doer *models.User, repo *models.Repository) { issue_indexer.DeleteRepoIssueIndexer(repo) if setting.Indexer.RepoIndexerEnabled { - code_indexer.DeleteRepoFromIndexer(repo) + code_indexer.UpdateRepoIndexer(repo) } }