From 6c85bacd742946d02c2f7d4d68fd7da8f94bc9a3 Mon Sep 17 00:00:00 2001 From: chenyifan01 Date: Wed, 31 Aug 2022 10:57:02 +0800 Subject: [PATCH] #1249 update --- models/cloudbrain_spec.go | 2 ++ modules/notification/reward/point.go | 2 +- routers/repo/cloudbrain.go | 12 ++++++++++-- routers/routes/routes.go | 2 ++ services/reward/cloudbrain_deduct.go | 15 +++++++++++++++ 5 files changed, 30 insertions(+), 3 deletions(-) diff --git a/models/cloudbrain_spec.go b/models/cloudbrain_spec.go index 9033e6bfb..a14e3f886 100644 --- a/models/cloudbrain_spec.go +++ b/models/cloudbrain_spec.go @@ -72,6 +72,8 @@ func NewCloudBrainSpec(cloudbrainId int64, s Specification) CloudbrainSpec { } } +var StatusChangeChan = make(chan *Cloudbrain, 50) + func InsertCloudbrainSpec(c CloudbrainSpec) (int64, error) { return x.Insert(&c) } diff --git a/modules/notification/reward/point.go b/modules/notification/reward/point.go index bcafc6928..b5e8ed6e1 100644 --- a/modules/notification/reward/point.go +++ b/modules/notification/reward/point.go @@ -22,6 +22,6 @@ func NewNotifier() base.Notifier { func (*pointNotifier) NotifyChangeCloudbrainStatus(cloudbrain *models.Cloudbrain, oldStatus string) { log.Info("pointNotifier NotifyChangeCloudbrainStatus cloudbrain.id=%d cloudbrain.status=%s oldStatus=%s", cloudbrain.ID, cloudbrain.Status, oldStatus) if cloudbrain.IsRunning() || cloudbrain.IsTerminal() { - //reward.DeductPoint4Cloudbrain(*cloudbrain, time.Now()) + models.StatusChangeChan <- cloudbrain } } diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index b19395768..c2dfa70cc 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -1204,7 +1204,7 @@ func StopJobs(cloudBrains []*models.Cloudbrain) { }) logErrorAndUpdateJobStatus(err, taskInfo) - } else { + } else if taskInfo.Type == models.TypeCloudBrainTwo { if taskInfo.JobType == string(models.JobTypeTrain) { err := retry(3, time.Second*30, func() error { _, err := modelarts.StopTrainJob(taskInfo.JobID, strconv.FormatInt(taskInfo.VersionID, 10)) @@ -1221,8 +1221,16 @@ func StopJobs(cloudBrains []*models.Cloudbrain) { }) logErrorAndUpdateJobStatus(err, taskInfo) } - } + } else if taskInfo.Type == models.TypeC2Net { + if taskInfo.JobType == string(models.JobTypeTrain) { + err := retry(3, time.Second*30, func() error { + _, err := grampus.StopJob(taskInfo.JobID) + return err + }) + logErrorAndUpdateJobStatus(err, taskInfo) + } + } } } diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 1cef6140c..d19a307e3 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -8,6 +8,7 @@ import ( "bytes" "code.gitea.io/gitea/routers/reward/point" "code.gitea.io/gitea/routers/task" + "code.gitea.io/gitea/services/reward" "encoding/gob" "net/http" "path" @@ -331,6 +332,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("/dashboard", routers.Dashboard) go routers.SocketManager.Run() go task.RunTask() + go reward.AcceptStatusChangeAction() m.Get("/action/notification", routers.ActionNotification) m.Get("/recommend/home", routers.RecommendHomeInfo) //m.Get("/recommend/org", routers.RecommendOrgFromPromote) diff --git a/services/reward/cloudbrain_deduct.go b/services/reward/cloudbrain_deduct.go index fed4e4dbc..f60c50aa1 100644 --- a/services/reward/cloudbrain_deduct.go +++ b/services/reward/cloudbrain_deduct.go @@ -15,6 +15,15 @@ var ( const RUN_CLOUDBRAIN_TASK_TITTLE = "运行云脑任务" +func AcceptStatusChangeAction() { + for { + select { + case task := <-models.StatusChangeChan: + DeductPoint4Cloudbrain(*task, time.Now()) + } + } +} + func StartAndGetCloudBrainPointDeductTask(task models.Cloudbrain) (*models.RewardPeriodicTask, error) { if !setting.CloudBrainPaySwitch { return nil, nil @@ -86,6 +95,12 @@ func StartCloudbrainPointDeductTask() { } func DeductPoint4Cloudbrain(t models.Cloudbrain, now time.Time) error { + defer func() { + if err := recover(); err != nil { + combinedErr := fmt.Errorf("%s\n%s", err, log.Stack(2)) + log.Error("PANIC:%v", combinedErr) + } + }() log.Debug("start to deduct point for cloudbrain[%d]", t.ID) if t.StartTime == 0 { log.Debug("cloudbrain[%d] task not start", t.ID)