Documentation
¶
Index ¶
- Variables
- type Manager
- func (m *Manager) IsPausing() bool
- func (m *Manager) Pause(ctx context.Context) error
- func (m *Manager) PauseWait() <-chan struct{}
- func (m *Manager) Resume(ctx context.Context) error
- func (m *Manager) Run(ctx context.Context) error
- func (m *Manager) SetPauseResumer(pr PauseResumer) error
- func (m *Manager) SetStartupFunc(fn func(context.Context) error) error
- func (m *Manager) Shutdown(ctx context.Context) error
- func (m *Manager) Status() Status
- func (m *Manager) WaitForStartup(ctx context.Context) error
- type Pausable
- type PauseResumer
- type Status
Constants ¶
This section is empty.
Variables ¶
var ( ErrAlreadyStarted = errors.New("already started") ErrShutdown = errors.New("shutting down") ErrNotStarted = errors.New("not started") ErrPauseUnsupported = errors.New("pause not supported or unset") )
Static errors
Functions ¶
This section is empty.
Types ¶
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager is used to wrap lifecycle methods with strong guarantees.
func NewManager ¶
NewManager will construct a new manager wrapping the provided run and shutdown funcs.
func (*Manager) IsPausing ¶
IsPausing will return true if the manager is in a state of pause, or is currently fulfilling a Pause request.
func (*Manager) Pause ¶
Pause will bein a pause opperation. SetPauseResumer must have been called or ErrPauseUnsupported is returned.
Pause is atomic and guarantees a paused state if nil is returned or normal operation otherwise.
func (*Manager) PauseWait ¶
func (m *Manager) PauseWait() <-chan struct{}
PauseWait will return a channel that blocks until a pause operation begins.
func (*Manager) Resume ¶
Resume will always result in normal operation (unless Shutdown was called).
If the context deadline is reached, "graceful" operations may fail, but will always result in a Ready state.
func (*Manager) SetPauseResumer ¶
func (m *Manager) SetPauseResumer(pr PauseResumer) error
SetPauseResumer will set the PauseResumer used by Pause and Resume methods.
func (*Manager) SetStartupFunc ¶
SetStartupFunc can be used to optionally specify a startup function that will be called before calling run.
type Pausable ¶
type Pausable interface {
IsPausing() bool
// PauseWait will block until a pause operation begins.
//
// It should only be used once, it will not block again
// once resume is called.
PauseWait() <-chan struct{}
}
Pausable is able to indicate if a pause operation is on-going.
It is used in cases to initiate a graceful/safe abort of long-running operations when IsPausing returns true.
type PauseResumer ¶
type PauseResumer interface {
// Pause should result in pausing all operations if nil is returned.
//
// If a pause cannot complete within the context deadline,
// the context error should be returned, and normal operation should
// resume, as if pause was never called.
Pause(context.Context) error
// Resume should always result in normal operation.
//
// Context can be used for control of graceful operations,
// but Resume should not return until normal operation is restored.
//
// Operations that are required for resuming, should use a background context
// internally (possibly linking any trace spans).
Resume(context.Context) error
}
A PauseResumer can be atomically paused and resumed.
func MultiPauseResume ¶
func MultiPauseResume(pr ...PauseResumer) PauseResumer
MultiPauseResume will join multiple PauseResumers where all will be paused, or none.
Any that pause successfully, when another fails, will have Resume called.
func PauseResumerFunc ¶
func PauseResumerFunc(pause, resume func(context.Context) error) PauseResumer
PauseResumerFunc is a convenience method that takes a pause and resume func and returns a PauseResumer.