Skip to content

Commit 15cea69

Browse files
fix(client): handle gzipped errors (#280)
when content encoding is gzipped even for 500s, unzip the response. also adds tests for gzipped encoding --------- Co-authored-by: Vicente Olmedo <vicente@storacha.network>
1 parent 22b7f7a commit 15cea69

File tree

2 files changed

+206
-140
lines changed

2 files changed

+206
-140
lines changed

pkg/client/client.go

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package client
22

33
import (
4-
"compress/gzip"
54
"context"
65
"errors"
76
"fmt"
@@ -161,8 +160,7 @@ func (c *Client) QueryClaims(ctx context.Context, query types.Query) (types.Quer
161160
if c.telemetryEnabled {
162161
otel.GetTextMapPropagator().Inject(ctx, propagation.HeaderCarrier(req.Header))
163162
}
164-
// Request gzip compression
165-
req.Header.Set("Accept-Encoding", "gzip")
163+
166164
// If there are query delegations, then add them to an X-Agent-Message header.
167165
if len(query.Delegations) > 0 {
168166
invs := make([]invocation.Invocation, 0, len(query.Delegations))
@@ -179,6 +177,7 @@ func (c *Client) QueryClaims(ctx context.Context, query types.Query) (types.Quer
179177
}
180178
req.Header.Set(hcmsg.HeaderName, headerValue)
181179
}
180+
182181
res, err := c.httpClient.Do(req)
183182
if err != nil {
184183
if span != nil {
@@ -187,6 +186,8 @@ func (c *Client) QueryClaims(ctx context.Context, query types.Query) (types.Quer
187186
}
188187
return nil, fmt.Errorf("sending query to server: %w", err)
189188
}
189+
defer res.Body.Close()
190+
190191
if res.StatusCode < 200 || res.StatusCode > 299 {
191192
if span != nil {
192193
span.RecordError(errFromResponse(res))
@@ -195,18 +196,7 @@ func (c *Client) QueryClaims(ctx context.Context, query types.Query) (types.Quer
195196
return nil, errFromResponse(res)
196197
}
197198

198-
// Handle gzip decompression if needed
199-
var reader io.ReadCloser = res.Body
200-
if res.Header.Get("Content-Encoding") == "gzip" {
201-
gzReader, err := gzip.NewReader(res.Body)
202-
if err != nil {
203-
return nil, fmt.Errorf("creating gzip reader: %w", err)
204-
}
205-
defer gzReader.Close()
206-
reader = gzReader
207-
}
208-
209-
return queryresult.Extract(reader)
199+
return queryresult.Extract(res.Body)
210200
}
211201

212202
type Option func(*Client)

0 commit comments

Comments
 (0)