mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 11:28:24 +00:00 
			
		
		
		
	Fix a bug where lfs gc never worked. (#35198)
Fix #31113 After #22385 introduced LFS GC, it never worked due to a bug in the INI library: fields in structs embedded more than one level deep are not populated from the INI file. This PR fixes the issue by replacing the multi-level embedded struct with a single-level struct for parsing the cron.gc_lfs configuration. Added a new test for retrieving cron settings to demonstrate the bug in the INI package.
This commit is contained in:
		| @@ -171,34 +171,35 @@ func registerDeleteOldSystemNotices() { | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| type GCLFSConfig struct { | ||||
| 	BaseConfig | ||||
| 	OlderThan                time.Duration | ||||
| 	LastUpdatedMoreThanAgo   time.Duration | ||||
| 	NumberToCheckPerRepo     int64 | ||||
| 	ProportionToCheckPerRepo float64 | ||||
| } | ||||
|  | ||||
| func registerGCLFS() { | ||||
| 	if !setting.LFS.StartServer { | ||||
| 		return | ||||
| 	} | ||||
| 	type GCLFSConfig struct { | ||||
| 		OlderThanConfig | ||||
| 		LastUpdatedMoreThanAgo   time.Duration | ||||
| 		NumberToCheckPerRepo     int64 | ||||
| 		ProportionToCheckPerRepo float64 | ||||
| 	} | ||||
|  | ||||
| 	RegisterTaskFatal("gc_lfs", &GCLFSConfig{ | ||||
| 		OlderThanConfig: OlderThanConfig{ | ||||
| 			BaseConfig: BaseConfig{ | ||||
| 				Enabled:    false, | ||||
| 				RunAtStart: false, | ||||
| 				Schedule:   "@every 24h", | ||||
| 			}, | ||||
| 			// Only attempt to garbage collect lfs meta objects older than a week as the order of git lfs upload | ||||
| 			// and git object upload is not necessarily guaranteed. It's possible to imagine a situation whereby | ||||
| 			// an LFS object is uploaded but the git branch is not uploaded immediately, or there are some rapid | ||||
| 			// changes in new branches that might lead to lfs objects becoming temporarily unassociated with git | ||||
| 			// objects. | ||||
| 			// | ||||
| 			// It is likely that a week is potentially excessive but it should definitely be enough that any | ||||
| 			// unassociated LFS object is genuinely unassociated. | ||||
| 			OlderThan: 24 * time.Hour * 7, | ||||
| 		BaseConfig: BaseConfig{ | ||||
| 			Enabled:    false, | ||||
| 			RunAtStart: false, | ||||
| 			Schedule:   "@every 24h", | ||||
| 		}, | ||||
| 		// Only attempt to garbage collect lfs meta objects older than a week as the order of git lfs upload | ||||
| 		// and git object upload is not necessarily guaranteed. It's possible to imagine a situation whereby | ||||
| 		// an LFS object is uploaded but the git branch is not uploaded immediately, or there are some rapid | ||||
| 		// changes in new branches that might lead to lfs objects becoming temporarily unassociated with git | ||||
| 		// objects. | ||||
| 		// | ||||
| 		// It is likely that a week is potentially excessive but it should definitely be enough that any | ||||
| 		// unassociated LFS object is genuinely unassociated. | ||||
| 		OlderThan: 24 * time.Hour * 7, | ||||
|  | ||||
| 		// Only GC things that haven't been looked at in the past 3 days | ||||
| 		LastUpdatedMoreThanAgo:   24 * time.Hour * 3, | ||||
| 		NumberToCheckPerRepo:     100, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user