stop

package
v0.0.0-...-9910822 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 16, 2015 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Closer

type Closer interface {
	Close()
}

Closer is an interface for objects to attach to the stopper to be closed once the stopper completes.

type CloserFn

type CloserFn func()

CloserFn is type that allows any function to be a Closer.

func (CloserFn) Close

func (f CloserFn) Close()

Close implements the Closer interface.

type Stopper

type Stopper struct {
	// contains filtered or unexported fields
}

A Stopper provides a channel-based mechanism to stop an arbitrary array of workers. Each worker is registered with the stopper via the RunWorker() method. The system further allows execution of functions through RunTask() and RunAsyncTask().

Stopping occurs in two phases: the first is the request to stop, which moves the stopper into a draining phase. While draining, calls to RunTask() & RunAsyncTask() don't execute the function passed in and return false. When all outstanding tasks have been completed, the stopper closes its stopper channel, which signals all live workers that it's safe to shut down. When all workers have shutdown, the stopper is complete.

An arbitrary list of objects implementing the Closer interface may be added to the stopper via AddCloser(), to be closed after the stopper has stopped.

func NewStopper

func NewStopper() *Stopper

NewStopper returns an instance of Stopper.

func (*Stopper) AddCloser

func (s *Stopper) AddCloser(c Closer)

AddCloser adds an object to close after the stopper has been stopped.

func (*Stopper) IsStopped

func (s *Stopper) IsStopped() <-chan struct{}

IsStopped returns a channel which will be closed after Stop() has been invoked to full completion, meaning all workers have completed and all closers have been closed.

func (*Stopper) NumTasks

func (s *Stopper) NumTasks() int

NumTasks returns the number of active tasks.

func (*Stopper) Quiesce

func (s *Stopper) Quiesce()

Quiesce moves the stopper to state draining and waits until all tasks complete. This is used from Stop() and unittests.

func (*Stopper) RunAsyncTask

func (s *Stopper) RunAsyncTask(f func()) bool

RunAsyncTask runs function f in a goroutine. It returns false when the Stopper is draining and the function is not executed.

func (*Stopper) RunTask

func (s *Stopper) RunTask(f func()) bool

RunTask adds one to the count of tasks left to drain in the system. Any worker which is a "first mover" when starting tasks must call this method before starting work on a new task. First movers include goroutines launched to do periodic work and the kv/db.go gateway which accepts external client requests.

Returns false to indicate that the system is currently draining and function f was not called.

func (*Stopper) RunWorker

func (s *Stopper) RunWorker(f func())

RunWorker runs the supplied function as a "worker" to be stopped by the stopper. The function <f> is run in a goroutine.

func (*Stopper) RunningTasks

func (s *Stopper) RunningTasks() TaskMap

RunningTasks returns a map containing the count of running tasks keyed by callsite.

func (*Stopper) ShouldStop

func (s *Stopper) ShouldStop() <-chan struct{}

ShouldStop returns a channel which will be closed when Stop() has been invoked and outstanding tasks have drained.

func (*Stopper) Stop

func (s *Stopper) Stop()

Stop signals all live workers to stop and then waits for each to confirm it has stopped.

type TaskMap

type TaskMap map[string]int

A TaskMap is returned by RunningTasks().

func (TaskMap) String

func (tm TaskMap) String() string

String implements fmt.Stringer and returns a sorted multi-line listing of the TaskMap.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL