mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00:00 
			
		
		
		
	refactor: make db iterate context aware (#27710)
the iteration will run until finished atm. this changes it by checking if if the context got canceled before each run of a loop sequence is executed [View this pull with now whitespace](https://github.com/go-gitea/gitea/pull/27710/files?diff=unified&w=1)
This commit is contained in:
		@@ -17,6 +17,10 @@ func Iterate[Bean any](ctx context.Context, cond builder.Cond, f func(ctx contex
 | 
			
		||||
	batchSize := setting.Database.IterateBufferSize
 | 
			
		||||
	sess := GetEngine(ctx)
 | 
			
		||||
	for {
 | 
			
		||||
		select {
 | 
			
		||||
		case <-ctx.Done():
 | 
			
		||||
			return ctx.Err()
 | 
			
		||||
		default:
 | 
			
		||||
			beans := make([]*Bean, 0, batchSize)
 | 
			
		||||
			if cond != nil {
 | 
			
		||||
				sess = sess.Where(cond)
 | 
			
		||||
@@ -35,4 +39,5 @@ func Iterate[Bean any](ctx context.Context, cond builder.Cond, f func(ctx contex
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,10 @@ func deleteOrphanedRepos(ctx context.Context) (int64, error) {
 | 
			
		||||
	adminUser := &user_model.User{IsAdmin: true}
 | 
			
		||||
 | 
			
		||||
	for {
 | 
			
		||||
		select {
 | 
			
		||||
		case <-ctx.Done():
 | 
			
		||||
			return deleted, ctx.Err()
 | 
			
		||||
		default:
 | 
			
		||||
			var ids []int64
 | 
			
		||||
			if err := e.Table("`repository`").
 | 
			
		||||
				Join("LEFT", "`user`", "repository.owner_id=user.id").
 | 
			
		||||
@@ -57,6 +61,7 @@ func deleteOrphanedRepos(ctx context.Context) (int64, error) {
 | 
			
		||||
				deleted++
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user