Skip to content

Commit a016a4c

Browse files
authored
Merge pull request #756 from ydb-platform/754-retry-eof
Mark io.EOF error as retriable for topic
2 parents a93a005 + 2f6df23 commit a016a4c

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
* Fixed stopping topic reader by grpc stream shutdown
12
* Fixed `database/sql` driver for get and parse container ydb types
23
* Changed `table/scanner.scanner.Any()` behaviour: for non-primitive types returns raw `table/types.Value` instead nil from previous behaviour
34
* Added `table/types.{ListItems,VariantValue,DictValues}` helpers for get internal content of abstract `table/types.Value`

internal/topic/retriable_error.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package topic
22

33
import (
4+
"errors"
45
"fmt"
6+
"io"
57
"time"
68

79
"github.com/ydb-platform/ydb-go-sdk/v3/internal/backoff"
10+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
811
"github.com/ydb-platform/ydb-go-sdk/v3/retry"
912
)
1013

@@ -53,6 +56,11 @@ func CheckRetryMode(err error, settings RetrySettings, retriesDuration time.Dura
5356
return nil, false
5457
}
5558

59+
// eof is retriable for topic
60+
if errors.Is(err, io.EOF) && xerrors.RetryableError(err) == nil {
61+
err = xerrors.Retryable(err, xerrors.WithName("TopicEOF"))
62+
}
63+
5664
if retriesDuration > settings.StartTimeout {
5765
return nil, false
5866
}

internal/topic/retriable_error_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package topic
22

33
import (
4+
"fmt"
5+
"io"
46
"testing"
57
"time"
68

@@ -212,6 +214,14 @@ func TestCheckRetryMode(t *testing.T) {
212214
resBackoff: nil,
213215
resRetriable: false,
214216
},
217+
{
218+
name: "EOF", // Issue https://github.com/ydb-platform/ydb-go-sdk/issues/754
219+
err: fmt.Errorf("test wrap: %w", io.EOF),
220+
settings: RetrySettings{},
221+
duration: 0,
222+
resBackoff: backoff.Slow,
223+
resRetriable: true,
224+
},
215225
}
216226

217227
for _, test := range table {

0 commit comments

Comments
 (0)