|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- package cloudbrain
-
- import (
- "io/ioutil"
- "os"
- "sort"
- "time"
-
- "code.gitea.io/gitea/models"
- "code.gitea.io/gitea/modules/log"
- "code.gitea.io/gitea/modules/setting"
- "code.gitea.io/gitea/modules/storage"
- )
-
- func ClearCloudbrainResultSpace() {
- log.Info("clear cloudbrain one result space begin.")
- if !setting.ClearStrategy.Enabled{
- return
- }
-
- tasks, err := models.GetCloudBrainOneStoppedNotDebugJobDaysAgo(setting.ClearStrategy.ResultSaveDays, setting.ClearStrategy.BatchSize)
- if err != nil {
- log.Warn("Failed to get cloudbrain, clear result failed.", err)
- return
- }
- debugTasks, err := models.GetCloudBrainOneStoppedDebugJobDaysAgo(setting.ClearStrategy.ResultSaveDays, setting.ClearStrategy.DebugJobSize)
- if err != nil {
- log.Warn("Failed to get debug cloudbrain.", err)
-
- }
- tasks=append(tasks,debugTasks...)
-
- if err != nil {
- log.Warn("Failed to get cloudbrain, clear result failed.", err)
- return
- }
- var ids []int64
- for _, task := range tasks {
- err := DeleteCloudbrainOneJobStorage(task.JobName)
- if err == nil {
- log.Info("clear job in cloudbrain table:"+task.JobName)
- ids = append(ids, task.ID)
- }
- }
-
- err = models.UpdateCloudBrainRecordsCleared(ids)
- if err != nil {
- log.Warn("Failed to set cloudbrain cleared status", err)
- }
- //如果云脑表处理完了,通过遍历minio对象处理历史垃圾数据,如果存在的话
- if len(tasks) < setting.ClearStrategy.BatchSize+setting.ClearStrategy.DebugJobSize {
- clearLocalHistoryTrashFile()
- clearMinioHistoryTrashFile()
-
- }
- log.Info("clear cloudbrain one result space end.")
-
- }
-
- func clearMinioHistoryTrashFile() {
- JobRealPrefix := setting.Attachment.Minio.RealPath + setting.Attachment.Minio.Bucket + "/" + setting.CBCodePathPrefix
-
- miniofiles, err := ioutil.ReadDir(JobRealPrefix)
-
- processCount := 0
- if err != nil {
- log.Warn("Can not browser minio job path.")
- } else {
- SortModTimeAscend(miniofiles)
- for _, file := range miniofiles {
-
- if file.Name()!="" && file.ModTime().Before(time.Now().AddDate(0, 0, -setting.ClearStrategy.TrashSaveDays)) {
-
- has,err:=models.IsCloudbrainExistByJobName(file.Name())
- if err==nil && !has {
- dirPath := setting.CBCodePathPrefix + file.Name() + "/"
- log.Info("clear job in minio trash:" + file.Name())
- storage.Attachments.DeleteDir(dirPath)
- processCount++
- }
- if processCount == setting.ClearStrategy.BatchSize {
- break
- }
- } else {
- break
- }
-
- }
-
- }
- }
-
- func clearLocalHistoryTrashFile() {
- files, err := ioutil.ReadDir(setting.JobPath)
- processCount := 0
- if err != nil {
- log.Warn("Can not browser local job path.")
- } else {
- SortModTimeAscend(files)
- for _, file := range files {
- //清理n天前的历史垃圾数据,清理job目录
- if file.Name()!="" && file.ModTime().Before(time.Now().AddDate(0, 0, -setting.ClearStrategy.TrashSaveDays)) {
- has,err:=models.IsCloudbrainExistByJobName(file.Name())
- if err==nil && !has{
- os.RemoveAll(setting.JobPath + file.Name())
- log.Info("clear job in local trash:"+file.Name())
- processCount++
- }
- if processCount == setting.ClearStrategy.BatchSize {
- break
- }
- } else {
- break
- }
-
- }
-
- }
-
- }
-
- func SortModTimeAscend(files []os.FileInfo) {
- sort.Slice(files, func(i, j int) bool {
- return files[i].ModTime().Before(files[j].ModTime())
- })
- }
-
- func DeleteCloudbrainOneJobStorage(jobName string) error {
-
- if jobName==""{
- return nil
- }
- //delete local
- localJobPath := setting.JobPath + jobName
- err := os.RemoveAll(localJobPath)
- if err != nil {
- log.Error("RemoveAll(%s) failed:%v", localJobPath, err)
- }
-
- dirPath := setting.CBCodePathPrefix + jobName + "/"
- err1 := storage.Attachments.DeleteDir(dirPath)
-
- if err1 != nil {
- log.Error("DeleteDir(%s) failed:%v", localJobPath, err)
- }
- if err == nil {
- err = err1
- }
-
- return err
- }
|