mirror of
https://github.com/containers/podman.git
synced 2025-09-28 09:15:26 +08:00
Vendor in containers/buildah 1.16.1
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
79
vendor/github.com/containers/buildah/common.go
generated
vendored
79
vendor/github.com/containers/buildah/common.go
generated
vendored
@ -3,13 +3,11 @@ package buildah
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
"net"
|
||||
"net/url"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/containers/common/pkg/retry"
|
||||
cp "github.com/containers/image/v5/copy"
|
||||
"github.com/containers/image/v5/docker"
|
||||
"github.com/containers/image/v5/signature"
|
||||
@ -17,11 +15,6 @@ import (
|
||||
encconfig "github.com/containers/ocicrypt/config"
|
||||
"github.com/containers/storage"
|
||||
"github.com/containers/storage/pkg/unshare"
|
||||
"github.com/docker/distribution/registry/api/errcode"
|
||||
errcodev2 "github.com/docker/distribution/registry/api/v2"
|
||||
multierror "github.com/hashicorp/go-multierror"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -76,64 +69,22 @@ func getSystemContext(store storage.Store, defaults *types.SystemContext, signat
|
||||
return sc
|
||||
}
|
||||
|
||||
func isRetryable(err error) bool {
|
||||
err = errors.Cause(err)
|
||||
type unwrapper interface {
|
||||
Unwrap() error
|
||||
}
|
||||
if unwrapper, ok := err.(unwrapper); ok {
|
||||
err = unwrapper.Unwrap()
|
||||
return isRetryable(err)
|
||||
}
|
||||
if registryError, ok := err.(errcode.Error); ok {
|
||||
switch registryError.Code {
|
||||
case errcode.ErrorCodeUnauthorized, errcodev2.ErrorCodeNameUnknown, errcodev2.ErrorCodeManifestUnknown:
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
if op, ok := err.(*net.OpError); ok {
|
||||
return isRetryable(op.Err)
|
||||
}
|
||||
if url, ok := err.(*url.Error); ok {
|
||||
return isRetryable(url.Err)
|
||||
}
|
||||
if errno, ok := err.(syscall.Errno); ok {
|
||||
if errno == syscall.ECONNREFUSED {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if errs, ok := err.(errcode.Errors); ok {
|
||||
// if this error is a group of errors, process them all in turn
|
||||
for i := range errs {
|
||||
if !isRetryable(errs[i]) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
if errs, ok := err.(*multierror.Error); ok {
|
||||
// if this error is a group of errors, process them all in turn
|
||||
for i := range errs.Errors {
|
||||
if !isRetryable(errs.Errors[i]) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func retryCopyImage(ctx context.Context, policyContext *signature.PolicyContext, dest, src, registry types.ImageReference, action string, copyOptions *cp.Options, maxRetries int, retryDelay time.Duration) ([]byte, error) {
|
||||
manifestBytes, err := cp.Image(ctx, policyContext, dest, src, copyOptions)
|
||||
for retries := 0; err != nil && isRetryable(err) && registry != nil && registry.Transport().Name() == docker.Transport.Name() && retries < maxRetries; retries++ {
|
||||
if retryDelay == 0 {
|
||||
retryDelay = 5 * time.Second
|
||||
}
|
||||
logrus.Infof("Warning: %s failed, retrying in %s ... (%d/%d)", action, retryDelay, retries+1, maxRetries)
|
||||
time.Sleep(retryDelay)
|
||||
func retryCopyImage(ctx context.Context, policyContext *signature.PolicyContext, dest, src, registry types.ImageReference, copyOptions *cp.Options, maxRetries int, retryDelay time.Duration) ([]byte, error) {
|
||||
var (
|
||||
manifestBytes []byte
|
||||
err error
|
||||
lastErr error
|
||||
)
|
||||
err = retry.RetryIfNecessary(ctx, func() error {
|
||||
manifestBytes, err = cp.Image(ctx, policyContext, dest, src, copyOptions)
|
||||
if err == nil {
|
||||
break
|
||||
if registry != nil && registry.Transport().Name() != docker.Transport.Name() {
|
||||
lastErr = err
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}, &retry.RetryOptions{MaxRetry: maxRetries, Delay: retryDelay})
|
||||
if lastErr != nil {
|
||||
err = lastErr
|
||||
}
|
||||
return manifestBytes, err
|
||||
}
|
||||
|
Reference in New Issue
Block a user