@@ -27,6 +27,7 @@ func (t *SchedulerCronManager) CheckCronExpression(cronExpr string) error {
2727 return errors .New ("cron expression is empty" )
2828 }
2929 if _ , err := cron .ParseStandard (cronExpr ); err != nil {
30+ logrus .Errorf ("Failed to parse cron expression: %v" , err )
3031 return errors .New ("invalid cron expression: " + err .Error ())
3132 }
3233 return nil
@@ -41,22 +42,44 @@ func (t *SchedulerCronManager) AddCronTask(taskInfo *structure.TaskInfo) error {
4142 return errors .New ("the property `CronExpr` of taskInfo is empty" )
4243 }
4344
45+ // add to cron tasks
4446 t .cronTasks [taskInfo .ID ] = append (t .cronTasks [taskInfo .ID ], taskInfo )
4547 cronJob := cron .New ()
4648 _ , err := cronJob .AddFunc (taskInfo .CronExpr , func () {
4749 if taskInfo == nil {
4850 return
4951 }
50- if _ , err := t .queueHandler (taskInfo ); err != nil {
52+
53+ // TODO: CREATE a new task from the original task, using taskbl
54+ // copy a new taskInfo
55+ task , err := structure .TaskManager .CreateTask (taskInfo .SpaceName , taskInfo .Type , 0 )
56+ task .CreateType = structure .TaskCreateAsync
57+ task .GraphName = taskInfo .GraphName
58+ task .CreateUser = taskInfo .CreateUser
59+ task .Params = taskInfo .Params
60+ task .CronExpr = "" // clear cron expression for the new task
61+ task .Priority = taskInfo .Priority
62+ task .Preorders = taskInfo .Preorders
63+ task .Exclusive = taskInfo .Exclusive
64+ if err != nil {
65+ logrus .Errorf ("Failed to create task from cron job for task %d: %v" , taskInfo .ID , err )
66+ return
67+ }
68+ structure .TaskManager .AddTask (task )
69+ structure .TaskManager .SaveTask (task .ID )
70+ if _ , err := t .queueHandler (task ); err != nil {
5171 logrus .Errorf ("Failed to queue task %d in cron job: %v" , taskInfo .ID , err )
5272 return
5373 }
74+ logrus .Infof ("Successfully queued task %d from cron job" , task .ID )
5475 })
5576 if err != nil {
5677 logrus .Errorf ("Failed to add cron job for task %d: %v" , taskInfo .ID , err )
5778 return err
5879 }
5980 t .crons [taskInfo .ID ] = append (t .crons [taskInfo .ID ], cronJob )
81+ cronJob .Start ()
82+ logrus .Infof ("Added cron task for task ID %d with expression %s" , taskInfo .ID , taskInfo .CronExpr )
6083 return nil
6184}
6285
@@ -73,3 +96,28 @@ func (t *SchedulerCronManager) DeleteTask(taskID int32) error {
7396 logrus .Infof ("Deleted cron task for task ID %d" , taskID )
7497 return nil
7598}
99+
100+ func (t * SchedulerCronManager ) DeleteTaskByGraph (spaceName , graphName string ) error {
101+ if spaceName == "" || graphName == "" {
102+ return errors .New ("the argument `spaceName` or `graphName` is empty" )
103+ }
104+
105+ var toDelete []int32
106+ for taskID , tasks := range t .cronTasks {
107+ for _ , task := range tasks {
108+ if task .SpaceName == spaceName && task .GraphName == graphName {
109+ toDelete = append (toDelete , taskID )
110+ break
111+ }
112+ }
113+ }
114+
115+ for _ , taskID := range toDelete {
116+ if err := t .DeleteTask (taskID ); err != nil {
117+ logrus .Errorf ("Failed to delete cron task for task ID %d: %v" , taskID , err )
118+ return err
119+ }
120+ }
121+ logrus .Infof ("Deleted cron tasks for space %s and graph %s" , spaceName , graphName )
122+ return nil
123+ }
0 commit comments