@@ -13,14 +13,107 @@ limitations under the License.
13
13
14
14
package bundle
15
15
16
+ import (
17
+ "context"
18
+ "fmt"
19
+ "strconv"
20
+ "time"
21
+
22
+ "github.com/google/go-containerregistry/pkg/v1/remote"
23
+ "github.com/tektoncd/pipeline/pkg/resolution/resolver/framework"
24
+ )
25
+
16
26
const (
17
27
// ConfigServiceAccount is the configuration field name for controlling
18
28
// the Service Account name to use for bundle requests.
19
29
ConfigServiceAccount = "default-service-account"
20
30
// ConfigKind is the configuration field name for controlling
21
31
// what the layer name in the bundle image is.
22
32
ConfigKind = "default-kind"
23
- // DefaultTimeoutKey is the configuration field name for controlling
33
+ // ConfigTimeoutKey is the configuration field name for controlling
24
34
// the maximum duration of a resolution request for a file from registry.
25
35
ConfigTimeoutKey = "fetch-timeout"
36
+ // ConfigBackoffDuration is the configuration field name for controlling
37
+ // the initial duration of a backoff when a bundle resolution fails
38
+ ConfigBackoffDuration = "backoff-duration"
39
+ DefaultBackoffDuration = 2.0 * time .Second
40
+ // ConfigBackoffFactor is the configuration field name for controlling
41
+ // the factor by which successive backoffs will increase when a bundle
42
+ // resolution fails
43
+ ConfigBackoffFactor = "backoff-factor"
44
+ DefaultBackoffFactor = 2.0
45
+ // ConfigBackoffJitter is the configuration field name for controlling
46
+ // the randomness applied to backoff durations when a bundle resolution fails
47
+ ConfigBackoffJitter = "backoff-jitter"
48
+ DefaultBackoffJitter = 0.1
49
+ // ConfigBackoffSteps is the configuration field name for controlling
50
+ // the number of attempted backoffs to retry when a bundle resolution fails
51
+ ConfigBackoffSteps = "backoff-steps"
52
+ DefaultBackoffSteps = 2
53
+ // ConfigBackoffCap is the configuration field name for controlling
54
+ // the maximum duration to try when backing off
55
+ ConfigBackoffCap = "backoff-cap"
56
+ DefaultBackoffCap = 10 * time .Second
26
57
)
58
+
59
+ // func {
60
+ // conf := framework.GetResolverConfigFromContext(ctx)
61
+ // }
62
+
63
+ // GetBundleResolverBackoff returns a BundleResolverBackoffConfig to
64
+ // be passed when resolving remote images. This can be configured with the
65
+ // backoff-duration, backoff-factor, backoff-jitter, and backoff-steps
66
+ // fields in the bundle-resolver-config ConfigMap.
67
+ func GetBundleResolverBackoff (ctx context.Context ) (remote.Backoff , error ) {
68
+ conf := framework .GetResolverConfigFromContext (ctx )
69
+
70
+ customRetryBackoff := remote.Backoff {
71
+ Duration : DefaultBackoffDuration ,
72
+ Factor : DefaultBackoffFactor ,
73
+ Jitter : DefaultBackoffJitter ,
74
+ Steps : DefaultBackoffSteps ,
75
+ Cap : DefaultBackoffCap ,
76
+ }
77
+ if v , ok := conf [ConfigBackoffDuration ]; ok {
78
+ var err error
79
+ duration , err := time .ParseDuration (v )
80
+ if err != nil {
81
+ return customRetryBackoff , fmt .Errorf ("error parsing backoff duration value %s: %w" , v , err )
82
+ }
83
+ customRetryBackoff .Duration = duration
84
+ }
85
+ if v , ok := conf [ConfigBackoffFactor ]; ok {
86
+ var err error
87
+ factor , err := strconv .ParseFloat (string (v ), 64 )
88
+ if err != nil {
89
+ return customRetryBackoff , fmt .Errorf ("error parsing backoff factor value %s: %w" , v , err )
90
+ }
91
+ customRetryBackoff .Factor = factor
92
+ }
93
+ if v , ok := conf [ConfigBackoffJitter ]; ok {
94
+ var err error
95
+ jitter , err := strconv .ParseFloat (string (v ), 64 )
96
+ if err != nil {
97
+ return customRetryBackoff , fmt .Errorf ("error parsing backoff jitter value %s: %w" , v , err )
98
+ }
99
+ customRetryBackoff .Jitter = jitter
100
+ }
101
+ if v , ok := conf [ConfigBackoffSteps ]; ok {
102
+ var err error
103
+ steps , err := strconv .Atoi (string (v ))
104
+ if err != nil {
105
+ return customRetryBackoff , fmt .Errorf ("error parsing backoff steps value %s: %w" , v , err )
106
+ }
107
+ customRetryBackoff .Steps = steps
108
+ }
109
+ if v , ok := conf [ConfigBackoffCap ]; ok {
110
+ var err error
111
+ cap , err := time .ParseDuration (v )
112
+ if err != nil {
113
+ return customRetryBackoff , fmt .Errorf ("error parsing backoff steps value %s: %w" , v , err )
114
+ }
115
+ customRetryBackoff .Cap = cap
116
+ }
117
+
118
+ return customRetryBackoff , nil
119
+ }
0 commit comments