Skip to content

Commit 5be77f7

Browse files
lance6716ti-chi-bot
authored andcommitted
external: improve S3 error message
Signed-off-by: lance6716 <[email protected]>
1 parent 61d7f3c commit 5be77f7

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

br/pkg/storage/ks3.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -508,8 +508,14 @@ func (rs *KS3Storage) open(
508508
}
509509

510510
if startOffset != r.Start || (endOffset != 0 && endOffset != r.End+1) {
511-
return nil, r, errors.Annotatef(berrors.ErrStorageUnknown, "open file '%s' failed, expected range: %s, got: %v",
512-
path, *rangeOffset, result.ContentRange)
511+
rangeStr := "<empty>"
512+
if result.ContentRange != nil {
513+
rangeStr = *result.ContentRange
514+
}
515+
return nil, r, errors.Annotatef(
516+
berrors.ErrStorageUnknown,
517+
"open file '%s' failed, expected range: %s, got: %s",
518+
path, *rangeOffset, rangeStr)
513519
}
514520

515521
return result.Body, r, nil

br/pkg/storage/s3.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -853,8 +853,13 @@ func (rs *S3Storage) open(
853853
}
854854

855855
if startOffset != r.Start || (endOffset != 0 && endOffset != r.End+1) {
856-
return nil, r, errors.Annotatef(berrors.ErrStorageUnknown, "open file '%s' failed, expected range: %s, got: %v",
857-
path, *rangeOffset, result.ContentRange)
856+
rangeStr := "<empty>"
857+
if result.ContentRange != nil {
858+
rangeStr = *result.ContentRange
859+
}
860+
return nil, r, errors.Annotatef(berrors.ErrStorageUnknown,
861+
"open file '%s' failed, expected range: %s, got: %s",
862+
path, *rangeOffset, rangeStr)
858863
}
859864

860865
return result.Body, r, nil

br/pkg/storage/s3_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1472,3 +1472,30 @@ func TestS3ReadFileRetryable(t *testing.T) {
14721472
require.Error(t, err)
14731473
require.True(t, strings.Contains(err.Error(), errMsg))
14741474
}
1475+
1476+
func TestOpenRangeMismatchErrorMsg(t *testing.T) {
1477+
s := createS3Suite(t)
1478+
ctx := aws.BackgroundContext()
1479+
start, end := int64(10), int64(30)
1480+
1481+
s.s3.EXPECT().
1482+
GetObjectWithContext(ctx, gomock.Any()).
1483+
DoAndReturn(func(context.Context, *s3.GetObjectInput, ...request.Option) (*s3.GetObjectOutput, error) {
1484+
return &s3.GetObjectOutput{
1485+
ContentRange: aws.String("bytes 10-20/20"),
1486+
}, nil
1487+
})
1488+
reader, err := s.storage.Open(ctx, "test", &ReaderOption{StartOffset: &start, EndOffset: &end})
1489+
require.ErrorContains(t, err, "expected range: bytes=10-29, got: bytes 10-20/20")
1490+
require.Nil(t, reader)
1491+
1492+
s.s3.EXPECT().
1493+
GetObjectWithContext(ctx, gomock.Any()).
1494+
DoAndReturn(func(context.Context, *s3.GetObjectInput, ...request.Option) (*s3.GetObjectOutput, error) {
1495+
return &s3.GetObjectOutput{}, nil
1496+
})
1497+
reader, err = s.storage.Open(ctx, "test", &ReaderOption{StartOffset: &start, EndOffset: &end})
1498+
// other function will throw error
1499+
require.ErrorContains(t, err, "ContentRange is empty")
1500+
require.Nil(t, reader)
1501+
}

0 commit comments

Comments
 (0)