mirror of
				https://github.com/moby/moby.git
				synced 2022-11-09 12:21:53 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			84 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package exec
 | 
						|
 | 
						|
import "github.com/pkg/errors"
 | 
						|
 | 
						|
var (
 | 
						|
	// ErrRuntimeUnsupported encountered when a task requires a runtime
 | 
						|
	// unsupported by the executor.
 | 
						|
	ErrRuntimeUnsupported = errors.New("exec: unsupported runtime")
 | 
						|
 | 
						|
	// ErrTaskPrepared is called if the task is already prepared.
 | 
						|
	ErrTaskPrepared = errors.New("exec: task already prepared")
 | 
						|
 | 
						|
	// ErrTaskStarted can be returned from any operation that cannot be
 | 
						|
	// performed because the task has already been started. This does not imply
 | 
						|
	// that the task is running but rather that it is no longer valid to call
 | 
						|
	// Start.
 | 
						|
	ErrTaskStarted = errors.New("exec: task already started")
 | 
						|
 | 
						|
	// ErrTaskUpdateRejected is returned if a task update is rejected by a controller.
 | 
						|
	ErrTaskUpdateRejected = errors.New("exec: task update rejected")
 | 
						|
 | 
						|
	// ErrControllerClosed returned when a task controller has been closed.
 | 
						|
	ErrControllerClosed = errors.New("exec: controller closed")
 | 
						|
 | 
						|
	// ErrTaskRetry is returned by Do when an operation failed by should be
 | 
						|
	// retried. The status should still be reported in this case.
 | 
						|
	ErrTaskRetry = errors.New("exec: task retry")
 | 
						|
 | 
						|
	// ErrTaskNoop returns when the a subsequent call to Do will not result in
 | 
						|
	// advancing the task. Callers should avoid calling Do until the task has been updated.
 | 
						|
	ErrTaskNoop = errors.New("exec: task noop")
 | 
						|
)
 | 
						|
 | 
						|
// ExitCoder is implemented by errors that have an exit code.
 | 
						|
type ExitCoder interface {
 | 
						|
	// ExitCode returns the exit code.
 | 
						|
	ExitCode() int
 | 
						|
}
 | 
						|
 | 
						|
// Temporary indicates whether or not the error condition is temporary.
 | 
						|
//
 | 
						|
// If this is encountered in the controller, the failing operation will be
 | 
						|
// retried when this returns true. Otherwise, the operation is considered
 | 
						|
// fatal.
 | 
						|
type Temporary interface {
 | 
						|
	Temporary() bool
 | 
						|
}
 | 
						|
 | 
						|
// MakeTemporary makes the error temporary.
 | 
						|
func MakeTemporary(err error) error {
 | 
						|
	if IsTemporary(err) {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	return temporary{err}
 | 
						|
}
 | 
						|
 | 
						|
type temporary struct {
 | 
						|
	error
 | 
						|
}
 | 
						|
 | 
						|
func (t temporary) Cause() error    { return t.error }
 | 
						|
func (t temporary) Temporary() bool { return true }
 | 
						|
 | 
						|
// IsTemporary returns true if the error or a recursive cause returns true for
 | 
						|
// temporary.
 | 
						|
func IsTemporary(err error) bool {
 | 
						|
	for err != nil {
 | 
						|
		if tmp, ok := err.(Temporary); ok {
 | 
						|
			if tmp.Temporary() {
 | 
						|
				return true
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		cause := errors.Cause(err)
 | 
						|
		if cause == err {
 | 
						|
			break
 | 
						|
		}
 | 
						|
 | 
						|
		err = cause
 | 
						|
	}
 | 
						|
 | 
						|
	return false
 | 
						|
}
 |