mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 22:28:05 +01:00 
			
		
		
		
	Add a db consistency check to remove runners that do not belong to a repository (#30614)
Follow #30406
This commit is contained in:
		
							parent
							
								
									e94864e86c
								
							
						
					
					
						commit
						30dd4beeee
					
				| @ -270,7 +270,7 @@ func CountRunnersWithoutBelongingOwner(ctx context.Context) (int64, error) { | ||||
| 	// Only affect action runners were a owner ID is set, as actions runners | ||||
| 	// could also be created on a repository. | ||||
| 	return db.GetEngine(ctx).Table("action_runner"). | ||||
| 		Join("LEFT", "user", "`action_runner`.owner_id = `user`.id"). | ||||
| 		Join("LEFT", "`user`", "`action_runner`.owner_id = `user`.id"). | ||||
| 		Where("`action_runner`.owner_id != ?", 0). | ||||
| 		And(builder.IsNull{"`user`.id"}). | ||||
| 		Count(new(ActionRunner)) | ||||
| @ -279,7 +279,7 @@ func CountRunnersWithoutBelongingOwner(ctx context.Context) (int64, error) { | ||||
| func FixRunnersWithoutBelongingOwner(ctx context.Context) (int64, error) { | ||||
| 	subQuery := builder.Select("`action_runner`.id"). | ||||
| 		From("`action_runner`"). | ||||
| 		Join("LEFT", "user", "`action_runner`.owner_id = `user`.id"). | ||||
| 		Join("LEFT", "`user`", "`action_runner`.owner_id = `user`.id"). | ||||
| 		Where(builder.Neq{"`action_runner`.owner_id": 0}). | ||||
| 		And(builder.IsNull{"`user`.id"}) | ||||
| 	b := builder.Delete(builder.In("id", subQuery)).From("`action_runner`") | ||||
| @ -289,3 +289,25 @@ func FixRunnersWithoutBelongingOwner(ctx context.Context) (int64, error) { | ||||
| 	} | ||||
| 	return res.RowsAffected() | ||||
| } | ||||
| 
 | ||||
| func CountRunnersWithoutBelongingRepo(ctx context.Context) (int64, error) { | ||||
| 	return db.GetEngine(ctx).Table("action_runner"). | ||||
| 		Join("LEFT", "`repository`", "`action_runner`.repo_id = `repository`.id"). | ||||
| 		Where("`action_runner`.repo_id != ?", 0). | ||||
| 		And(builder.IsNull{"`repository`.id"}). | ||||
| 		Count(new(ActionRunner)) | ||||
| } | ||||
| 
 | ||||
| func FixRunnersWithoutBelongingRepo(ctx context.Context) (int64, error) { | ||||
| 	subQuery := builder.Select("`action_runner`.id"). | ||||
| 		From("`action_runner`"). | ||||
| 		Join("LEFT", "`repository`", "`action_runner`.repo_id = `repository`.id"). | ||||
| 		Where(builder.Neq{"`action_runner`.repo_id": 0}). | ||||
| 		And(builder.IsNull{"`repository`.id"}) | ||||
| 	b := builder.Delete(builder.In("id", subQuery)).From("`action_runner`") | ||||
| 	res, err := db.GetEngine(ctx).Exec(b) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	return res.RowsAffected() | ||||
| } | ||||
|  | ||||
| @ -152,6 +152,12 @@ func prepareDBConsistencyChecks() []consistencyCheck { | ||||
| 			Fixer:        actions_model.FixRunnersWithoutBelongingOwner, | ||||
| 			FixedMessage: "Removed", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:         "Action Runners without existing repository", | ||||
| 			Counter:      actions_model.CountRunnersWithoutBelongingRepo, | ||||
| 			Fixer:        actions_model.FixRunnersWithoutBelongingRepo, | ||||
| 			FixedMessage: "Removed", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:         "Topics with empty repository count", | ||||
| 			Counter:      repo_model.CountOrphanedTopics, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user