forked from hashicorp/nomad
-
Notifications
You must be signed in to change notification settings - Fork 0
/
task_handle.go
47 lines (39 loc) · 1.26 KB
/
task_handle.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package drivers
import (
"github.com/hashicorp/nomad/plugins/base"
)
// TaskHandle is the state shared between a driver and the client.
// It is returned to the client after starting the task and used
// for recovery of tasks during a driver restart.
type TaskHandle struct {
// Version is set by the driver an allows it to handle upgrading from
// an older DriverState struct. Prior to 0.9 the only state stored for
// driver was the reattach config for the executor. To allow upgrading to
// 0.9, Version 0 is handled as if it is the json encoded reattach config.
Version int
Config *TaskConfig
State TaskState
DriverState []byte
}
func NewTaskHandle(version int) *TaskHandle {
return &TaskHandle{Version: version}
}
func (h *TaskHandle) SetDriverState(v interface{}) error {
h.DriverState = []byte{}
return base.MsgPackEncode(&h.DriverState, v)
}
func (h *TaskHandle) GetDriverState(v interface{}) error {
return base.MsgPackDecode(h.DriverState, v)
}
func (h *TaskHandle) Copy() *TaskHandle {
if h == nil {
return nil
}
handle := new(TaskHandle)
handle.Version = h.Version
handle.Config = h.Config.Copy()
handle.State = h.State
handle.DriverState = make([]byte, len(h.DriverState))
copy(handle.DriverState, h.DriverState)
return handle
}