Documentation ¶
Overview ¶
Package allocwatcher allows blocking until another allocation - whether running locally or remotely - completes and migrates the allocation directory if necessary.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NewAllocWatcher ¶
func NewAllocWatcher(c Config) (PrevAllocWatcher, PrevAllocMigrator)
NewAllocWatcher creates a PrevAllocWatcher appropriate for whether this alloc's previous allocation was local or remote. If this alloc has no previous alloc then a noop implementation is returned.
Types ¶
type AllocRunnerMeta ¶
type AllocRunnerMeta interface { GetAllocDir() *allocdir.AllocDir Listener() *cstructs.AllocListener Alloc() *structs.Allocation }
AllocRunnerMeta provides metadata about an AllocRunner such as its alloc and alloc dir.
type Config ¶
type Config struct { // Alloc is the current allocation which may need to block on its // previous allocation stopping. Alloc *structs.Allocation // PreviousRunner is non-nil if Alloc has a PreviousAllocation and it is // running locally. PreviousRunner AllocRunnerMeta // PreemptedRunners is non-nil if Alloc has one or more PreemptedAllocations. PreemptedRunners map[string]AllocRunnerMeta // RPC allows the alloc watcher to monitor remote allocations. RPC RPCer // Config is necessary for using the RPC. Config *config.Config // MigrateToken is used to migrate remote alloc dirs when ACLs are // enabled. MigrateToken string Logger hclog.Logger }
type NoopPrevAlloc ¶
type NoopPrevAlloc struct{}
NoopPrevAlloc does not block or migrate on a previous allocation and never returns an error.
func (NoopPrevAlloc) IsMigrating ¶
func (NoopPrevAlloc) IsMigrating() bool
func (NoopPrevAlloc) IsWaiting ¶
func (NoopPrevAlloc) IsWaiting() bool
type PrevAllocMigrator ¶
type PrevAllocMigrator interface { PrevAllocWatcher // IsMigrating returns true if a concurrent caller is in Migrate IsMigrating() bool // Migrate data from previous alloc Migrate(ctx context.Context, dest *allocdir.AllocDir) error }
PrevAllocMigrator allows AllocRunners to migrate a previous allocation whether or not the previous allocation is local or remote.
type PrevAllocWatcher ¶
type PrevAllocWatcher interface { // Wait for previous alloc to terminate Wait(context.Context) error // IsWaiting returns true if a concurrent caller is blocked in Wait IsWaiting() bool }
PrevAllocWatcher allows AllocRunners to wait for a previous allocation to terminate whether or not the previous allocation is local or remote. See `PrevAllocMigrator` for migrating workloads.
func NewGroupAllocWatcher ¶
func NewGroupAllocWatcher(watchers ...PrevAllocWatcher) PrevAllocWatcher