mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-30 22:11:07 +00:00 
			
		
		
		
	Add index for hook_task table (#21545)
Since `hook_id` and `uuid` will become a search condition column. It's better to add some index for them.
This commit is contained in:
		
					parent
					
						
							
								e09025fdce
							
						
					
				
			
			
				commit
				
					
						f337c32e86
					
				
			
		
					 3 changed files with 28 additions and 7 deletions
				
			
		|  | @ -423,6 +423,8 @@ var migrations = []Migration{ | |||
| 	NewMigration("Update counts of all open milestones", updateOpenMilestoneCounts), | ||||
| 	// v230 -> v231 | ||||
| 	NewMigration("Add ConfidentialClient column (default true) to OAuth2Application table", addConfidentialClientColumnToOAuth2ApplicationTable), | ||||
| 	// v231 -> v232 | ||||
| 	NewMigration("Add index for hook_task", addIndexForHookTask), | ||||
| } | ||||
| 
 | ||||
| // GetCurrentDBVersion returns the current db version | ||||
|  |  | |||
							
								
								
									
										19
									
								
								models/migrations/v231.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								models/migrations/v231.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| // Copyright 2022 The Gitea Authors. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package migrations | ||||
| 
 | ||||
| import ( | ||||
| 	"xorm.io/xorm" | ||||
| ) | ||||
| 
 | ||||
| func addIndexForHookTask(x *xorm.Engine) error { | ||||
| 	type HookTask struct { | ||||
| 		ID     int64  `xorm:"pk autoincr"` | ||||
| 		HookID int64  `xorm:"index"` | ||||
| 		UUID   string `xorm:"unique"` | ||||
| 	} | ||||
| 
 | ||||
| 	return x.Sync(new(HookTask)) | ||||
| } | ||||
|  | @ -103,9 +103,9 @@ type HookResponse struct { | |||
| 
 | ||||
| // HookTask represents a hook task. | ||||
| type HookTask struct { | ||||
| 	ID              int64 `xorm:"pk autoincr"` | ||||
| 	HookID          int64 | ||||
| 	UUID            string | ||||
| 	ID              int64  `xorm:"pk autoincr"` | ||||
| 	HookID          int64  `xorm:"index"` | ||||
| 	UUID            string `xorm:"unique"` | ||||
| 	api.Payloader   `xorm:"-"` | ||||
| 	PayloadContent  string `xorm:"LONGTEXT"` | ||||
| 	EventType       HookEventType | ||||
|  | @ -270,7 +270,7 @@ func CleanupHookTaskTable(ctx context.Context, cleanupType HookTaskCleanupType, | |||
| 				return db.ErrCancelledf("Before deleting hook_task records for hook id %d", hookID) | ||||
| 			default: | ||||
| 			} | ||||
| 			if err = deleteDeliveredHookTasksByWebhook(hookID, numberToKeep); err != nil { | ||||
| 			if err = deleteDeliveredHookTasksByWebhook(ctx, hookID, numberToKeep); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
|  | @ -279,10 +279,10 @@ func CleanupHookTaskTable(ctx context.Context, cleanupType HookTaskCleanupType, | |||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func deleteDeliveredHookTasksByWebhook(hookID int64, numberDeliveriesToKeep int) error { | ||||
| func deleteDeliveredHookTasksByWebhook(ctx context.Context, hookID int64, numberDeliveriesToKeep int) error { | ||||
| 	log.Trace("Deleting hook_task rows for webhook %d, keeping the most recent %d deliveries", hookID, numberDeliveriesToKeep) | ||||
| 	deliveryDates := make([]int64, 0, 10) | ||||
| 	err := db.GetEngine(db.DefaultContext).Table("hook_task"). | ||||
| 	err := db.GetEngine(ctx).Table("hook_task"). | ||||
| 		Where("hook_task.hook_id = ? AND hook_task.is_delivered = ? AND hook_task.delivered is not null", hookID, true). | ||||
| 		Cols("hook_task.delivered"). | ||||
| 		Join("INNER", "webhook", "hook_task.hook_id = webhook.id"). | ||||
|  | @ -294,7 +294,7 @@ func deleteDeliveredHookTasksByWebhook(hookID int64, numberDeliveriesToKeep int) | |||
| 	} | ||||
| 
 | ||||
| 	if len(deliveryDates) > 0 { | ||||
| 		deletes, err := db.GetEngine(db.DefaultContext). | ||||
| 		deletes, err := db.GetEngine(ctx). | ||||
| 			Where("hook_id = ? and is_delivered = ? and delivered <= ?", hookID, true, deliveryDates[0]). | ||||
| 			Delete(new(HookTask)) | ||||
| 		if err != nil { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue