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

Fix linter for many packages #352

Merged
merged 27 commits into from Dec 28, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
4ec10de
pkg/schemadsl: remove InputSource stutter
jzelinskie Dec 25, 2021
486e37c
pkg/namespace: fix snake_case variable
jzelinskie Dec 25, 2021
3c73a0c
pkg/migrate: remove lint exception
jzelinskie Dec 25, 2021
989447c
pkg/membership: remove stutter
jzelinskie Dec 25, 2021
bf9f358
pkg/graph: remove lint exception
jzelinskie Dec 25, 2021
6094683
pkg/consistent: remove lint exception
jzelinskie Dec 25, 2021
9969e4f
internal/graph: remove lint exception
jzelinskie Dec 25, 2021
ac19b7b
internal/dispatch: remove caching stutter
jzelinskie Dec 25, 2021
436ebcd
internal/testfixtures: pass linter
jzelinskie Dec 25, 2021
bea9c91
.github: move to the latest gofumpt
jzelinskie Dec 25, 2021
0eb6436
go.mod: vendor linter tools
jzelinskie Dec 25, 2021
78ce7fb
*: gofumpt broken files
jzelinskie Dec 25, 2021
f33e2ff
golangci-lint: enable errorlint
jzelinskie Dec 26, 2021
34830cc
golangci-lint: enable goprintffuncname
jzelinskie Dec 26, 2021
c7a9f48
golangci-lint: enable gosec
jzelinskie Dec 26, 2021
e65466f
golangci-lint: enable ifshort
jzelinskie Dec 26, 2021
588fef4
golangci-lint: enable importas
jzelinskie Dec 26, 2021
2e96f12
golangci-lint: enable makezero
jzelinskie Dec 26, 2021
756de97
*: fixes common typos
jzelinskie Dec 26, 2021
ccfe4ab
golangci-lint: enable prealloc
jzelinskie Dec 26, 2021
7cefc24
golangci-lint: enable promlinter
jzelinskie Dec 26, 2021
1d33c49
golangci-lint: enable stylecheck
jzelinskie Dec 26, 2021
f68e142
golangci-lint: enable tenv
jzelinskie Dec 26, 2021
719e6db
golangci-lint: enable unconvert
jzelinskie Dec 26, 2021
a059128
golangci-lint: enable wastedassign
jzelinskie Dec 26, 2021
15bdb00
golangci-lint: enable whitespace
jzelinskie Dec 26, 2021
8c768a1
zerolog: fix non-camelCase fields
jzelinskie Dec 27, 2021
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: 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
}