Browse Source

Delete cloudbrain task when deleting project

tags/v1.22.8.2^2
liuzx 3 years ago
parent
commit
d6b3b37abe
5 changed files with 49 additions and 25 deletions
  1. +6
    -0
      models/cloudbrain.go
  2. +0
    -22
      models/repo.go
  3. +41
    -2
      routers/repo/cloudbrain.go
  4. +1
    -1
      routers/repo/grampus.go
  5. +1
    -0
      routers/repo/setting.go

+ 6
- 0
models/cloudbrain.go View File

@@ -1767,6 +1767,12 @@ func GetCloudbrainsNeededStopByRepoID(repoID int64) ([]*Cloudbrain, error) {
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) {
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)


+ 0
- 22
models/repo.go View File

@@ -1788,8 +1788,6 @@ func DeleteRepository(doer *User, uid, repoID int64) error {

// Delete dataset attachment record and remove related files
deleteDatasetAttachmentByRepoId(sess, repoID)
// Delete cloudbrain task record
deleteCloudbrainByRepoId(sess, repoID)
if err = deleteBeans(sess,
&Access{RepoID: repo.ID},
&Action{RepoID: repo.ID},
@@ -1989,26 +1987,6 @@ func deleteDatasetAttachmentByRepoId(sess *xorm.Session, repoId int64) error {
return err
}

func deleteCloudbrainByRepoId(sess *xorm.Session, repoId int64) error {
cloudbrains := make([]*Cloudbrain, 0)
if err := sess.
Where("repo_id = ?", repoId).
Find(&cloudbrains); err != nil {
return err
}
if len(cloudbrains) == 0 {
return nil
}
for _, cloudbrain := range cloudbrains {
err := DeleteJob(cloudbrain)
if err != nil {
return err
}
}
return nil

}

// GetRepositoryByOwnerAndName returns the repository by given ownername and reponame.
func GetRepositoryByOwnerAndName(ownerName, repoName string) (*Repository, error) {
return getRepositoryByOwnerAndName(x, ownerName, repoName)


+ 41
- 2
routers/repo/cloudbrain.go View File

@@ -1245,6 +1245,15 @@ func StopJobsByRepoID(repoID int64) {
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 || taskInfo.Type == models.TypeC2Net {
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) {
for i := 0; i < attempts; i++ {
if i > 0 {
@@ -1347,7 +1386,7 @@ func deleteCloudbrainJob(ctx *context.Context) error {
return err
}

deleteJobStorage(task.JobName, models.TypeCloudBrainOne)
DeleteCloudbrainJobStorage(task.JobName, models.TypeCloudBrainOne)

return nil
}
@@ -1734,7 +1773,7 @@ func mkPathAndReadMeFile(path string, text string) error {
return nil
}

func deleteJobStorage(jobName string, cloudbrainType int) error {
func DeleteCloudbrainJobStorage(jobName string, cloudbrainType int) error {
//delete local
localJobPath := setting.JobPath + jobName
err := os.RemoveAll(localJobPath)


+ 1
- 1
routers/repo/grampus.go View File

@@ -637,7 +637,7 @@ func deleteGrampusJob(ctx *context.Context) error {
if task.ComputeResource == models.NPUResource {
storageType = models.TypeCloudBrainTwo
}
deleteJobStorage(task.JobName, storageType)
DeleteCloudbrainJobStorage(task.JobName, storageType)

return nil
}


+ 1
- 0
routers/repo/setting.go View File

@@ -495,6 +495,7 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) {
}
log.Trace("Repository deleted: %s/%s", ctx.Repo.Owner.Name, repo.Name)
go StopJobsByRepoID(repo.ID)
DeleteJobsByRepoID(repo.ID)

ctx.Flash.Success(ctx.Tr("repo.settings.deletion_success"))
ctx.Redirect(ctx.Repo.Owner.DashboardLink())


Loading…
Cancel
Save