github.com/ferranbt/nomad@v0.9.3-0.20190607002617-85c449b7667c/plugins/drivers/task_handle.go (about)

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