Skip to content

Commit 630240d

Browse files
renovate[bot]bpg
andauthored
chore(deps): Update module github.com/avast/retry-go/v4 (v4.7.0 → v5.0.0) (#2380)
* chore(deps): Update module github.com/avast/retry-go/v4 (v4.7.0 → v5.0.0) | datasource | package | from | to | | ---------- | ---------------------------- | ------ | ------ | | go | github.com/avast/retry-go/v4 | v4.7.0 | v5.0.0 | * migrate API calls v4 -> v5 Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com> --------- Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
1 parent fc94e2a commit 630240d

File tree

9 files changed

+180
-161
lines changed

9 files changed

+180
-161
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ tool github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs
66

77
require (
88
github.com/Microsoft/go-winio v0.6.2
9-
github.com/avast/retry-go/v4 v4.7.0
9+
github.com/avast/retry-go/v5 v5.0.0
1010
github.com/brianvoe/gofakeit/v7 v7.12.0
1111
github.com/google/go-cmp v0.7.0
1212
github.com/google/go-querystring v1.1.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew
2222
github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=
2323
github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI=
2424
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
25-
github.com/avast/retry-go/v4 v4.7.0 h1:yjDs35SlGvKwRNSykujfjdMxMhMQQM0TnIjJaHB+Zio=
26-
github.com/avast/retry-go/v4 v4.7.0/go.mod h1:ZMPDa3sY2bKgpLtap9JRUgk2yTAba7cgiFhqxY2Sg6Q=
25+
github.com/avast/retry-go/v5 v5.0.0 h1:kf1Qc2UsTZ4qq8elDymqfbISvkyMuhgRxuJqX2NHP7k=
26+
github.com/avast/retry-go/v5 v5.0.0/go.mod h1://d+usmKWio1agtZfS1H/ltTqwtIfBnRq9zEwjc3eH8=
2727
github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY=
2828
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
2929
github.com/bmatcuk/doublestar/v4 v4.9.1 h1:X8jg9rRZmJd4yRy7ZeNDRnM+T3ZfHv15JiBJ/avrEXE=

proxmox/api/client.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
"sort"
2222
"strings"
2323

24-
"github.com/avast/retry-go/v4"
24+
"github.com/avast/retry-go/v5"
2525
"github.com/google/go-querystring/query"
2626
"github.com/hashicorp/terraform-plugin-log/tflog"
2727
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging"
@@ -234,10 +234,7 @@ func (c *client) DoRequest(
234234
}
235235

236236
//nolint:bodyclose
237-
res, err := retry.DoWithData(
238-
func() (*http.Response, error) {
239-
return c.conn.httpClient.Do(req)
240-
},
237+
res, err := retry.NewWithData[*http.Response](
241238
retry.Context(ctx),
242239
retry.RetryIf(func(err error) bool {
243240
var urlErr *url.Error
@@ -249,6 +246,10 @@ func (c *client) DoRequest(
249246
}),
250247
retry.LastErrorOnly(true),
251248
retry.Attempts(3),
249+
).Do(
250+
func() (*http.Response, error) {
251+
return c.conn.httpClient.Do(req)
252+
},
252253
)
253254
if err != nil {
254255
return fmt.Errorf("failed to perform HTTP %s request (path: %s) - Reason: %w",

proxmox/cluster/id_generator.go

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919
"strings"
2020
"time"
2121

22-
"github.com/avast/retry-go/v4"
22+
"github.com/avast/retry-go/v5"
2323
"github.com/rogpeppe/go-internal/lockedfile"
2424

2525
"github.com/bpg/terraform-provider-proxmox/proxmox/api"
@@ -97,19 +97,7 @@ func (g IDGenerator) NextID(ctx context.Context) (int, error) {
9797

9898
var errs []error
9999

100-
id, err := retry.DoWithData(func() (*int, error) {
101-
if g.config.RandomIDs {
102-
//nolint:gosec
103-
newID = ptr.Ptr(rand.Intn(g.config.RandomIDEnd-g.config.RandomIDStat) + g.config.RandomIDStat)
104-
} else if newID == nil {
105-
newID, err = nextSequentialID(g.config.seqFName)
106-
if err != nil {
107-
return nil, err
108-
}
109-
}
110-
111-
return g.client.GetNextID(ctx, newID)
112-
},
100+
id, err := retry.NewWithData[*int](
113101
retry.OnRetry(func(_ uint, err error) {
114102
if strings.Contains(err.Error(), "already exists") && newID != nil {
115103
newID, err = g.client.GetNextID(ctx, nil)
@@ -125,6 +113,20 @@ func (g IDGenerator) NextID(ctx context.Context) (int, error) {
125113
retry.UntilSucceeded(),
126114
retry.DelayType(retry.FixedDelay),
127115
retry.Delay(200*time.Millisecond),
116+
).Do(
117+
func() (*int, error) {
118+
if g.config.RandomIDs {
119+
//nolint:gosec
120+
newID = ptr.Ptr(rand.Intn(g.config.RandomIDEnd-g.config.RandomIDStat) + g.config.RandomIDStat)
121+
} else if newID == nil {
122+
newID, err = nextSequentialID(g.config.seqFName)
123+
if err != nil {
124+
return nil, err
125+
}
126+
}
127+
128+
return g.client.GetNextID(ctx, newID)
129+
},
128130
)
129131
if err != nil {
130132
errs = append(errs, err)

proxmox/nodes/containers/containers.go

Lines changed: 39 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
"strings"
1515
"time"
1616

17-
"github.com/avast/retry-go/v4"
17+
"github.com/avast/retry-go/v5"
1818

1919
"github.com/bpg/terraform-provider-proxmox/proxmox/api"
2020
"github.com/bpg/terraform-provider-proxmox/utils/ip"
@@ -169,7 +169,26 @@ func (c *Client) WaitForContainerNetworkInterfaces(
169169
ctxWithTimeout, cancel := context.WithTimeout(ctx, timeout)
170170
defer cancel()
171171

172-
ifaces, err := retry.DoWithData(
172+
ifaces, err := retry.NewWithData[[]GetNetworkInterfacesData](
173+
retry.Context(ctxWithTimeout),
174+
retry.RetryIf(func(err error) bool {
175+
var target *api.HTTPError
176+
if errors.As(err, &target) {
177+
if target.Code == http.StatusBadRequest {
178+
// this is a special case to account for eventual consistency
179+
// when creating a task -- the task may not be available via status API
180+
// immediately after creation
181+
return true
182+
}
183+
}
184+
185+
return errors.Is(err, api.ErrNoDataObjectInResponse) || errors.Is(err, errNoIPsYet)
186+
}),
187+
retry.LastErrorOnly(true),
188+
retry.UntilSucceeded(),
189+
retry.DelayType(retry.FixedDelay),
190+
retry.Delay(time.Second),
191+
).Do(
173192
func() ([]GetNetworkInterfacesData, error) {
174193
ifaces, err := c.GetContainerNetworkInterfaces(ctx)
175194
if err != nil {
@@ -207,24 +226,6 @@ func (c *Client) WaitForContainerNetworkInterfaces(
207226
// all required IP types are available
208227
return ifaces, nil
209228
},
210-
retry.Context(ctxWithTimeout),
211-
retry.RetryIf(func(err error) bool {
212-
var target *api.HTTPError
213-
if errors.As(err, &target) {
214-
if target.Code == http.StatusBadRequest {
215-
// this is a special case to account for eventual consistency
216-
// when creating a task -- the task may not be available via status API
217-
// immediately after creation
218-
return true
219-
}
220-
}
221-
222-
return errors.Is(err, api.ErrNoDataObjectInResponse) || errors.Is(err, errNoIPsYet)
223-
}),
224-
retry.LastErrorOnly(true),
225-
retry.UntilSucceeded(),
226-
retry.DelayType(retry.FixedDelay),
227-
retry.Delay(time.Second),
228229
)
229230
if errors.Is(err, context.DeadlineExceeded) {
230231
return nil, errors.New("timeout while waiting for container IP addresses")
@@ -408,7 +409,15 @@ func (c *Client) WaitForContainerStatus(ctx context.Context, status string) erro
408409

409410
unexpectedStatus := fmt.Errorf("unexpected status %q", status)
410411

411-
err := retry.Do(
412+
err := retry.New(
413+
retry.Context(ctx),
414+
retry.RetryIf(func(err error) bool {
415+
return errors.Is(err, unexpectedStatus)
416+
}),
417+
retry.UntilSucceeded(),
418+
retry.Delay(1*time.Second),
419+
retry.LastErrorOnly(true),
420+
).Do(
412421
func() error {
413422
data, err := c.GetContainerStatus(ctx)
414423
if err != nil {
@@ -421,13 +430,6 @@ func (c *Client) WaitForContainerStatus(ctx context.Context, status string) erro
421430

422431
return nil
423432
},
424-
retry.Context(ctx),
425-
retry.RetryIf(func(err error) bool {
426-
return errors.Is(err, unexpectedStatus)
427-
}),
428-
retry.UntilSucceeded(),
429-
retry.Delay(1*time.Second),
430-
retry.LastErrorOnly(true),
431433
)
432434
if errors.Is(err, context.DeadlineExceeded) {
433435
return fmt.Errorf("timeout while waiting for container %d to enter the status %q", c.VMID, status)
@@ -444,7 +446,15 @@ func (c *Client) WaitForContainerStatus(ctx context.Context, status string) erro
444446
func (c *Client) WaitForContainerConfigUnlock(ctx context.Context, ignoreErrorResponse bool) error {
445447
stillLocked := errors.New("still locked")
446448

447-
err := retry.Do(
449+
err := retry.New(
450+
retry.Context(ctx),
451+
retry.RetryIf(func(err error) bool {
452+
return errors.Is(err, stillLocked) || ignoreErrorResponse
453+
}),
454+
retry.UntilSucceeded(),
455+
retry.Delay(1*time.Second),
456+
retry.LastErrorOnly(true),
457+
).Do(
448458
func() error {
449459
data, err := c.GetContainerStatus(ctx)
450460
if err != nil {
@@ -457,13 +467,6 @@ func (c *Client) WaitForContainerConfigUnlock(ctx context.Context, ignoreErrorRe
457467

458468
return nil
459469
},
460-
retry.Context(ctx),
461-
retry.RetryIf(func(err error) bool {
462-
return errors.Is(err, stillLocked) || ignoreErrorResponse
463-
}),
464-
retry.UntilSucceeded(),
465-
retry.Delay(1*time.Second),
466-
retry.LastErrorOnly(true),
467470
)
468471
if errors.Is(err, context.DeadlineExceeded) {
469472
return fmt.Errorf("timeout while waiting for container %d configuration to become unlocked", c.VMID)

proxmox/nodes/network.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616
"sync"
1717
"time"
1818

19-
"github.com/avast/retry-go/v4"
19+
"github.com/avast/retry-go/v5"
2020

2121
"github.com/bpg/terraform-provider-proxmox/proxmox/api"
2222
)
@@ -74,7 +74,14 @@ func (c *Client) ReloadNetworkConfiguration(ctx context.Context) error {
7474

7575
resBody := &ReloadNetworkResponseBody{}
7676

77-
err := retry.Do(
77+
err := retry.New(
78+
retry.Context(ctx),
79+
retry.Delay(1*time.Second),
80+
retry.Attempts(3),
81+
retry.RetryIf(func(err error) bool {
82+
return strings.Contains(err.Error(), "exit code 89")
83+
}),
84+
).Do(
7885
func() error {
7986
err := c.DoRequest(ctx, http.MethodPut, c.ExpandPath("network"), nil, resBody)
8087
if err != nil {
@@ -87,12 +94,6 @@ func (c *Client) ReloadNetworkConfiguration(ctx context.Context) error {
8794

8895
return c.Tasks().WaitForTask(ctx, *resBody.Data)
8996
},
90-
retry.Context(ctx),
91-
retry.Delay(1*time.Second),
92-
retry.Attempts(3),
93-
retry.RetryIf(func(err error) bool {
94-
return strings.Contains(err.Error(), "exit code 89")
95-
}),
9697
)
9798
if err != nil {
9899
return fmt.Errorf("failed to reload network configuration for node \"%s\": %w", c.NodeName, err)

proxmox/nodes/storage/content.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
"net/url"
1515
"sort"
1616

17-
"github.com/avast/retry-go/v4"
17+
"github.com/avast/retry-go/v5"
1818

1919
"github.com/bpg/terraform-provider-proxmox/proxmox/api"
2020
)
@@ -26,10 +26,7 @@ func (c *Client) DeleteDatastoreFile(
2626
) error {
2727
path := c.ExpandPath(fmt.Sprintf("content/%s", url.PathEscape(volumeID)))
2828

29-
err := retry.Do(
30-
func() error {
31-
return c.DoRequest(ctx, http.MethodDelete, path, nil, nil)
32-
},
29+
err := retry.New(
3330
retry.Context(ctx),
3431
retry.RetryIf(func(err error) bool {
3532
var httpError *api.HTTPError
@@ -40,6 +37,10 @@ func (c *Client) DeleteDatastoreFile(
4037
return !errors.Is(err, api.ErrResourceDoesNotExist)
4138
}),
4239
retry.LastErrorOnly(true),
40+
).Do(
41+
func() error {
42+
return c.DoRequest(ctx, http.MethodDelete, path, nil, nil)
43+
},
4344
)
4445
if err != nil {
4546
return fmt.Errorf("error deleting file %s from datastore %s: %w", volumeID, c.StorageName, err)
@@ -54,10 +55,7 @@ func (c *Client) ListDatastoreFiles(
5455
) ([]*DatastoreFileListResponseData, error) {
5556
resBody := &DatastoreFileListResponseBody{}
5657

57-
err := retry.Do(
58-
func() error {
59-
return c.DoRequest(ctx, http.MethodGet, c.ExpandPath("content"), nil, resBody)
60-
},
58+
err := retry.New(
6159
retry.Context(ctx),
6260
retry.RetryIf(func(err error) bool {
6361
var httpError *api.HTTPError
@@ -68,6 +66,10 @@ func (c *Client) ListDatastoreFiles(
6866
return !errors.Is(err, api.ErrResourceDoesNotExist)
6967
}),
7068
retry.LastErrorOnly(true),
69+
).Do(
70+
func() error {
71+
return c.DoRequest(ctx, http.MethodGet, c.ExpandPath("content"), nil, resBody)
72+
},
7173
)
7274
if err != nil {
7375
return nil, fmt.Errorf("error listing files from datastore %s: %w", c.StorageName, err)

proxmox/nodes/tasks/tasks.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
"strings"
1515
"time"
1616

17-
"github.com/avast/retry-go/v4"
17+
"github.com/avast/retry-go/v5"
1818

1919
"github.com/bpg/terraform-provider-proxmox/proxmox/api"
2020
)
@@ -132,19 +132,7 @@ func (c *Client) WaitForTask(ctx context.Context, upid string, opts ...TaskWaitO
132132
opt.apply(options)
133133
}
134134

135-
status, err := retry.DoWithData(
136-
func() (*GetTaskStatusResponseData, error) {
137-
status, err := c.GetTaskStatus(ctx, upid)
138-
if err != nil {
139-
return nil, err
140-
}
141-
142-
if status.Status == "running" {
143-
return nil, errStillRunning
144-
}
145-
146-
return status, err
147-
},
135+
status, err := retry.NewWithData[*GetTaskStatusResponseData](
148136
retry.Context(ctx),
149137
retry.RetryIf(func(err error) bool {
150138
var target *api.HTTPError
@@ -167,6 +155,19 @@ func (c *Client) WaitForTask(ctx context.Context, upid string, opts ...TaskWaitO
167155
retry.UntilSucceeded(),
168156
retry.DelayType(retry.FixedDelay),
169157
retry.Delay(time.Second),
158+
).Do(
159+
func() (*GetTaskStatusResponseData, error) {
160+
status, err := c.GetTaskStatus(ctx, upid)
161+
if err != nil {
162+
return nil, err
163+
}
164+
165+
if status.Status == "running" {
166+
return nil, errStillRunning
167+
}
168+
169+
return status, err
170+
},
170171
)
171172
if errors.Is(err, context.DeadlineExceeded) {
172173
return fmt.Errorf("timeout while waiting for task %q to complete", upid)

0 commit comments

Comments
 (0)