use util/retry instead of wait fork directly
This commit is contained in:
		
							
								
								
									
										15
									
								
								vendor/github.com/jtagcat/util/retry/retry.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								vendor/github.com/jtagcat/util/retry/retry.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,6 +1,8 @@ | ||||
| package retry | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
|  | ||||
| 	"k8s.io/apimachinery/pkg/util/wait" | ||||
| ) | ||||
|  | ||||
| @@ -11,7 +13,18 @@ func OnError(backoff wait.Backoff, fn func() (retryable bool, err error)) error | ||||
| 	return wait.ExponentialBackoff(backoff, func() (done bool, _ error) { | ||||
| 		retryable, err := fn() | ||||
| 		if err == nil || !retryable { | ||||
| 			return true, err | ||||
| 			return true, nil | ||||
| 		} | ||||
| 		return false, nil | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| // error is only returned by context | ||||
| func OnErrorManagedBackoff(ctx context.Context, backoff wait.Backoff, fn func() (retryable bool, err error)) error { | ||||
| 	return wait.ManagedExponentialBackoffWithContext(ctx, backoff, func() (done bool, _ error) { | ||||
| 		retryable, err := fn() | ||||
| 		if err == nil || !retryable { | ||||
| 			return true, nil | ||||
| 		} | ||||
| 		return false, nil | ||||
| 	}) | ||||
|   | ||||
							
								
								
									
										21
									
								
								vendor/github.com/jtagcat/util/std/error.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/jtagcat/util/std/error.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| package std | ||||
|  | ||||
| import "errors" | ||||
|  | ||||
| // for errors.Is(err, ERr) | ||||
| type GenericErr struct { | ||||
| 	Err     error | ||||
| 	Wrapped error | ||||
| } | ||||
|  | ||||
| func (a GenericErr) Is(target error) bool { | ||||
| 	return errors.Is(a.Err, target) | ||||
| } | ||||
|  | ||||
| func (a GenericErr) Unwrap() error { | ||||
| 	return a.Wrapped | ||||
| } | ||||
|  | ||||
| func (a GenericErr) Error() string { | ||||
| 	return a.Err.Error() + ": " + a.Wrapped.Error() | ||||
| } | ||||
							
								
								
									
										32
									
								
								vendor/github.com/jtagcat/util/std/exec.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								vendor/github.com/jtagcat/util/std/exec.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| package std | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 	"os/exec" | ||||
| ) | ||||
|  | ||||
| func RunCmdWithCtx(ctx context.Context, cmd *exec.Cmd) error { | ||||
| 	select { | ||||
| 	case <-ctx.Done(): | ||||
| 		return ctx.Err() | ||||
| 	default: | ||||
| 	} | ||||
|  | ||||
| 	if err := cmd.Start(); err != nil { | ||||
| 		return fmt.Errorf("starting command: %w", err) | ||||
| 	} | ||||
|  | ||||
| 	wait := make(chan error) | ||||
| 	go func() { | ||||
| 		wait <- cmd.Wait() | ||||
| 		close(wait) | ||||
| 	}() | ||||
|  | ||||
| 	select { | ||||
| 	case <-ctx.Done(): | ||||
| 		return ctx.Err() | ||||
| 	case err := <-wait: | ||||
| 		return err | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										60
									
								
								vendor/github.com/jtagcat/util/std/url.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								vendor/github.com/jtagcat/util/std/url.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | ||||
| package std | ||||
|  | ||||
| import ( | ||||
| 	"net/url" | ||||
| 	"path" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| // k8s.io/helm/pkg/urlutil | ||||
| // mod: supports // and / | ||||
| // in case of multiple absolute paths, last is used | ||||
| func URLJoin(baseURL string, paths ...string) (string, error) { | ||||
| 	// mod: | ||||
| 	// base is replaced by first with // | ||||
| 	newBase := -1 | ||||
| 	for i, p := range paths { | ||||
| 		if strings.HasPrefix(p, "//") { | ||||
| 			newBase = i | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	u, err := url.Parse(baseURL) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 	if newBase > -1 { | ||||
| 		old := u | ||||
| 		u, err = url.Parse(paths[newBase]) | ||||
| 		if err != nil { | ||||
| 			return "", err | ||||
| 		} | ||||
|  | ||||
| 		u.Scheme = old.Scheme | ||||
| 		if u.User == nil { | ||||
| 			u.User = old.User | ||||
| 		} | ||||
|  | ||||
| 		paths = paths[newBase+1:] | ||||
| 	} | ||||
|  | ||||
| 	// mod: | ||||
| 	// allow rooting to domain with / | ||||
| 	absPath := -1 | ||||
| 	for i, p := range paths { | ||||
| 		if strings.HasPrefix(p, "/") { | ||||
| 			absPath = i | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// We want path instead of filepath because path always uses /. | ||||
| 	if absPath > -1 { | ||||
| 		u.Path = path.Join(paths[absPath:]...) | ||||
| 	} else { | ||||
| 		all := []string{u.Path} | ||||
| 		all = append(all, paths...) | ||||
| 		u.Path = path.Join(all...) | ||||
| 	} | ||||
|  | ||||
| 	return u.String(), nil | ||||
| } | ||||
							
								
								
									
										36
									
								
								vendor/k8s.io/apimachinery/pkg/util/wait/wait.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								vendor/k8s.io/apimachinery/pkg/util/wait/wait.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -276,7 +276,7 @@ func (b *Backoff) Step() time.Duration { | ||||
| 	duration := b.Duration | ||||
|  | ||||
| 	// calculate the next step | ||||
| 	if b.Factor != 0 && b.Steps != 0 { | ||||
| 	if b.Factor != 0 { | ||||
| 		b.Duration = time.Duration(float64(b.Duration) * b.Factor) | ||||
| 		if b.Cap > 0 && b.Duration > b.Cap { | ||||
| 			b.Duration = b.Cap | ||||
| @@ -431,17 +431,6 @@ func ExponentialBackoff(backoff Backoff, condition ConditionFunc) error { | ||||
| 	return ErrWaitTimeout | ||||
| } | ||||
|  | ||||
| // ManagedExponentialBackoff, unlike ExponentialBackoff does not return ErrWaitTimeout. | ||||
| // Instead the loop continues indefinitely with Sleep being maxDuration (by Steps or Cap) + Jitter | ||||
| func ManagedExponentialBackoff(backoff Backoff, condition ConditionFunc) error { | ||||
| 	for { | ||||
| 		if ok, err := runConditionWithCrashProtection(condition); err != nil || ok { | ||||
| 			return err | ||||
| 		} | ||||
| 		time.Sleep(backoff.Step()) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Poll tries a condition func until it returns true, an error, or the timeout | ||||
| // is reached. | ||||
| // | ||||
| @@ -766,26 +755,3 @@ func ExponentialBackoffWithContext(ctx context.Context, backoff Backoff, conditi | ||||
|  | ||||
| 	return ErrWaitTimeout | ||||
| } | ||||
|  | ||||
| // ManagedExponentialBackoffWithContext works with a request context and a Backoff. It ensures that the retry wait never | ||||
| // exceeds the deadline specified by the request context. | ||||
| func ManagedExponentialBackoffWithContext(ctx context.Context, backoff Backoff, condition ConditionFunc) error { | ||||
| 	for { | ||||
| 		select { | ||||
| 		case <-ctx.Done(): | ||||
| 			return ctx.Err() | ||||
| 		default: | ||||
| 		} | ||||
|  | ||||
| 		if ok, err := runConditionWithCrashProtection(condition); err != nil || ok { | ||||
| 			return err | ||||
| 		} | ||||
|  | ||||
| 		waitBeforeRetry := backoff.Step() | ||||
| 		select { | ||||
| 		case <-ctx.Done(): | ||||
| 			return ctx.Err() | ||||
| 		case <-time.After(waitBeforeRetry): | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
							
								
								
									
										5
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							| @@ -20,7 +20,7 @@ github.com/golang/protobuf/ptypes/timestamp | ||||
| # github.com/golang/snappy v0.0.4 | ||||
| ## explicit | ||||
| github.com/golang/snappy | ||||
| # github.com/jtagcat/util v0.0.0-20221112215320-924d264211be | ||||
| # github.com/jtagcat/util v0.0.0-20221216121757-90da8d3bc885 | ||||
| ## explicit; go 1.18 | ||||
| github.com/jtagcat/util/batch | ||||
| github.com/jtagcat/util/retry | ||||
| @@ -170,7 +170,7 @@ google.golang.org/protobuf/runtime/protoiface | ||||
| google.golang.org/protobuf/runtime/protoimpl | ||||
| google.golang.org/protobuf/types/descriptorpb | ||||
| google.golang.org/protobuf/types/known/timestamppb | ||||
| # k8s.io/apimachinery v0.25.4 => github.com/jtagcat/kubernetes/staging/src/k8s.io/apimachinery v0.0.0-20221027124836-581f57977fff | ||||
| # k8s.io/apimachinery v0.25.4 | ||||
| ## explicit; go 1.19 | ||||
| k8s.io/apimachinery/pkg/util/runtime | ||||
| k8s.io/apimachinery/pkg/util/wait | ||||
| @@ -185,4 +185,3 @@ k8s.io/klog/v2/internal/severity | ||||
| # k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 | ||||
| ## explicit; go 1.18 | ||||
| k8s.io/utils/clock | ||||
| # k8s.io/apimachinery => github.com/jtagcat/kubernetes/staging/src/k8s.io/apimachinery v0.0.0-20221027124836-581f57977fff | ||||
|   | ||||
		Reference in New Issue
	
	Block a user