mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 00:11:04 +00:00 
			
		
		
		
	fix race on indexer (#9136)
This commit is contained in:
		
					parent
					
						
							
								7b4d2f7a2a
							
						
					
				
			
			
				commit
				
					
						9856ac5818
					
				
			
		
					 1 changed files with 12 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -60,7 +60,7 @@ func (repo *Repository) updateIndexerStatus(sha string) error {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
type repoIndexerOperation struct {
 | 
			
		||||
	repo     *Repository
 | 
			
		||||
	repoID   int64
 | 
			
		||||
	deleted  bool
 | 
			
		||||
	watchers []chan<- error
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +145,7 @@ func populateRepoIndexer(maxRepoID int64) {
 | 
			
		|||
		}
 | 
			
		||||
		for _, repo := range repos {
 | 
			
		||||
			repoIndexerOperationQueue <- repoIndexerOperation{
 | 
			
		||||
				repo:    repo,
 | 
			
		||||
				repoID:  repo.ID,
 | 
			
		||||
				deleted: false,
 | 
			
		||||
			}
 | 
			
		||||
			maxRepoID = repo.ID - 1
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +154,12 @@ func populateRepoIndexer(maxRepoID int64) {
 | 
			
		|||
	log.Info("Done populating the repo indexer with existing repositories")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func updateRepoIndexer(repo *Repository) error {
 | 
			
		||||
func updateRepoIndexer(repoID int64) error {
 | 
			
		||||
	repo, err := getRepositoryByID(x, repoID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sha, err := getDefaultBranchSha(repo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
| 
						 | 
				
			
			@ -362,11 +367,11 @@ func processRepoIndexerOperationQueue() {
 | 
			
		|||
		op := <-repoIndexerOperationQueue
 | 
			
		||||
		var err error
 | 
			
		||||
		if op.deleted {
 | 
			
		||||
			if err = indexer.DeleteRepoFromIndexer(op.repo.ID); err != nil {
 | 
			
		||||
			if err = indexer.DeleteRepoFromIndexer(op.repoID); err != nil {
 | 
			
		||||
				log.Error("DeleteRepoFromIndexer: %v", err)
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			if err = updateRepoIndexer(op.repo); err != nil {
 | 
			
		||||
			if err = updateRepoIndexer(op.repoID); err != nil {
 | 
			
		||||
				log.Error("updateRepoIndexer: %v", err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -378,12 +383,12 @@ func processRepoIndexerOperationQueue() {
 | 
			
		|||
 | 
			
		||||
// DeleteRepoFromIndexer remove all of a repository's entries from the indexer
 | 
			
		||||
func DeleteRepoFromIndexer(repo *Repository, watchers ...chan<- error) {
 | 
			
		||||
	addOperationToQueue(repoIndexerOperation{repo: repo, deleted: true, watchers: watchers})
 | 
			
		||||
	addOperationToQueue(repoIndexerOperation{repoID: repo.ID, deleted: true, watchers: watchers})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateRepoIndexer update a repository's entries in the indexer
 | 
			
		||||
func UpdateRepoIndexer(repo *Repository, watchers ...chan<- error) {
 | 
			
		||||
	addOperationToQueue(repoIndexerOperation{repo: repo, deleted: false, watchers: watchers})
 | 
			
		||||
	addOperationToQueue(repoIndexerOperation{repoID: repo.ID, deleted: false, watchers: watchers})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func addOperationToQueue(op repoIndexerOperation) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue