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>
This commit is contained in:
parent
e2995ef515
commit
cb9c8184c9
|
@ -44,7 +44,6 @@ func TestSearchRepo(t *testing.T) {
|
||||||
repo, err = models.GetRepositoryByOwnerAndName("user2", "glob")
|
repo, err = models.GetRepositoryByOwnerAndName("user2", "glob")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
executeIndexer(t, repo, code_indexer.DeleteRepoFromIndexer)
|
|
||||||
executeIndexer(t, repo, code_indexer.UpdateRepoIndexer)
|
executeIndexer(t, repo, code_indexer.UpdateRepoIndexer)
|
||||||
|
|
||||||
testSearch(t, "/user2/glob/search?q=loren&page=1", []string{"a.txt"})
|
testSearch(t, "/user2/glob/search?q=loren&page=1", []string{"a.txt"})
|
||||||
|
|
|
@ -75,16 +75,18 @@ func filenameOfIndexerID(indexerID string) string {
|
||||||
|
|
||||||
// IndexerData represents data stored in the code indexer
|
// IndexerData represents data stored in the code indexer
|
||||||
type IndexerData struct {
|
type IndexerData struct {
|
||||||
RepoID int64
|
RepoID int64
|
||||||
IsDelete bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
indexerQueue queue.Queue
|
indexerQueue queue.UniqueQueue
|
||||||
)
|
)
|
||||||
|
|
||||||
func index(indexer Indexer, repoID int64) error {
|
func index(indexer Indexer, repoID int64) error {
|
||||||
repo, err := models.GetRepositoryByID(repoID)
|
repo, err := models.GetRepositoryByID(repoID)
|
||||||
|
if models.IsErrRepoNotExist(err) {
|
||||||
|
return indexer.Delete(repoID)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -146,22 +148,16 @@ func Init() {
|
||||||
log.Error("Unable to process provided datum: %v - not possible to cast to IndexerData", datum)
|
log.Error("Unable to process provided datum: %v - not possible to cast to IndexerData", datum)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
log.Trace("IndexerData Process: %v %t", indexerData.RepoID, indexerData.IsDelete)
|
log.Trace("IndexerData Process Repo: %d", indexerData.RepoID)
|
||||||
|
|
||||||
if indexerData.IsDelete {
|
if err := index(indexer, indexerData.RepoID); err != nil {
|
||||||
if err := indexer.Delete(indexerData.RepoID); err != nil {
|
log.Error("index: %v", err)
|
||||||
log.Error("indexer.Delete: %v", err)
|
continue
|
||||||
}
|
|
||||||
} else {
|
|
||||||
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 {
|
if indexerQueue == nil {
|
||||||
log.Fatal("Unable to create codes indexer queue")
|
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
|
// UpdateRepoIndexer update a repository's entries in the indexer
|
||||||
func UpdateRepoIndexer(repo *models.Repository) {
|
func UpdateRepoIndexer(repo *models.Repository) {
|
||||||
indexData := &IndexerData{RepoID: repo.ID}
|
indexData := &IndexerData{RepoID: repo.ID}
|
||||||
|
|
|
@ -109,7 +109,7 @@ func (r *indexerNotifier) NotifyDeleteComment(doer *models.User, comment *models
|
||||||
func (r *indexerNotifier) NotifyDeleteRepository(doer *models.User, repo *models.Repository) {
|
func (r *indexerNotifier) NotifyDeleteRepository(doer *models.User, repo *models.Repository) {
|
||||||
issue_indexer.DeleteRepoIssueIndexer(repo)
|
issue_indexer.DeleteRepoIssueIndexer(repo)
|
||||||
if setting.Indexer.RepoIndexerEnabled {
|
if setting.Indexer.RepoIndexerEnabled {
|
||||||
code_indexer.DeleteRepoFromIndexer(repo)
|
code_indexer.UpdateRepoIndexer(repo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue