Skip to content

Commit

Permalink
Improve retries
Browse files Browse the repository at this point in the history
  • Loading branch information
vitalyisaev2 committed Sep 6, 2024
1 parent e5750ca commit 10ae9b5
Show file tree
Hide file tree
Showing 9 changed files with 24 additions and 119 deletions.
28 changes: 0 additions & 28 deletions app/server/datasource/rdbms/clickhouse/retry.go

This file was deleted.

12 changes: 6 additions & 6 deletions app/server/datasource/rdbms/data_source_factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ func NewDataSourceFactory(
TypeMapper: clickhouseTypeMapper,
SchemaProvider: rdbms_utils.NewDefaultSchemaProvider(clickhouseTypeMapper, clickhouse.TableMetadataQuery),
RetrierSet: &retry.RetrierSet{
MakeConnection: retry.NewRetrierFromConfig(cfg.Clickhouse.ExponentialBackoff, clickhouse.ErrorCheckerMakeConnection),
MakeConnection: retry.NewRetrierFromConfig(cfg.Clickhouse.ExponentialBackoff, retry.ErrorCheckerMakeConnectionCommon),
Query: retry.NewRetrierFromConfig(cfg.Clickhouse.ExponentialBackoff, retry.ErrorCheckerNoop),
},
},
Expand All @@ -103,7 +103,7 @@ func NewDataSourceFactory(
schemaGetters[api_common.EDataSourceKind_POSTGRESQL](request.DataSourceInstance))
}),
RetrierSet: &retry.RetrierSet{
MakeConnection: retry.NewRetrierFromConfig(cfg.Postgresql.ExponentialBackoff, postgresql.ErrorCheckerMakeConnection),
MakeConnection: retry.NewRetrierFromConfig(cfg.Postgresql.ExponentialBackoff, retry.ErrorCheckerMakeConnectionCommon),
Query: retry.NewRetrierFromConfig(cfg.Postgresql.ExponentialBackoff, retry.ErrorCheckerNoop),
},
},
Expand All @@ -113,7 +113,7 @@ func NewDataSourceFactory(
TypeMapper: ydbTypeMapper,
SchemaProvider: ydb.NewSchemaProvider(ydbTypeMapper),
RetrierSet: &retry.RetrierSet{
MakeConnection: retry.NewRetrierFromConfig(cfg.Ydb.ExponentialBackoff, ydb.ErrorCheckerMakeConnection),
MakeConnection: retry.NewRetrierFromConfig(cfg.Ydb.ExponentialBackoff, retry.ErrorCheckerMakeConnectionCommon),
Query: retry.NewRetrierFromConfig(cfg.Ydb.ExponentialBackoff, ydb.ErrorCheckerQuery),
},
},
Expand All @@ -123,7 +123,7 @@ func NewDataSourceFactory(
TypeMapper: msSQLServerTypeMapper,
SchemaProvider: rdbms_utils.NewDefaultSchemaProvider(msSQLServerTypeMapper, ms_sql_server.TableMetadataQuery),
RetrierSet: &retry.RetrierSet{
MakeConnection: retry.NewRetrierFromConfig(cfg.MsSqlServer.ExponentialBackoff, ms_sql_server.ErrorCheckerMakeConnection),
MakeConnection: retry.NewRetrierFromConfig(cfg.MsSqlServer.ExponentialBackoff, retry.ErrorCheckerMakeConnectionCommon),
Query: retry.NewRetrierFromConfig(cfg.MsSqlServer.ExponentialBackoff, retry.ErrorCheckerNoop),
},
},
Expand All @@ -133,7 +133,7 @@ func NewDataSourceFactory(
TypeMapper: mysqlTypeMapper,
SchemaProvider: rdbms_utils.NewDefaultSchemaProvider(mysqlTypeMapper, mysql.TableMetadataQuery),
RetrierSet: &retry.RetrierSet{
MakeConnection: retry.NewRetrierFromConfig(cfg.Mysql.ExponentialBackoff, mysql.ErrorCheckerMakeConnection),
MakeConnection: retry.NewRetrierFromConfig(cfg.Mysql.ExponentialBackoff, retry.ErrorCheckerMakeConnectionCommon),
Query: retry.NewRetrierFromConfig(cfg.Mysql.ExponentialBackoff, retry.ErrorCheckerNoop),
},
},
Expand All @@ -150,7 +150,7 @@ func NewDataSourceFactory(
schemaGetters[api_common.EDataSourceKind_GREENPLUM](request.DataSourceInstance))
}),
RetrierSet: &retry.RetrierSet{
MakeConnection: retry.NewRetrierFromConfig(cfg.Greenplum.ExponentialBackoff, postgresql.ErrorCheckerMakeConnection),
MakeConnection: retry.NewRetrierFromConfig(cfg.Greenplum.ExponentialBackoff, retry.ErrorCheckerMakeConnectionCommon),
Query: retry.NewRetrierFromConfig(cfg.Greenplum.ExponentialBackoff, retry.ErrorCheckerNoop),
},
},
Expand Down
20 changes: 0 additions & 20 deletions app/server/datasource/rdbms/ms_sql_server/retry.go

