diff --git a/internal/logic/schedule/schedulecreatetasklogic.go b/internal/logic/schedule/schedulecreatetasklogic.go index 4df2d910..2b52eac3 100644 --- a/internal/logic/schedule/schedulecreatetasklogic.go +++ b/internal/logic/schedule/schedulecreatetasklogic.go @@ -10,7 +10,7 @@ import ( "gitlink.org.cn/JointCloud/pcm-coordinator/internal/storeLink" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types" - "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils" + "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/constants" "gopkg.in/yaml.v3" "slices" "strings" @@ -49,6 +49,11 @@ func (l *ScheduleCreateTaskLogic) ScheduleCreateTask(req *types.CreateTaskReq) ( return nil, err } + taskName, err := l.handleDuplicateTaskName(req.Name) + if err != nil { + return nil, err + } + var clusters []string if len(req.JobResources.Clusters) == 1 { clusters = append(clusters, req.JobResources.Clusters[0].ClusterID) @@ -61,7 +66,7 @@ func (l *ScheduleCreateTaskLogic) ScheduleCreateTask(req *types.CreateTaskReq) ( ClusterId: req.JobResources.Clusters[0].ClusterID, }}, req.JobResources.Clusters) - taskId, err := l.createTask("SCHEDULE_TASK_"+utils.RandomString(TRAINNING_TASK_SUFFIX_LEN), req.JobResources.ScheduleStrategy, assignedClusters, req.Token) + taskId, err := l.createTask(taskName, req.Description, req.JobResources.ScheduleStrategy, assignedClusters, req.Token) if err != nil { return nil, err } @@ -87,7 +92,7 @@ func (l *ScheduleCreateTaskLogic) ScheduleCreateTask(req *types.CreateTaskReq) ( if err != nil { return nil, err } - taskId, err := l.createTask("SCHEDULE_TASK_"+utils.RandomString(TRAINNING_TASK_SUFFIX_LEN), req.JobResources.ScheduleStrategy, assignedClusters, req.Token) + taskId, err := l.createTask(taskName, req.Description, req.JobResources.ScheduleStrategy, assignedClusters, req.Token) if err != nil { return nil, err } @@ -120,6 +125,19 @@ func validateJobResources(resources types.JobResources) error { return nil } +func (l *ScheduleCreateTaskLogic) handleDuplicateTaskName(name string) (string, error) { + exist, err := l.svcCtx.Scheduler.AiStorages.DoesTaskNameExist(name) + if err != nil { + return "", err + } + + if exist { + return name + "_" + time.Now().Format(constants.Layout_Time_Suffix), nil + } + + return name, nil +} + func (l *ScheduleCreateTaskLogic) getAssignedClustersByStrategy(resources *types.JobResources, dataDistribute *types.DataDistribute) ([]*strategy.AssignedCluster, error) { var assignedClusters []*strategy.AssignedCluster switch resources.ScheduleStrategy { @@ -210,7 +228,7 @@ func copyParams(clusters []*strategy.AssignedCluster, clusterInfos []*types.JobC return result } -func (l *ScheduleCreateTaskLogic) createTask(taskName string, strategyName string, clusters []*strategy.AssignedCluster, token string) (int64, error) { +func (l *ScheduleCreateTaskLogic) createTask(taskName string, desc string, strategyName string, clusters []*strategy.AssignedCluster, token string) (int64, error) { var synergyStatus int64 if len(clusters) > 1 { synergyStatus = 1 @@ -221,7 +239,7 @@ func (l *ScheduleCreateTaskLogic) createTask(taskName string, strategyName strin fmt.Printf("Error while Marshaling. %v", err) } - taskId, err := l.svcCtx.Scheduler.CreateTask(taskName, synergyStatus, strategyName, string(y), token, &l.svcCtx.Config) + taskId, err := l.svcCtx.Scheduler.CreateTask(taskName, desc, synergyStatus, strategyName, string(y), token, &l.svcCtx.Config) if err != nil { return 0, err } diff --git a/internal/logic/schedule/schedulesubmitlogic.go b/internal/logic/schedule/schedulesubmitlogic.go index 0e527428..2a59a7f7 100644 --- a/internal/logic/schedule/schedulesubmitlogic.go +++ b/internal/logic/schedule/schedulesubmitlogic.go @@ -65,7 +65,7 @@ func (l *ScheduleSubmitLogic) ScheduleSubmit(req *types.ScheduleReq) (resp *type synergystatus = 1 } - taskId, err := l.svcCtx.Scheduler.CreateTask(req.AiOption.TaskName, synergystatus, req.AiOption.Strategy, "", req.Token, &l.svcCtx.Config) + taskId, err := l.svcCtx.Scheduler.CreateTask(req.AiOption.TaskName, "", synergystatus, req.AiOption.Strategy, "", req.Token, &l.svcCtx.Config) if err != nil { return nil, err } diff --git a/internal/scheduler/database/aiStorage.go b/internal/scheduler/database/aiStorage.go index eafefb6d..787c3ffb 100644 --- a/internal/scheduler/database/aiStorage.go +++ b/internal/scheduler/database/aiStorage.go @@ -103,12 +103,23 @@ func (s *AiStorage) GetAiTaskListById(id int64) ([]*models.TaskAi, error) { return aiTaskList, nil } -func (s *AiStorage) SaveTask(name string, strategyCode int64, synergyStatus int64, aiType string, yaml string, saveToChain func(task models.Task, id int64) error) (int64, error) { +func (s *AiStorage) DoesTaskNameExist(name string) (bool, error) { + var total int32 + tx := s.DbEngin.Raw("select count(*) from task where `name` = ?", name).Scan(&total) + if tx.Error != nil { + logx.Errorf(tx.Error.Error()) + return false, tx.Error + } + return total > 0, nil +} + +func (s *AiStorage) SaveTask(name string, desc string, strategyCode int64, synergyStatus int64, aiType string, yaml string, saveToChain func(task models.Task, id int64) error) (int64, error) { startTime := time.Now() + // 构建主任务结构体 taskModel := models.Task{ Status: constants.Saved, - Description: "ai task", + Description: desc, Name: name, SynergyStatus: synergyStatus, Strategy: strategyCode, diff --git a/internal/scheduler/scheduler.go b/internal/scheduler/scheduler.go index 48388e4e..4d9afc89 100644 --- a/internal/scheduler/scheduler.go +++ b/internal/scheduler/scheduler.go @@ -188,13 +188,13 @@ func (s *Scheduler) SaveToDb() error { return nil } -func (s *Scheduler) CreateTask(taskName string, synergyCode int64, strategyName string, yaml string, token string, config *config.Config) (int64, error) { +func (s *Scheduler) CreateTask(taskName string, desc string, synergyCode int64, strategyName string, yaml string, token string, config *config.Config) (int64, error) { strategyCode, err := s.AiStorages.GetStrategyCode(strategyName) if err != nil { return 0, err } - id, err := s.AiStorages.SaveTask(taskName, strategyCode, synergyCode, "10", yaml, blockchain.SaveToChain(token, config)) + id, err := s.AiStorages.SaveTask(taskName, desc, strategyCode, synergyCode, "10", yaml, blockchain.SaveToChain(token, config)) if err != nil { return 0, err } diff --git a/internal/scheduler/schedulers/aiScheduler.go b/internal/scheduler/schedulers/aiScheduler.go index 6aea740a..c17fb255 100644 --- a/internal/scheduler/schedulers/aiScheduler.go +++ b/internal/scheduler/schedulers/aiScheduler.go @@ -229,7 +229,7 @@ func (as *AiScheduler) AssignTask(clusters []*strategy.AssignedCluster, mode int synergystatus = 1 } - taskId, err := as.CreateTask(as.option.TaskName, synergystatus, as.option.StrategyName, "", "", nil) + taskId, err := as.CreateTask(as.option.TaskName, "", synergystatus, as.option.StrategyName, "", "", nil) if err != nil { return nil, err } diff --git a/internal/scheduler/service/inference/imageInference/imageInference.go b/internal/scheduler/service/inference/imageInference/imageInference.go index 9881d91f..891ea225 100644 --- a/internal/scheduler/service/inference/imageInference/imageInference.go +++ b/internal/scheduler/service/inference/imageInference/imageInference.go @@ -126,7 +126,7 @@ func (i *ImageInference) saveTask() (int64, error) { return 0, err } - id, err := i.storage.SaveTask(i.opt.TaskName, strategyCode, synergystatus, i.inference.GetAiType(), "", nil) + id, err := i.storage.SaveTask(i.opt.TaskName, "", strategyCode, synergystatus, i.inference.GetAiType(), "", nil) if err != nil { return 0, err } diff --git a/internal/scheduler/service/inference/textInference/textInference.go b/internal/scheduler/service/inference/textInference/textInference.go index aa462d86..aebfa6e5 100644 --- a/internal/scheduler/service/inference/textInference/textInference.go +++ b/internal/scheduler/service/inference/textInference/textInference.go @@ -70,7 +70,7 @@ func (ti *TextInference) saveTask() (int64, error) { var synergystatus int64 var strategyCode int64 - id, err := ti.storage.SaveTask(ti.opt.TaskName, strategyCode, synergystatus, ti.inference.GetAiType(), "", nil) + id, err := ti.storage.SaveTask(ti.opt.TaskName, "", strategyCode, synergystatus, ti.inference.GetAiType(), "", nil) if err != nil { return 0, err }