goroutinemap

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Nov 3, 2019 License: Apache-2.0 Imports: 4 Imported by: 0

README

goroutinemap

go get github.com/robinbraemer/goroutinemap

This is the goroutinemap util package from the Kubernetes project that has no additional dependencies.

Documentation

Overview

Package goroutinemap implements a data structure for managing go routines by name. It prevents the creation of new go routines if an existing go routine with the same name exists.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func IsAlreadyExists

func IsAlreadyExists(err error) bool

IsAlreadyExists returns true if an error returned from GoRoutineMap indicates a new operation can not be started because an operation with the same operation name is already executing.

func NewAlreadyExistsError

func NewAlreadyExistsError(operationName string) error

NewAlreadyExistsError returns a new instance of AlreadyExists error.

Types

type ErrLogFunc

type ErrLogFunc func(v interface{}, args ...interface{})

type GoRoutineMap

type GoRoutineMap interface {
	// Run adds operation name to the list of running operations and spawns a
	// new go routine to execute the operation.
	// If an operation with the same operation name already exists, an
	// AlreadyExists or ExponentialBackoff error is returned.
	// Once the operation is complete, the go routine is terminated and the
	// operation name is removed from the list of executing operations allowing
	// a new operation to be started with the same operation name without error.
	Run(operationName string, operationFunc func() error) error

	// Wait blocks until operations map is empty. This is typically
	// necessary during tests - the test should wait until all operations finish
	// and evaluate results after that.
	Wait()

	// WaitForCompletion blocks until either all operations have successfully completed
	// or have failed but are not pending. The test should wait until operations are either
	// complete or have failed.
	WaitForCompletion()

	// IsOperationPending returns true if the operation is pending (currently
	// running), otherwise returns false.
	IsOperationPending(operationName string) bool
}

GoRoutineMap defines a type that can run named goroutines and track their state. It prevents the creation of multiple goroutines with the same name and may prevent recreation of a goroutine until after the a backoff time has elapsed after the last goroutine with that name finished.

func NewGoRoutineMap

func NewGoRoutineMap(exponentialBackOffOnError bool, errLogFn ErrLogFunc) GoRoutineMap

NewGoRoutineMap returns a new instance of GoRoutineMap.

Directories

Path Synopsis
Package exponentialbackoff contains logic for implementing exponential backoff for GoRoutineMap and NestedPendingOperations.
Package exponentialbackoff contains logic for implementing exponential backoff for GoRoutineMap and NestedPendingOperations.

Jump to

Keyboard shortcuts

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