Skip to content

Commit

Permalink
Merge pull request #352 from authzed/more-linting
Browse files Browse the repository at this point in the history
Fix linter for many packages
  • Loading branch information
jzelinskie committed Dec 28, 2021
2 parents 902678c + 8c768a1 commit 698ec60
Show file tree
Hide file tree
Showing 76 changed files with 412 additions and 371 deletions.
7 changes: 1 addition & 6 deletions .github/workflows/lint.yaml
Expand Up @@ -15,17 +15,12 @@ jobs:
- uses: "actions/setup-go@v2"
with:
go-version: "^1.17"
- name: "Install linting tools"
run: |
# This is done before checking out, as to not modify go.mod
go install mvdan.cc/gofumpt/gofumports@v0.1.1
go install golang.org/x/tools/cmd/stringer@latest
- uses: "actions/checkout@v2"
- name: "Go Mod Tidy"
run: "go mod tidy && bash -c '[ $(git status --porcelain | tee /dev/fd/2 | wc -c) -eq 0 ]'"
- name: "Formatting (gofumpt)"
run: |
GOFUMPT_OUTPUT="$(find . -iname '*.go' -type f | grep -v pb.validate.go | grep -v pb.go | xargs gofumports -d)"
GOFUMPT_OUTPUT="$(find . -iname '*.go' -type f | grep -v pb.validate.go | grep -v pb.go | xargs go run mvdan.cc/gofumpt -d)"
if [ -n "$GOFUMPT_OUTPUT" ]; then
echo "All the following files are not correctly formatted"
echo "${GOFUMPT_OUTPUT}"
Expand Down
47 changes: 20 additions & 27 deletions .golangci.yaml
Expand Up @@ -10,57 +10,50 @@ linters-settings:
packages:
- "github.com/jmoiron/sqlx"
- "github.com/jackc/pgx"
gosec:
excludes:
- "G404" # Allow the usage of math/rand
linters:
enable:
- "bidichk"
- "bodyclose"
- "deadcode"
- "errcheck"
- "errname"
- "errorlint"
- "gofumpt"
- "goimports"
- "goprintffuncname"
- "gosec"
- "gosimple"
- "govet"
- "ifshort"
- "importas"
- "ineffassign"
- "makezero"
- "prealloc"
- "predeclared"
- "promlinter"
- "revive"
- "rowserrcheck"
- "staticcheck"
- "structcheck"
- "stylecheck"
- "tenv"
- "typecheck"
- "unconvert"
- "unused"
- "varcheck"
- "wastedassign"
- "whitespace"
issues:
exclude-rules:
- path: "internal/dispatch"
linters:
- "revive"
- path: "internal/graph"
linters:
- "revive"
- path: "internal/namespace"
linters:
- "revive"
- path: "internal/testfixtures"
linters:
- "revive"
- path: "pkg/consistent"
linters:
- "revive"
- path: "pkg/graph"
linters:
- "revive"
- path: "pkg/membership"
linters:
- "revive"
- path: "pkg/migrate"
linters:
- "revive"
- path: "pkg/namespace"
linters:
- "revive"
- path: "pkg/schemadsl"
linters:
- "revive"
- path: "pkg/validation"
linters:
- "revive"
- text: "tx.Rollback()"
linters:
- "errcheck"
3 changes: 2 additions & 1 deletion go.mod
Expand Up @@ -66,12 +66,13 @@ require (
golang.org/x/net v0.0.0-20211104170005-ce137452f963 // indirect
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect
golang.org/x/tools v0.1.8 // indirect
golang.org/x/tools v0.1.8
google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1
google.golang.org/grpc v1.42.0
google.golang.org/protobuf v1.27.1
gopkg.in/yaml.v2 v2.4.0
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
mvdan.cc/gofumpt v0.2.1
)

// TODO(jschorr): Remove once https://github.com/dgraph-io/ristretto/pull/286 is merged
Expand Down
18 changes: 16 additions & 2 deletions go.sum
Expand Up @@ -133,6 +133,7 @@ github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfc
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw=
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
Expand Down Expand Up @@ -184,6 +185,8 @@ github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga
github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o=
github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
github.com/frankban/quicktest v1.14.0 h1:+cqqvzZV87b4adx/5ayVOaYZ2CrvM4ejQvUdBzPPUss=
github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
Expand Down Expand Up @@ -440,12 +443,14 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw=
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o=
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk=
Expand Down Expand Up @@ -529,6 +534,8 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9
github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM=
github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
Expand Down Expand Up @@ -567,6 +574,9 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg=
github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
Expand Down Expand Up @@ -942,6 +952,7 @@ golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
Expand Down Expand Up @@ -1183,6 +1194,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s=
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
Expand Down Expand Up @@ -1214,6 +1226,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
mvdan.cc/gofumpt v0.2.1 h1:7jakRGkQcLAJdT+C8Bwc9d0BANkVPSkHZkzNv07pJAs=
mvdan.cc/gofumpt v0.2.1/go.mod h1:a/rvZPhsNaedOJBzqRD9omnwVwHZsBdJirXHa9Gh9Ig=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
2 changes: 1 addition & 1 deletion internal/auth/presharedkey.go
Expand Up @@ -14,7 +14,7 @@ const errInvalidPresharedKey = "invalid preshared key: %w"
var errInvalidToken = errors.New("invalid token")

