| 786 | } |
| 787 | |
| 788 | func (d *Driver) SignalTask(taskID string, signal string) error { |
| 789 | d.logger.Debug("SignalTask", "taskID", taskID, "signal", signal) |
| 790 | // SignalTask: driver=dtle @module=dtle pid=72685 signal=SIGKILL taskID=37c60a2d-b7c0-37ff-787b-fdb98e921e92/Src/51b71e84 |
| 791 | |
| 792 | h, ok := d.tasks.Get(taskID) |
| 793 | if !ok { |
| 794 | return drivers.ErrTaskNotFound |
| 795 | } |
| 796 | |
| 797 | err := d.eventer.EmitEvent(&drivers.TaskEvent{ |
| 798 | TaskID: taskID, |
| 799 | TaskName: h.taskConfig.Name, |
| 800 | AllocID: h.taskConfig.AllocID, |
| 801 | Timestamp: time.Now(), |
| 802 | Message: fmt.Sprintf("Task receive signal %v", signal), |
| 803 | Annotations: nil, |
| 804 | Err: nil, |
| 805 | }) |
| 806 | if err != nil { |
| 807 | d.logger.Error("error at sending task event", "err", err, "signal", signal) |
| 808 | } |
| 809 | //if h.exitResult == nil { |
| 810 | // return nil |
| 811 | //} |
| 812 | |
| 813 | switch signal { |
| 814 | case "stats": |
| 815 | if h.stats != nil { |
| 816 | bs, err := json.Marshal(h.stats) |
| 817 | if err != nil { |
| 818 | return err |
| 819 | } |
| 820 | return errors.New(string(bs)) |
| 821 | } |
| 822 | case "finish": |
| 823 | if h.runner == nil { |
| 824 | return fmt.Errorf("h.runner is nil") |
| 825 | } |
| 826 | return h.runner.Finish1() |
| 827 | case "pause": |
| 828 | d.logger.Info("pause a task", "taskID", taskID) |
| 829 | if h.runner == nil { |
| 830 | return fmt.Errorf("h.runner is nil") |
| 831 | } |
| 832 | err := h.runner.Shutdown() |
| 833 | if err != nil { |
| 834 | d.logger.Error("error when pausing a task", "taskID", taskID, "err", err) |
| 835 | } |
| 836 | // Keep old runner for stats() |
| 837 | //h.runner = nil |
| 838 | return nil |
| 839 | case "resume": |
| 840 | d.logger.Info("resume a task", "taskID", taskID) |
| 841 | err := h.resumeTask(d) |
| 842 | if err != nil { |
| 843 | d.logger.Error("error when resuming a task", "taskID", taskID, "err", err) |
| 844 | h.onError(err) |
| 845 | } |