Index code and stats only for non-empty repositories (#10251)
Fix test and switch to unique queue Fix MySQL support when deleting old statistics
This commit is contained in:
		
							parent
							
								
									ff261dafc4
								
							
						
					
					
						commit
						a1d796f521
					
				| @ -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)) | ||||||
|  | 	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 | 			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…
	
		Reference in New Issue
	
	Block a user