Skip to content

Commit 6b57c23

Browse files
committed
refactor RequestBatch
1 parent 62f1fff commit 6b57c23

1 file changed

Lines changed: 56 additions & 28 deletions

File tree

operator/pkg/s3.go

Lines changed: 56 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,53 +7,81 @@ import (
77
"net/http"
88
"time"
99

10+
"github.com/Layr-Labs/eigensdk-go/logging"
1011
"github.com/ugorji/go/codec"
12+
retry "github.com/yetanotherco/aligned_layer/core"
1113
"github.com/yetanotherco/aligned_layer/operator/merkle_tree"
1214
)
1315

14-
func (o *Operator) getBatchFromDataService(ctx context.Context, batchURL string, expectedMerkleRoot [32]byte, maxRetries int, retryDelay time.Duration) ([]VerificationData, error) {
15-
o.Logger.Infof("Getting batch from data service, batchURL: %s", batchURL)
16-
17-
var resp *http.Response
18-
var err error
19-
var req *http.Request
20-
21-
for attempt := 0; attempt < maxRetries; attempt++ {
22-
if attempt > 0 {
23-
o.Logger.Infof("Waiting for %s before retrying data fetch (attempt %d of %d)", retryDelay, attempt+1, maxRetries)
24-
select {
25-
case <-time.After(retryDelay):
26-
// Wait before retrying
27-
case <-ctx.Done():
28-
return nil, ctx.Err()
29-
}
30-
retryDelay *= 2 // Exponential backoff. Ex: 5s, 10s, 20s
31-
}
32-
33-
req, err = http.NewRequestWithContext(ctx, "GET", batchURL, nil)
34-
if err != nil {
35-
return nil, err
36-
}
16+
func RequestBatch(req *http.Request, ctx context.Context) func() (*http.Response, error) {
3717

38-
resp, err = http.DefaultClient.Do(req)
39-
if err == nil && resp.StatusCode == http.StatusOK {
40-
break // Successful request, exit retry loop
41-
}
18+
req_func := func() (*http.Response, error) {
19+
resp, err := http.DefaultClient.Do(req)
4220

4321
if resp != nil {
4422
err := resp.Body.Close()
4523
if err != nil {
4624
return nil, err
4725
}
4826
}
27+
return resp, err
28+
}
29+
return req_func
30+
}
31+
32+
// TODO: How to log retries?
33+
func RequestBatchRetryable(ctx context.Context, logger logging.Logger, req *http.Request) (*http.Response, error) {
34+
35+
return retry.RetryWithData(RequestBatch(req, ctx), retry.DefaultRetryConfig())
36+
}
37+
38+
func (o *Operator) getBatchFromDataService(ctx context.Context, batchURL string, expectedMerkleRoot [32]byte, maxRetries int, retryDelay time.Duration) ([]VerificationData, error) {
39+
o.Logger.Infof("Getting batch from data service, batchURL: %s", batchURL)
4940

50-
o.Logger.Warnf("Error fetching batch from data service - (attempt %d): %v", attempt+1, err)
41+
req, err := http.NewRequestWithContext(ctx, "GET", batchURL, nil)
42+
if err != nil {
43+
return nil, err
5144
}
5245

46+
resp, err := RequestBatchRetryable(ctx, o.Logger, req)
5347
if err != nil {
5448
return nil, err
5549
}
5650

51+
/*
52+
for attempt := 0; attempt < maxRetries; attempt++ {
53+
if attempt > 0 {
54+
o.Logger.Infof("Waiting for %s before retrying data fetch (attempt %d of %d)", retryDelay, attempt+1, maxRetries)
55+
select {
56+
case <-time.After(retryDelay):
57+
// Wait before retrying
58+
case <-ctx.Done():
59+
return nil, ctx.Err()
60+
}
61+
retryDelay *= 2 // Exponential backoff. Ex: 5s, 10s, 20s
62+
}
63+
64+
req, err = http.NewRequestWithContext(ctx, "GET", batchURL, nil)
65+
if err != nil {
66+
return nil, err
67+
}
68+
69+
resp, err = http.DefaultClient.Do(req)
70+
if err == nil && resp.StatusCode == http.StatusOK {
71+
break // Successful request, exit retry loop
72+
}
73+
74+
if resp != nil {
75+
err := resp.Body.Close()
76+
if err != nil {
77+
return nil, err
78+
}
79+
}
80+
81+
o.Logger.Warnf("Error fetching batch from data service - (attempt %d): %v", attempt+1, err)
82+
}
83+
*/
84+
5785
// At this point, the HTTP request was successfull.
5886

5987
defer func(Body io.ReadCloser) {

0 commit comments

Comments
 (0)