diff --git a/.golangci.yml b/.golangci.yml index 854ab8051..fddafd668 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -32,7 +32,7 @@ linters: - depguard - dogsled - errcheck -# - errorlint + - errorlint - exportloopref # - goconst # - gocritic diff --git a/fdbclient/admin_client.go b/fdbclient/admin_client.go index b3cfb4d4a..82175de17 100644 --- a/fdbclient/admin_client.go +++ b/fdbclient/admin_client.go @@ -23,6 +23,7 @@ package fdbclient import ( "context" "encoding/json" + "errors" "fmt" "os" "os/exec" @@ -217,8 +218,8 @@ func (client *cliAdminClient) runCommand(command cliCommand) (string, error) { output, err := execCommand.CombinedOutput() if err != nil { - exitError, canCast := err.(*exec.ExitError) - if canCast { + var exitError *exec.ExitError + if errors.As(err, &exitError) { client.log.Error(exitError, "Error from FDB command", "namespace", client.Cluster.Namespace, "cluster", client.Cluster.Name, "code", exitError.ProcessState.ExitCode(), "stdout", string(output), "stderr", string(exitError.Stderr)) } @@ -263,7 +264,8 @@ func (client *cliAdminClient) runCommandWithBackoff(command string) (string, err break } - if _, ok := err.(fdbv1beta2.TimeoutError); ok { + var timoutError *fdbv1beta2.TimeoutError + if errors.As(err, &timoutError) { client.log.Info("timeout issue will retry with higher timeout") currentTimeout *= 2 continue diff --git a/fdbclient/common.go b/fdbclient/common.go index 6b7b9579c..0d959b643 100644 --- a/fdbclient/common.go +++ b/fdbclient/common.go @@ -21,6 +21,7 @@ package fdbclient import ( + "errors" "fmt" "os" "time" @@ -102,7 +103,8 @@ func getValueFromDBUsingKey(cluster *fdbv1beta2.FoundationDBCluster, log logr.Lo }) if err != nil { - if fdbError, ok := err.(fdb.Error); ok { + var fdbError *fdb.Error + if errors.As(err, &fdbError) { // See: https://apple.github.io/foundationdb/api-error-codes.html // 1031: Operation aborted because the transaction timed out if fdbError.Code == 1031 { diff --git a/internal/error_helper.go b/internal/error_helper.go index 5901e5b2b..9ddb72ccd 100644 --- a/internal/error_helper.go +++ b/internal/error_helper.go @@ -32,28 +32,14 @@ import ( // IsNetworkError returns true if the network is a network error net.Error func IsNetworkError(err error) bool { - for err != nil { - if _, ok := err.(net.Error); ok { - return true - } - - err = errors.Unwrap(err) - } - - return false + var netError net.Error + return errors.As(err, &netError) } // IsTimeoutError returns true if the observed error was a timeout error func IsTimeoutError(err error) bool { - for err != nil { - if _, ok := err.(fdbv1beta2.TimeoutError); ok { - return true - } - - err = errors.Unwrap(err) - } - - return false + var timeoutError fdbv1beta2.TimeoutError + return errors.As(err, &timeoutError) } // IsQuotaExceeded returns true if the error returned by the Kubernetes API is a forbidden error with the error message diff --git a/internal/pod_client_test.go b/internal/pod_client_test.go index c9cf9be34..0a25cc429 100644 --- a/internal/pod_client_test.go +++ b/internal/pod_client_test.go @@ -21,13 +21,14 @@ package internal import ( + "net/http" + "net/url" + "time" + fdbv1beta2 "github.com/FoundationDB/fdb-kubernetes-operator/api/v1beta2" "github.com/hashicorp/go-retryablehttp" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - "net/http" - "net/url" - "time" ) var _ = Describe("pod_client", func() {