ef8d284352
This commit is a significant change. TR.Run is now always executed, even for terminal allocations. This was changed to allow TR.Run to cleanup (run stop hooks) if a handle was recovered. This is intended to handle the case of Nomad receiving a DesiredStatus=Stop allocation update, persisting it, but crashing before stopping AR/TR. The commit also renames task runner hook data as it was very easy to accidently set state on Requests instead of Responses using the old field names.
66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
package interfaces
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/hashicorp/nomad/client/allocrunner/state"
|
|
"github.com/hashicorp/nomad/nomad/structs"
|
|
)
|
|
|
|
// RunnnerHook is a lifecycle hook into the life cycle of an allocation runner.
|
|
type RunnerHook interface {
|
|
Name() string
|
|
}
|
|
|
|
// RunnerPrerunHooks are executed before calling TaskRunner.Run for
|
|
// non-terminal allocations. Terminal allocations do *not* call prerun.
|
|
type RunnerPrerunHook interface {
|
|
RunnerHook
|
|
Prerun(context.Context) error
|
|
}
|
|
|
|
// RunnerPostrunHooks are executed after calling TaskRunner.Run, even for
|
|
// terminal allocations. Therefore Postrun hooks must be safe to call without
|
|
// first calling Prerun hooks.
|
|
type RunnerPostrunHook interface {
|
|
RunnerHook
|
|
Postrun() error
|
|
}
|
|
|
|
// RunnerDestroyHooks are executed after AllocRunner.Run has exited and must
|
|
// make a best effort cleanup allocation resources. Destroy hooks must be safe
|
|
// to call without first calling Prerun.
|
|
type RunnerDestroyHook interface {
|
|
RunnerHook
|
|
Destroy() error
|
|
}
|
|
|
|
// RunnerUpdateHooks are executed when an allocation update is received from
|
|
// the server. Update is called concurrently with AllocRunner execution and
|
|
// therefore must be safe for concurrent access with other hook methods. Calls
|
|
// to Update are serialized so allocaiton updates will always be processed in
|
|
// order.
|
|
type RunnerUpdateHook interface {
|
|
RunnerHook
|
|
Update(*RunnerUpdateRequest) error
|
|
}
|
|
|
|
type RunnerUpdateRequest struct {
|
|
Alloc *structs.Allocation
|
|
}
|
|
|
|
// XXX Not sure yet
|
|
type RunnerHookFactory func(target HookTarget) (RunnerHook, error)
|
|
type HookTarget interface {
|
|
// State retrieves a copy of the target alloc runners state.
|
|
State() *state.State
|
|
}
|
|
|
|
// ShutdownHook may be implemented by AllocRunner or TaskRunner hooks and will
|
|
// be called when the agent process is being shutdown gracefully.
|
|
type ShutdownHook interface {
|
|
RunnerHook
|
|
|
|
Shutdown()
|
|
}
|