// RequirePresharedKey requires that gRPC requests have a Bearer Token value
// equivalant to the provided preshared key.
// equivalent to the provided preshared key.
func RequirePresharedKey(presharedKey string) grpcauth.AuthFunc {
return func(ctx context.Context) (context.Context, error) {
token, err := grpcauth.AuthFromMD(ctx, "bearer")
Expand Down
10 changes: 5 additions & 5 deletions internal/dashboard/dashboard.go
Expand Up @@ -41,7 +41,7 @@ const rootTemplate = `
<body>
{{if .IsReady }}
{{if .IsEmpty}}
<h1>Definining the permissions schema</h1>
<h1>Defining the permissions schema</h1>
<p>
To begin making API requests to SpiceDB, you'll first need to load in a <a href="https://docs.authzed.com/reference/schema-lang" target="_blank" rel="noopener">Schema</a>
that defines the permissions system.
Expand Down Expand Up @@ -111,14 +111,14 @@ func NewHandler(grpcAddr string, grpcTLSEnabled bool, datastoreEngine string, ds
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
tmpl, err := template.New("root").Parse(rootTemplate)
if err != nil {
log.Ctx(r.Context()).Error().AnErr("template-error", err).Msg("Got error when parsing template")
log.Ctx(r.Context()).Error().AnErr("templateError", err).Msg("Got error when parsing template")
fmt.Fprintf(w, "Internal Error")
return
}

isReady, err := ds.IsReady(r.Context())
if err != nil {
log.Ctx(r.Context()).Error().AnErr("template-error", err).Msg("Got error when checking database")
log.Ctx(r.Context()).Error().AnErr("templateError", err).Msg("Got error when checking database")
fmt.Fprintf(w, "Internal Error")
return
}
Expand All @@ -140,7 +140,7 @@ func NewHandler(grpcAddr string, grpcTLSEnabled bool, datastoreEngine string, ds

nsDefs, err := ds.ListNamespaces(r.Context(), headRevision)
if err != nil {
log.Ctx(r.Context()).Error().AnErr("datastore-error", err).Msg("Got error when trying to load namespaces")
log.Ctx(r.Context()).Error().AnErr("datastoreError", err).Msg("Got error when trying to load namespaces")
fmt.Fprintf(w, "Internal Error")
return
}
Expand Down Expand Up @@ -179,7 +179,7 @@ func NewHandler(grpcAddr string, grpcTLSEnabled bool, datastoreEngine string, ds
HasSampleSchema: hasSampleSchema,
})
if err != nil {
log.Ctx(r.Context()).Error().AnErr("template-error", err).Msg("Got error when executing template")
log.Ctx(r.Context()).Error().AnErr("templateError", err).Msg("Got error when executing template")
fmt.Fprintf(w, "Internal Error")
return
}
Expand Down
2 changes: 1 addition & 1 deletion internal/datastore/common/validation.go
Expand Up @@ -18,7 +18,7 @@ func ValidateUpdatesToWrite(updates []*v1.RelationshipUpdate) error {

if update.Relationship.Subject.Object.ObjectId == tuple.PublicWildcard && update.Relationship.Subject.OptionalRelation != "" {
return fmt.Errorf(
"Attempt to write a wildcard relationship (`%s`) with a non-empty relation. Please report this bug",
"attempt to write a wildcard relationship (`%s`) with a non-empty relation. Please report this bug",
tuple.RelString(update.Relationship),
)
}
Expand Down
4 changes: 3 additions & 1 deletion internal/datastore/crdb/migrations/driver.go
Expand Up @@ -2,6 +2,7 @@ package migrations

import (
"context"
"errors"
"fmt"

"github.com/jackc/pgconn"
Expand Down Expand Up @@ -49,7 +50,8 @@ func (apd *CRDBDriver) Version() (string, error) {
var loaded string

if err := apd.db.QueryRow(context.Background(), queryLoadVersion).Scan(&loaded); err != nil {
if pgErr, ok := err.(*pgconn.PgError); ok && pgErr.Code == postgresMissingTableErrorCode {
var pgErr *pgconn.PgError
if errors.As(err, &pgErr) && pgErr.Code == postgresMissingTableErrorCode {
return "", nil
}
return "", fmt.Errorf("unable to load alembic revision: %w", err)
Expand Down
2 changes: 1 addition & 1 deletion internal/datastore/crdb/namespace.go
Expand Up @@ -148,7 +148,7 @@ func loadNamespace(ctx context.Context, tx pgx.Tx, nsName string) (*v0.Namespace
var config []byte
var timestamp time.Time
if err := tx.QueryRow(ctx, sql, args...).Scan(&config, &timestamp); err != nil {
if err == pgx.ErrNoRows {
if errors.Is(err, pgx.ErrNoRows) {
err = datastore.NewNamespaceNotFoundErr(nsName)
}
return nil, time.Time{}, err
Expand Down
2 changes: 1 addition & 1 deletion internal/datastore/crdb/tuple.go
Expand Up @@ -279,7 +279,7 @@ func (cds *crdbDatastore) DeleteRelationships(ctx context.Context, preconditions
}

if err := tx.QueryRow(ctx, sql, args...).Scan(&nowRevision); err != nil {
if err == pgx.ErrNoRows {
if errors.Is(err, pgx.ErrNoRows) {
// CRDB doesn't return the cluster_logical_timestamp if no rows were deleted
// so we have to read it manually in the same transaction.
nowRevision, err = readCRDBNow(ctx, tx)
Expand Down
35 changes: 18 additions & 17 deletions internal/datastore/crdb/watch.go
Expand Up @@ -3,6 +3,7 @@ package crdb
import (
"context"
"encoding/json"
"errors"
"fmt"
"sort"

Expand All @@ -16,22 +17,22 @@ const queryChangefeed = "EXPERIMENTAL CHANGEFEED FOR %s WITH updated, cursor = '

func (cds *crdbDatastore) Watch(ctx context.Context, afterRevision datastore.Revision) (<-chan *datastore.RevisionChanges, <-chan error) {
updates := make(chan *datastore.RevisionChanges, cds.watchBufferLength)
errors := make(chan error, 1)
errs := make(chan error, 1)

interpolated := fmt.Sprintf(queryChangefeed, tableTuple, afterRevision)

go func() {
defer close(updates)
defer close(errors)
defer close(errs)

pendingChanges := make(map[string]*datastore.RevisionChanges)

changes, err := cds.conn.Query(ctx, interpolated)
if err != nil {
if ctx.Err() == context.Canceled {
errors <- datastore.NewWatchCanceledErr()
if errors.Is(ctx.Err(), context.Canceled) {
errs <- datastore.NewWatchCanceledErr()
} else {
errors <- err
errs <- err
}
return
}
Expand All @@ -46,10 +47,10 @@ func (cds *crdbDatastore) Watch(ctx context.Context, afterRevision datastore.Rev
var primaryKeyValuesJSON []byte

if err := changes.Scan(&unused, &primaryKeyValuesJSON, &changeJSON); err != nil {
if ctx.Err() == context.Canceled {
errors <- datastore.NewWatchCanceledErr()
if errors.Is(ctx.Err(), context.Canceled) {
errs <- datastore.NewWatchCanceledErr()
} else {
errors <- err
errs <- err
}
return
}
Expand All @@ -60,15 +61,15 @@ func (cds *crdbDatastore) Watch(ctx context.Context, afterRevision datastore.Rev
After interface{}
}
if err := json.Unmarshal(changeJSON, &changeDetails); err != nil {
errors <- err
errs <- err
return
}

if changeDetails.Resolved != "" {
// This entry indicates that we are ready to potentially emit some changes
resolved, err := decimal.NewFromString(changeDetails.Resolved)
if err != nil {
errors <- err
errs <- err
return
}

Expand All @@ -89,7 +90,7 @@ func (cds *crdbDatastore) Watch(ctx context.Context, afterRevision datastore.Rev
select {
case updates <- change:
default:
errors <- datastore.NewWatchDisconnectedErr()
errs <- datastore.NewWatchDisconnectedErr()
return
}
}
Expand All @@ -99,13 +100,13 @@ func (cds *crdbDatastore) Watch(ctx context.Context, afterRevision datastore.Rev

var pkValues [6]string
if err := json.Unmarshal(primaryKeyValuesJSON, &pkValues); err != nil {
errors <- err
errs <- err
return
}

revision, err := decimal.NewFromString(changeDetails.Updated)
if err != nil {
errors <- fmt.Errorf("malformed update timestamp: %w", err)
errs <- fmt.Errorf("malformed update timestamp: %w", err)
return
}

Expand Down Expand Up @@ -144,13 +145,13 @@ func (cds *crdbDatastore) Watch(ctx context.Context, afterRevision datastore.Rev
pending.Changes = append(pending.Changes, oneChange)
}
if changes.Err() != nil {
if ctx.Err() == context.Canceled {
errors <- datastore.NewWatchCanceledErr()
if errors.Is(ctx.Err(), context.Canceled) {
errs <- datastore.NewWatchCanceledErr()
} else {
errors <- changes.Err()
errs <- changes.Err()
}
return
}
}()
return updates, errors
return updates, errs
}

0 comments on commit 698ec60

Please sign in to comment.