This file was deleted.

16 changes: 0 additions & 16 deletions app/server/datasource/rdbms/mysql/retry.go

This file was deleted.

6 changes: 0 additions & 6 deletions app/server/datasource/rdbms/oracle/retry.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package oracle

import (
"context"
"errors"
"net"
"strings"
Expand All @@ -18,10 +17,5 @@ func ErrorCheckerMakeConnection(err error) bool {
}
}

// Also happens on CI
if strings.Contains(err.Error(), context.DeadlineExceeded.Error()) {
return true
}

return retry.ErrorCheckerMakeConnectionCommon(err)
}
17 changes: 0 additions & 17 deletions app/server/datasource/rdbms/postgresql/retry.go

This file was deleted.

14 changes: 0 additions & 14 deletions app/server/datasource/rdbms/postgresql/retry_test.go

This file was deleted.

12 changes: 0 additions & 12 deletions app/server/datasource/rdbms/ydb/retry.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,10 @@
package ydb

import (
"strings"

"github.com/ydb-platform/ydb-go-sdk/v3"
grpc_codes "google.golang.org/grpc/codes"

"github.com/ydb-platform/fq-connector-go/app/server/utils/retry"
)

func ErrorCheckerMakeConnection(err error) bool {
if strings.Contains(err.Error(), "server misbehaving") {
return true
}

return retry.ErrorCheckerMakeConnectionCommon(err)
}

func ErrorCheckerQuery(err error) bool {
switch {
case ydb.IsTransportError(err, grpc_codes.ResourceExhausted):
Expand Down
18 changes: 18 additions & 0 deletions app/server/utils/retry/error_checker.go
Original file line number Diff line number Diff line change
@@ -1,25 +1,39 @@
package retry

import (
"context"
"errors"
"net"
"os"
"strings"
"syscall"
)

type ErrorChecker func(err error) bool

func ErrorCheckerMakeConnectionCommon(err error) bool {
// 'i/o timeout'
if strings.Contains(err.Error(), "i/o timeout") {
return true

Check warning on line 17 in app/server/utils/retry/error_checker.go

View check run for this annotation

Codecov / codecov/patch

app/server/utils/retry/error_checker.go#L16-L17

Added lines #L16 - L17 were not covered by tests
}

if errors.Is(err, os.ErrDeadlineExceeded) {
return true
}

if strings.Contains(err.Error(), context.DeadlineExceeded.Error()) {
return true

Check warning on line 25 in app/server/utils/retry/error_checker.go

View check run for this annotation

Codecov / codecov/patch

app/server/utils/retry/error_checker.go#L24-L25

Added lines #L24 - L25 were not covered by tests
}

// 'connection refused'
if errors.Is(err, syscall.ECONNREFUSED) {
return true
}

if strings.Contains(err.Error(), "connection refused") {
return true

Check warning on line 34 in app/server/utils/retry/error_checker.go

View check run for this annotation

Codecov / codecov/patch

app/server/utils/retry/error_checker.go#L33-L34

Added lines #L33 - L34 were not covered by tests
}

// DNS errors typically caused by CI overload, like 'server misbehaving' and so on.
var dnsError *net.DNSError
if errors.As(err, &dnsError) {
Expand All @@ -28,6 +42,10 @@ func ErrorCheckerMakeConnectionCommon(err error) bool {
}
}

if strings.Contains(err.Error(), "server misbehaving") {
return true

Check warning on line 46 in app/server/utils/retry/error_checker.go

View check run for this annotation

Codecov / codecov/patch

app/server/utils/retry/error_checker.go#L45-L46

Added lines #L45 - L46 were not covered by tests
}

return false
}

Expand Down

0 comments on commit 10ae9b5

Please sign in to comment.