Reviewed-on: https://git.openi.org.cn/OpenI/aiforge/pulls/2750 Reviewed-by: ychao_1983 <ychao_1983@sina.com>tags/v1.22.8.2^2
| @@ -1767,6 +1767,12 @@ func GetCloudbrainsNeededStopByRepoID(repoID int64) ([]*Cloudbrain, error) { | |||||
| return cloudBrains, err | return cloudBrains, err | ||||
| } | } | ||||
| func GetCloudbrainsNeededDeleteByRepoID(repoID int64) ([]*Cloudbrain, error) { | |||||
| cloudBrains := make([]*Cloudbrain, 0) | |||||
| err := x.Where("repo_id=?", repoID).Find(&cloudBrains) | |||||
| return cloudBrains, err | |||||
| } | |||||
| func GetCloudbrainsByDisplayJobName(repoID int64, jobType string, displayJobName string) ([]*Cloudbrain, error) { | func GetCloudbrainsByDisplayJobName(repoID int64, jobType string, displayJobName string) ([]*Cloudbrain, error) { | ||||
| cloudBrains := make([]*Cloudbrain, 0) | cloudBrains := make([]*Cloudbrain, 0) | ||||
| err := x.Cols("job_id", "job_name", "repo_id", "user_id", "job_type", "display_job_name").Where("repo_id=? AND job_type =? AND lower(display_job_name) = lower(?)", repoID, jobType, displayJobName).Find(&cloudBrains) | err := x.Cols("job_id", "job_name", "repo_id", "user_id", "job_type", "display_job_name").Where("repo_id=? AND job_type =? AND lower(display_job_name) = lower(?)", repoID, jobType, displayJobName).Find(&cloudBrains) | ||||
| @@ -1788,7 +1788,6 @@ func DeleteRepository(doer *User, uid, repoID int64) error { | |||||
| // Delete dataset attachment record and remove related files | // Delete dataset attachment record and remove related files | ||||
| deleteDatasetAttachmentByRepoId(sess, repoID) | deleteDatasetAttachmentByRepoId(sess, repoID) | ||||
| if err = deleteBeans(sess, | if err = deleteBeans(sess, | ||||
| &Access{RepoID: repo.ID}, | &Access{RepoID: repo.ID}, | ||||
| &Action{RepoID: repo.ID}, | &Action{RepoID: repo.ID}, | ||||
| @@ -1245,6 +1245,15 @@ func StopJobsByRepoID(repoID int64) { | |||||
| StopJobs(cloudBrains) | StopJobs(cloudBrains) | ||||
| } | } | ||||
| func DeleteJobsByRepoID(repoID int64) { | |||||
| cloudBrains, err := models.GetCloudbrainsNeededDeleteByRepoID(repoID) | |||||
| if err != nil { | |||||
| log.Warn("Failed to get cloudBrain info", err) | |||||
| return | |||||
| } | |||||
| DeleteJobs(cloudBrains) | |||||
| } | |||||
| /** | /** | ||||
| */ | */ | ||||
| @@ -1280,6 +1289,36 @@ func StopJobs(cloudBrains []*models.Cloudbrain) { | |||||
| } | } | ||||
| } | } | ||||
| func DeleteJobs(cloudBrains []*models.Cloudbrain) { | |||||
| for _, taskInfo := range cloudBrains { | |||||
| err := models.DeleteJob(taskInfo) | |||||
| if err != nil { | |||||
| log.Warn("Failed to DeleteJob:", err) | |||||
| return | |||||
| } | |||||
| if taskInfo.Type == models.TypeCloudBrainOne { | |||||
| cloudbrain.DelCloudBrainJob(taskInfo.JobName) | |||||
| DeleteCloudbrainJobStorage(taskInfo.JobName, models.TypeCloudBrainOne) | |||||
| } | |||||
| if taskInfo.Type == models.TypeCloudBrainTwo { | |||||
| if taskInfo.JobType == string(models.JobTypeTrain) || taskInfo.JobType == string(models.JobTypeInference) { | |||||
| modelarts.DelTrainJob(taskInfo.JobID) | |||||
| DeleteJobStorage(taskInfo.JobName) | |||||
| } | |||||
| if taskInfo.JobType == string(models.JobTypeDebug) { | |||||
| modelarts.DelNotebook2(taskInfo.JobID) | |||||
| } | |||||
| } | |||||
| if taskInfo.Type == models.TypeC2Net { | |||||
| if taskInfo.JobType == string(models.JobTypeTrain) { | |||||
| cloudbrain.DelCloudBrainJob(taskInfo.JobName) | |||||
| DeleteCloudbrainJobStorage(taskInfo.JobName, models.TypeCloudBrainOne) | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| func retry(attempts int, sleep time.Duration, f func() error) (err error) { | func retry(attempts int, sleep time.Duration, f func() error) (err error) { | ||||
| for i := 0; i < attempts; i++ { | for i := 0; i < attempts; i++ { | ||||
| if i > 0 { | if i > 0 { | ||||
| @@ -1347,7 +1386,7 @@ func deleteCloudbrainJob(ctx *context.Context) error { | |||||
| return err | return err | ||||
| } | } | ||||
| deleteJobStorage(task.JobName, models.TypeCloudBrainOne) | |||||
| DeleteCloudbrainJobStorage(task.JobName, models.TypeCloudBrainOne) | |||||
| return nil | return nil | ||||
| } | } | ||||
| @@ -1734,7 +1773,7 @@ func mkPathAndReadMeFile(path string, text string) error { | |||||
| return nil | return nil | ||||
| } | } | ||||
| func deleteJobStorage(jobName string, cloudbrainType int) error { | |||||
| func DeleteCloudbrainJobStorage(jobName string, cloudbrainType int) error { | |||||
| //delete local | //delete local | ||||
| localJobPath := setting.JobPath + jobName | localJobPath := setting.JobPath + jobName | ||||
| err := os.RemoveAll(localJobPath) | err := os.RemoveAll(localJobPath) | ||||
| @@ -637,7 +637,7 @@ func deleteGrampusJob(ctx *context.Context) error { | |||||
| if task.ComputeResource == models.NPUResource { | if task.ComputeResource == models.NPUResource { | ||||
| storageType = models.TypeCloudBrainTwo | storageType = models.TypeCloudBrainTwo | ||||
| } | } | ||||
| deleteJobStorage(task.JobName, storageType) | |||||
| DeleteCloudbrainJobStorage(task.JobName, storageType) | |||||
| return nil | return nil | ||||
| } | } | ||||
| @@ -504,7 +504,8 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) { | |||||
| return | return | ||||
| } | } | ||||
| log.Trace("Repository deleted: %s/%s", ctx.Repo.Owner.Name, repo.Name) | log.Trace("Repository deleted: %s/%s", ctx.Repo.Owner.Name, repo.Name) | ||||
| go StopJobsByRepoID(repo.ID) | |||||
| // go StopJobsByRepoID(repo.ID) | |||||
| go DeleteJobsByRepoID(repo.ID) | |||||
| ctx.Flash.Success(ctx.Tr("repo.settings.deletion_success")) | ctx.Flash.Success(ctx.Tr("repo.settings.deletion_success")) | ||||
| ctx.Redirect(ctx.Repo.Owner.DashboardLink()) | ctx.Redirect(ctx.Repo.Owner.DashboardLink()) | ||||