summaryrefslogtreecommitdiff
path: root/worker.go
diff options
context:
space:
mode:
Diffstat (limited to 'worker.go')
-rw-r--r--worker.go22
1 files changed, 14 insertions, 8 deletions
diff --git a/worker.go b/worker.go
index c52960b2..88fd1b9b 100644
--- a/worker.go
+++ b/worker.go
@@ -127,7 +127,7 @@ func (w *Worker) Wait() error {
return &exec.ExitError{ProcessState: w.endState}
}
-// Stop sends soft termination command to the worker and waits for process completion.
+// Detach sends soft termination command to the worker and waits for process completion.
func (w *Worker) Stop() error {
select {
case <-w.waitDone:
@@ -137,7 +137,7 @@ func (w *Worker) Stop() error {
defer w.mu.Unlock()
w.state.set(StateStopping)
- err := sendPayload(w.rl, &stopCommand{Stop: true})
+ err := sendControl(w.rl, &stopCommand{Stop: true})
<-w.waitDone
return err
@@ -164,34 +164,39 @@ func (w *Worker) Kill() error {
// errors. Method might return JobError indicating issue with payload.
func (w *Worker) Exec(rqs *Payload) (rsp *Payload, err error) {
w.mu.Lock()
- defer w.mu.Unlock()
if rqs == nil {
+ w.mu.Unlock()
return nil, fmt.Errorf("payload can not be empty")
}
if w.state.Value() != StateReady {
+ w.mu.Unlock()
return nil, fmt.Errorf("worker is not ready (%s)", w.state.String())
}
w.state.set(StateWorking)
- defer w.state.registerExec()
rsp, err = w.execPayload(rqs)
if err != nil {
if _, ok := err.(JobError); !ok {
w.state.set(StateErrored)
+ w.state.registerExec()
+ w.mu.Unlock()
return nil, err
}
}
- // todo: attach when payload is complete
- // todo: new status
-
w.state.set(StateReady)
+ w.state.registerExec()
+ w.mu.Unlock()
return rsp, err
}
+func (w *Worker) markInvalid() {
+ w.state.set(StateInvalid)
+}
+
func (w *Worker) start() error {
if err := w.cmd.Start(); err != nil {
close(w.waitDone)
@@ -220,7 +225,8 @@ func (w *Worker) start() error {
}
func (w *Worker) execPayload(rqs *Payload) (rsp *Payload, err error) {
- if err := sendPayload(w.rl, rqs.Context); err != nil {
+ // two things
+ if err := sendControl(w.rl, rqs.Context); err != nil {
return nil, errors.Wrap(err, "header error")
}