Index code and stats only for non-empty repositories (#10251)

Fix test and switch to unique queue

Fix MySQL support when deleting old statistics
mj
Lauris BH 4 years ago committed by GitHub
parent ff261dafc4
commit a1d796f521
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -4,6 +4,7 @@
owner_name: user2 owner_name: user2
lower_name: repo1 lower_name: repo1
name: repo1 name: repo1
is_empty: false
is_private: false is_private: false
num_issues: 2 num_issues: 2
num_closed_issues: 1 num_closed_issues: 1

@ -34,6 +34,8 @@ func GetUnindexedRepos(indexerType RepoIndexerType, maxRepoID int64, page, pageS
ids := make([]int64, 0, 50) ids := make([]int64, 0, 50)
cond := builder.Cond(builder.IsNull{ cond := builder.Cond(builder.IsNull{
"repo_indexer_status.id", "repo_indexer_status.id",
}).And(builder.Eq{
"repository.is_empty": false,
}) })
sess := x.Table("repository").Join("LEFT OUTER", "repo_indexer_status", "repository.id = repo_indexer_status.repo_id AND repo_indexer_status.indexer_type = ?", indexerType) sess := x.Table("repository").Join("LEFT OUTER", "repo_indexer_status", "repository.id = repo_indexer_status.repo_id AND repo_indexer_status.indexer_type = ?", indexerType)
if maxRepoID > 0 { if maxRepoID > 0 {
@ -66,11 +68,11 @@ func (repo *Repository) getIndexerStatus(e Engine, indexerType RepoIndexerType)
return repo.StatsIndexerStatus, nil return repo.StatsIndexerStatus, nil
} }
} }
status := &RepoIndexerStatus{RepoID: repo.ID, IndexerType: indexerType} status := &RepoIndexerStatus{RepoID: repo.ID}
has, err := e.Get(status) if has, err := e.Where("`indexer_type` = ?", indexerType).Get(status); err != nil {
if err != nil {
return nil, err return nil, err
} else if !has { } else if !has {
status.IndexerType = indexerType
status.CommitSha = "" status.CommitSha = ""
} }
switch indexerType { switch indexerType {

@ -125,10 +125,19 @@ func (repo *Repository) UpdateLanguageStats(commitID string, stats map[string]fl
} }
} }
// Delete old languages // Delete old languages
if _, err := sess.Where("`id` IN (SELECT `id` FROM `language_stat` WHERE `repo_id` = ? AND `commit_id` != ?)", repo.ID, commitID).Delete(&LanguageStat{}); err != nil { statsToDelete := make([]int64, 0, len(oldstats))
return err for _, s := range oldstats {
if s.CommitID != commitID {
statsToDelete = append(statsToDelete, s.ID)
}
}
if len(statsToDelete) > 0 {
if _, err := sess.In("`id`", statsToDelete).Delete(&LanguageStat{}); err != nil {
return err
}
} }
// Update indexer status
if err = repo.updateIndexerStatus(sess, RepoIndexerTypeStats, commitID); err != nil { if err = repo.updateIndexerStatus(sess, RepoIndexerTypeStats, commitID); err != nil {
return err return err
} }

@ -14,7 +14,7 @@ import (
) )
// statsQueue represents a queue to handle repository stats updates // statsQueue represents a queue to handle repository stats updates
var statsQueue queue.Queue var statsQueue queue.UniqueQueue
// handle passed PR IDs and test the PRs // handle passed PR IDs and test the PRs
func handle(data ...queue.Data) { func handle(data ...queue.Data) {
@ -27,7 +27,7 @@ func handle(data ...queue.Data) {
} }
func initStatsQueue() error { func initStatsQueue() error {
statsQueue = queue.CreateQueue("repo_stats_update", handle, int64(0)).(queue.Queue) statsQueue = queue.CreateUniqueQueue("repo_stats_update", handle, int64(0)).(queue.UniqueQueue)
if statsQueue == nil { if statsQueue == nil {
return fmt.Errorf("Unable to create repo_stats_update Queue") return fmt.Errorf("Unable to create repo_stats_update Queue")
} }

Loading…
Cancel
Save