Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(spanner): drop errors backwards compatibility #9757

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 4 additions & 3 deletions spanner/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package spanner

import (
"context"
"errors"
"fmt"
"io"
"math/big"
Expand Down Expand Up @@ -3736,7 +3737,7 @@ func TestReadWriteTransaction_ContextTimeoutDuringCommit(t *testing.T) {

w := toSpannerErrorWithCommitInfo(errContext.Err(), true).(*Error)
var se *Error
if !errorAs(err, &se) {
if !errors.As(err, &se) {
t.Fatalf("Error mismatch\nGot: %v\nWant: %v", err, w)
}
if se.GRPCStatus().Code() != w.GRPCStatus().Code() {
Expand All @@ -3746,7 +3747,7 @@ func TestReadWriteTransaction_ContextTimeoutDuringCommit(t *testing.T) {
t.Fatalf("Error message mismatch:\nGot %s\nWant: %s", se.Error(), w.Error())
}
var outcome *TransactionOutcomeUnknownError
if !errorAs(err, &outcome) {
if !errors.As(err, &outcome) {
t.Fatalf("Missing wrapped TransactionOutcomeUnknownError error")
}
}
Expand Down Expand Up @@ -3944,7 +3945,7 @@ func TestClient_WithGRPCConnectionPoolAndNumChannels_Misconfigured(t *testing.T)
t.Fatalf("Error mismatch\nGot: nil\nWant: %s", msg)
}
var se *Error
if ok := errorAs(err, &se); !ok {
if ok := errors.As(err, &se); !ok {
t.Fatalf("Error mismatch\nGot: %v\nWant: An instance of a Spanner error", err)
}
if g, w := se.GRPCStatus().Code(), codes.InvalidArgument; g != w {
Expand Down
11 changes: 6 additions & 5 deletions spanner/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package spanner

import (
"context"
"errors"
"fmt"

"github.com/googleapis/gax-go/v2/apierror"
Expand Down Expand Up @@ -94,7 +95,7 @@ func (e *Error) Unwrap() error {
// This allows the error to be converted to a gRPC status using
// `status.Convert(error)`.
func (e *Error) GRPCStatus() *status.Status {
err := unwrap(e)
err := errors.Unwrap(e)
for {
// If the base error is nil, return status created from e.Code and e.Desc.
if err == nil {
Expand All @@ -104,7 +105,7 @@ func (e *Error) GRPCStatus() *status.Status {
if code != codes.Unknown {
return status.New(code, e.Desc)
}
err = unwrap(err)
err = errors.Unwrap(err)
}
}

Expand Down Expand Up @@ -155,7 +156,7 @@ func toSpannerErrorWithCommitInfo(err error, errorDuringCommit bool) error {
return nil
}
var se *Error
if errorAs(err, &se) {
if errors.As(err, &se) {
return se
}
switch {
Expand Down Expand Up @@ -193,7 +194,7 @@ func ErrCode(err error) codes.Code {
// ErrDesc extracts the Cloud Spanner error description from a Go error.
func ErrDesc(err error) string {
var se *Error
if !errorAs(err, &se) {
if !errors.As(err, &se) {
return err.Error()
}
return se.Desc
Expand All @@ -204,7 +205,7 @@ func ErrDesc(err error) string {
func extractResourceType(err error) (string, bool) {
var s *status.Status
var se *Error
if errorAs(err, &se) {
if errors.As(err, &se) {
// Unwrap statusError.
s = status.Convert(se.Unwrap())
} else {
Expand Down
34 changes: 0 additions & 34 deletions spanner/errors112.go

This file was deleted.

34 changes: 0 additions & 34 deletions spanner/errors113.go

This file was deleted.

2 changes: 1 addition & 1 deletion spanner/errors_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ func TestAPIErrorBackwardCompatibility(t *testing.T) {
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
var got *apierror.APIError
ok := errorAs(tc.clientError, &got)
ok := errors.As(tc.clientError, &got)
if !ok {
t.Error("error unwrapping spanner.Error to apierror.APIError")
}
Expand Down
1 change: 0 additions & 1 deletion spanner/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ require (
go.opentelemetry.io/otel v1.24.0
go.opentelemetry.io/otel/metric v1.24.0
golang.org/x/oauth2 v0.20.0
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028
google.golang.org/api v0.182.0
google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda
google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157
Expand Down
2 changes: 0 additions & 2 deletions spanner/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1269,8 +1269,6 @@ golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0=
Expand Down
3 changes: 2 additions & 1 deletion spanner/pdml_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package spanner
import (
"bytes"
"context"
"errors"
"io/ioutil"
"log"
"os"
Expand Down Expand Up @@ -57,7 +58,7 @@ func TestMockPartitionedUpdateWithQuery(t *testing.T) {
_, err := client.PartitionedUpdate(ctx, stmt)
wantCode := codes.InvalidArgument
var serr *Error
if !errorAs(err, &serr) {
if !errors.As(err, &serr) {
t.Errorf("got error %v, want spanner.Error", err)
}
if ErrCode(serr) != wantCode {
Expand Down
5 changes: 3 additions & 2 deletions spanner/retry.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package spanner

import (
"context"
"errors"
"strings"
"time"

Expand Down Expand Up @@ -98,7 +99,7 @@ func runWithRetryOnAbortedOrFailedInlineBeginOrSessionNotFound(ctx context.Conte
// interface.
var retryErr error
var se *Error
if errorAs(err, &se) {
if errors.As(err, &se) {
// It is a (wrapped) Spanner error. Use that to check whether
// we should retry.
retryErr = se
Expand Down Expand Up @@ -136,7 +137,7 @@ func ExtractRetryDelay(err error) (time.Duration, bool) {
var se *Error
var s *status.Status
// Unwrap status error.
if errorAs(err, &se) {
if errors.As(err, &se) {
s = status.Convert(se.Unwrap())
} else {
s = status.Convert(err)
Expand Down
3 changes: 2 additions & 1 deletion spanner/row.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ limitations under the License.
package spanner

import (
"errors"
"fmt"
"reflect"
"strings"
Expand Down Expand Up @@ -205,7 +206,7 @@ func errDecodeColumn(i int, err error) error {
return nil
}
var se *Error
if !errorAs(err, &se) {
if !errors.As(err, &se) {
return spannerErrorf(codes.InvalidArgument, "failed to decode column %v, error = <%v>", i, err)
}
se.decorate(fmt.Sprintf("failed to decode column %v", i))
Expand Down
3 changes: 2 additions & 1 deletion spanner/statement.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ limitations under the License.
package spanner

import (
"errors"
"fmt"

sppb "cloud.google.com/go/spanner/apiv1/spannerpb"
Expand Down Expand Up @@ -75,7 +76,7 @@ func errBindParam(k string, v interface{}, err error) error {
return nil
}
var se *Error
if !errorAs(err, &se) {
if !errors.As(err, &se) {
return spannerErrorf(codes.InvalidArgument, "failed to bind query parameter(name: %q, value: %v), error = <%v>", k, v, err)
}
se.decorate(fmt.Sprintf("failed to bind query parameter(name: %q, value: %v)", k, v))
Expand Down
1 change: 0 additions & 1 deletion spanner/test/opentelemetry/test/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ require (
golang.org/x/sys v0.20.0 // indirect
golang.org/x/text v0.15.0 // indirect
golang.org/x/time v0.5.0 // indirect
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect
Expand Down
1 change: 0 additions & 1 deletion spanner/test/opentelemetry/test/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -2061,7 +2061,6 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
Expand Down
5 changes: 3 additions & 2 deletions spanner/value.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"database/sql/driver"
"encoding/base64"
"encoding/json"
"errors"
"fmt"
"math"
"math/big"
Expand Down Expand Up @@ -3260,7 +3261,7 @@ func errNilListValue(sqlType string) error {
// errDecodeArrayElement returns error for failure in decoding single array element.
func errDecodeArrayElement(i int, v proto.Message, sqlType string, err error) error {
var se *Error
if !errorAs(err, &se) {
if !errors.As(err, &se) {
return spannerErrorf(codes.Unknown,
"cannot decode %v(array element %v) as %v, error = <%v>", v, i, sqlType, err)
}
Expand Down Expand Up @@ -3842,7 +3843,7 @@ func errDupSpannerField(f string, ty *sppb.StructType) error {
// a Cloud Spanner STRUCT.
func errDecodeStructField(ty *sppb.StructType, f string, err error) error {
var se *Error
if !errorAs(err, &se) {
if !errors.As(err, &se) {
return spannerErrorf(codes.Unknown,
"cannot decode field %v of Cloud Spanner STRUCT %+v, error = <%v>", f, ty, err)
}
Expand Down