Skip to content

Commit e54fd1e

Browse files
committed
Merge pull request #3 from amazon-contributing/use-occretry-v0.3.0
chore: use aurora-dsql-connectors v0.3.0 occretry package
2 parents 65c366f + 02a622c commit e54fd1e

4 files changed

Lines changed: 49 additions & 82 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Try to keep listed changes to a concise bulleted list of simple explanations of
1313
### Changed
1414
- The ListObjects "pipeline" algorithm ditches its custom Pipe implementation and replaces it with Go native channels. [#2977](https://github.com/openfga/openfga/pull/2977)
1515
- Refactor tuple validation and manipulation functions for optimal performance. [#2984](https://github.com/openfga/openfga/pull/2984)
16+
- Replace custom DSQL OCC retry logic with the `occretry` package from `aurora-dsql-connectors/go/pgx` v0.3.0. [#3](https://github.com/amazon-contributing/upstream-to-openfga/pull/3)
1617

1718
### Fixed
1819
- Fixed `OTEL_EXPORTER_OTLP_ENDPOINT` not accepting URIs with schemes (e.g. `http://host:4317`). The scheme is now stripped before passing to the gRPC exporter, and an `https://` scheme enables TLS regardless of the `trace.otlp.tls.enabled` flag. [#2981](https://github.com/openfga/openfga/pull/2981)

go.mod

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ require (
99
github.com/Masterminds/squirrel v1.5.4
1010
github.com/MicahParks/keyfunc/v2 v2.1.0
1111
github.com/Yiling-J/theine-go v0.6.2
12-
github.com/awslabs/aurora-dsql-connectors/go/pgx v0.2.0
12+
github.com/awslabs/aurora-dsql-connectors/go/pgx v0.3.0
1313
github.com/cenkalti/backoff/v4 v4.3.0
1414
github.com/cespare/xxhash/v2 v2.3.0
1515
github.com/containerd/errdefs v1.0.0
@@ -69,20 +69,20 @@ require (
6969
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
7070
github.com/Microsoft/go-winio v0.6.2 // indirect
7171
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
72-
github.com/aws/aws-sdk-go-v2 v1.41.3 // indirect
73-
github.com/aws/aws-sdk-go-v2/config v1.32.11 // indirect
74-
github.com/aws/aws-sdk-go-v2/credentials v1.19.11 // indirect
75-
github.com/aws/aws-sdk-go-v2/feature/dsql/auth v1.1.19 // indirect
76-
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.19 // indirect
77-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.19 // indirect
78-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.19 // indirect
79-
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.5 // indirect
80-
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.6 // indirect
81-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.19 // indirect
82-
github.com/aws/aws-sdk-go-v2/service/signin v1.0.7 // indirect
83-
github.com/aws/aws-sdk-go-v2/service/sso v1.30.12 // indirect
84-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.16 // indirect
85-
github.com/aws/aws-sdk-go-v2/service/sts v1.41.8 // indirect
72+
github.com/aws/aws-sdk-go-v2 v1.41.4 // indirect
73+
github.com/aws/aws-sdk-go-v2/config v1.32.12 // indirect
74+
github.com/aws/aws-sdk-go-v2/credentials v1.19.12 // indirect
75+
github.com/aws/aws-sdk-go-v2/feature/dsql/auth v1.1.20 // indirect
76+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 // indirect
77+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 // indirect
78+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 // indirect
79+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect
80+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect
81+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 // indirect
82+
github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 // indirect
83+
github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 // indirect
84+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 // indirect
85+
github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 // indirect
8686
github.com/aws/smithy-go v1.24.2 // indirect
8787
github.com/beorn7/perks v1.0.1 // indirect
8888
github.com/cenkalti/backoff/v5 v5.0.3 // indirect

go.sum

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -22,38 +22,38 @@ github.com/Yiling-J/theine-go v0.6.2 h1:1GeoXeQ0O0AUkiwj2S9Jc0Mzx+hpqzmqsJ4kIC4M
2222
github.com/Yiling-J/theine-go v0.6.2/go.mod h1:08QpMa5JZ2pKN+UJCRrCasWYO1IKCdl54Xa836rpmDU=
2323
github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ=
2424
github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw=
25-
github.com/aws/aws-sdk-go-v2 v1.41.3 h1:4kQ/fa22KjDt13QCy1+bYADvdgcxpfH18f0zP542kZA=
26-
github.com/aws/aws-sdk-go-v2 v1.41.3/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o=
27-
github.com/aws/aws-sdk-go-v2/config v1.32.11 h1:ftxI5sgz8jZkckuUHXfC/wMUc8u3fG1vQS0plr2F2Zs=
28-
github.com/aws/aws-sdk-go-v2/config v1.32.11/go.mod h1:twF11+6ps9aNRKEDimksp923o44w/Thk9+8YIlzWMmo=
29-
github.com/aws/aws-sdk-go-v2/credentials v1.19.11 h1:NdV8cwCcAXrCWyxArt58BrvZJ9pZ9Fhf9w6Uh5W3Uyc=
30-
github.com/aws/aws-sdk-go-v2/credentials v1.19.11/go.mod h1:30yY2zqkMPdrvxBqzI9xQCM+WrlrZKSOpSJEsylVU+8=
31-
github.com/aws/aws-sdk-go-v2/feature/dsql/auth v1.1.19 h1:jS9Xb83Lr9ilcmR8NhhIh2G52eQ2Dd2Ng2p8xv23uK8=
32-
github.com/aws/aws-sdk-go-v2/feature/dsql/auth v1.1.19/go.mod h1:XExMXXv/juteYG/NHNCMzsExbXzByiAJMmVMcdgPrOo=
33-
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.19 h1:INUvJxmhdEbVulJYHI061k4TVuS3jzzthNvjqvVvTKM=
34-
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.19/go.mod h1:FpZN2QISLdEBWkayloda+sZjVJL+e9Gl0k1SyTgcswU=
35-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.19 h1:/sECfyq2JTifMI2JPyZ4bdRN77zJmr6SrS1eL3augIA=
36-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.19/go.mod h1:dMf8A5oAqr9/oxOfLkC/c2LU/uMcALP0Rgn2BD5LWn0=
37-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.19 h1:AWeJMk33GTBf6J20XJe6qZoRSJo0WfUhsMdUKhoODXE=
38-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.19/go.mod h1:+GWrYoaAsV7/4pNHpwh1kiNLXkKaSoppxQq9lbH8Ejw=
39-
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.5 h1:clHU5fm//kWS1C2HgtgWxfQbFbx4b6rx+5jzhgX9HrI=
40-
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.5/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY=
41-
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.6 h1:XAq62tBTJP/85lFD5oqOOe7YYgWxY9LvWq8plyDvDVg=
42-
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.6/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI=
43-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.19 h1:X1Tow7suZk9UCJHE1Iw9GMZJJl0dAnKXXP1NaSDHwmw=
44-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.19/go.mod h1:/rARO8psX+4sfjUQXp5LLifjUt8DuATZ31WptNJTyQA=
45-
github.com/aws/aws-sdk-go-v2/service/signin v1.0.7 h1:Y2cAXlClHsXkkOvWZFXATr34b0hxxloeQu/pAZz2row=
46-
github.com/aws/aws-sdk-go-v2/service/signin v1.0.7/go.mod h1:idzZ7gmDeqeNrSPkdbtMp9qWMgcBwykA7P7Rzh5DXVU=
47-
github.com/aws/aws-sdk-go-v2/service/sso v1.30.12 h1:iSsvB9EtQ09YrsmIc44Heqlx5ByGErqhPK1ZQLppias=
48-
github.com/aws/aws-sdk-go-v2/service/sso v1.30.12/go.mod h1:fEWYKTRGoZNl8tZ77i61/ccwOMJdGxwOhWCkp6TXAr0=
49-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.16 h1:EnUdUqRP1CNzt2DkV67tJx6XDN4xlfBFm+bzeNOQVb0=
50-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.16/go.mod h1:Jic/xv0Rq/pFNCh3WwpH4BEqdbSAl+IyHro8LbibHD8=
51-
github.com/aws/aws-sdk-go-v2/service/sts v1.41.8 h1:XQTQTF75vnug2TXS8m7CVJfC2nniYPZnO1D4Np761Oo=
52-
github.com/aws/aws-sdk-go-v2/service/sts v1.41.8/go.mod h1:Xgx+PR1NUOjNmQY+tRMnouRp83JRM8pRMw/vCaVhPkI=
25+
github.com/aws/aws-sdk-go-v2 v1.41.4 h1:10f50G7WyU02T56ox1wWXq+zTX9I1zxG46HYuG1hH/k=
26+
github.com/aws/aws-sdk-go-v2 v1.41.4/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o=
27+
github.com/aws/aws-sdk-go-v2/config v1.32.12 h1:O3csC7HUGn2895eNrLytOJQdoL2xyJy0iYXhoZ1OmP0=
28+
github.com/aws/aws-sdk-go-v2/config v1.32.12/go.mod h1:96zTvoOFR4FURjI+/5wY1vc1ABceROO4lWgWJuxgy0g=
29+
github.com/aws/aws-sdk-go-v2/credentials v1.19.12 h1:oqtA6v+y5fZg//tcTWahyN9PEn5eDU/Wpvc2+kJ4aY8=
30+
github.com/aws/aws-sdk-go-v2/credentials v1.19.12/go.mod h1:U3R1RtSHx6NB0DvEQFGyf/0sbrpJrluENHdPy1j/3TE=
31+
github.com/aws/aws-sdk-go-v2/feature/dsql/auth v1.1.20 h1:v+bA+zftOt3fRsjtdjWtufKiYWtOlSvC8GwSWFjz6HE=
32+
github.com/aws/aws-sdk-go-v2/feature/dsql/auth v1.1.20/go.mod h1:dVdlGgK+GQiA6v0EyTEhpokXcyUkC9/o/LaTkeGN3S0=
33+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 h1:zOgq3uezl5nznfoK3ODuqbhVg1JzAGDUhXOsU0IDCAo=
34+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20/go.mod h1:z/MVwUARehy6GAg/yQ1GO2IMl0k++cu1ohP9zo887wE=
35+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 h1:CNXO7mvgThFGqOFgbNAP2nol2qAWBOGfqR/7tQlvLmc=
36+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20/go.mod h1:oydPDJKcfMhgfcgBUZaG+toBbwy8yPWubJXBVERtI4o=
37+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 h1:tN6W/hg+pkM+tf9XDkWUbDEjGLb+raoBMFsTodcoYKw=
38+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20/go.mod h1:YJ898MhD067hSHA6xYCx5ts/jEd8BSOLtQDL3iZsvbc=
39+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw=
40+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY=
41+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY=
42+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI=
43+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 h1:2HvVAIq+YqgGotK6EkMf+KIEqTISmTYh5zLpYyeTo1Y=
44+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20/go.mod h1:V4X406Y666khGa8ghKmphma/7C0DAtEQYhkq9z4vpbk=
45+
github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 h1:0GFOLzEbOyZABS3PhYfBIx2rNBACYcKty+XGkTgw1ow=
46+
github.com/aws/aws-sdk-go-v2/service/signin v1.0.8/go.mod h1:LXypKvk85AROkKhOG6/YEcHFPoX+prKTowKnVdcaIxE=
47+
github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 h1:kiIDLZ005EcKomYYITtfsjn7dtOwHDOFy7IbPXKek2o=
48+
github.com/aws/aws-sdk-go-v2/service/sso v1.30.13/go.mod h1:2h/xGEowcW/g38g06g3KpRWDlT+OTfxxI0o1KqayAB8=
49+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 h1:jzKAXIlhZhJbnYwHbvUQZEB8KfgAEuG0dc08Bkda7NU=
50+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17/go.mod h1:Al9fFsXjv4KfbzQHGe6V4NZSZQXecFcvaIF4e70FoRA=
51+
github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 h1:Cng+OOwCHmFljXIxpEVXAGMnBia8MSU6Ch5i9PgBkcU=
52+
github.com/aws/aws-sdk-go-v2/service/sts v1.41.9/go.mod h1:LrlIndBDdjA/EeXeyNBle+gyCwTlizzW5ycgWnvIxkk=
5353
github.com/aws/smithy-go v1.24.2 h1:FzA3bu/nt/vDvmnkg+R8Xl46gmzEDam6mZ1hzmwXFng=
5454
github.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=
55-
github.com/awslabs/aurora-dsql-connectors/go/pgx v0.2.0 h1:irsxnXcNaqkVmkmp5lkzpJ+dNxTCojuuEWGWL+gKBcg=
56-
github.com/awslabs/aurora-dsql-connectors/go/pgx v0.2.0/go.mod h1:KmZA9VBz4ubBFxTN7/FWo+V6sbcwPr/n1Qup4KXBV34=
55+
github.com/awslabs/aurora-dsql-connectors/go/pgx v0.3.0 h1:pzBoEujBt4kQu7pcz1PBoE2ZJbN8NrnHmFSETeIWm2o=
56+
github.com/awslabs/aurora-dsql-connectors/go/pgx v0.3.0/go.mod h1:nA8lipsaKhjSa30d6M54B/1wsP2MtltFgeIGTGYx2C8=
5757
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
5858
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
5959
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=

pkg/storage/postgres/dsql.go

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,47 +2,18 @@ package postgres
22

33
import (
44
"context"
5-
"errors"
65
"fmt"
7-
"time"
86

97
"github.com/awslabs/aurora-dsql-connectors/go/pgx/dsql"
10-
"github.com/cenkalti/backoff/v4"
11-
"github.com/jackc/pgx/v5/pgconn"
8+
"github.com/awslabs/aurora-dsql-connectors/go/pgx/occretry"
129
"github.com/jackc/pgx/v5/pgxpool"
1310

1411
"github.com/openfga/openfga/pkg/storage/sqlcommon"
1512
)
1613

17-
// isOCCError checks if the error is a DSQL optimistic concurrency control conflict.
18-
// DSQL returns OC000 for mutation conflicts and OC001 for schema conflicts.
19-
func isOCCError(err error) bool {
20-
if err == nil {
21-
return false
22-
}
23-
var pgErr *pgconn.PgError
24-
if errors.As(err, &pgErr) {
25-
return pgErr.Code == "OC000" || pgErr.Code == "OC001" || pgErr.Code == "40001"
26-
}
27-
return false
28-
}
29-
3014
// withOCCRetry executes fn with automatic retry on DSQL OCC errors.
3115
func withOCCRetry(ctx context.Context, fn func() error) error {
32-
policy := backoff.NewExponentialBackOff()
33-
policy.InitialInterval = 10 * time.Millisecond
34-
policy.MaxElapsedTime = 5 * time.Second
35-
36-
return backoff.Retry(func() error {
37-
err := fn()
38-
if err == nil {
39-
return nil
40-
}
41-
if isOCCError(err) {
42-
return err
43-
}
44-
return backoff.Permanent(err)
45-
}, backoff.WithContext(policy, ctx))
16+
return occretry.Retry(ctx, occretry.DefaultConfig(), fn)
4617
}
4718

4819
// initDSQLDB initializes a new Aurora DSQL database connection.
@@ -73,10 +44,5 @@ func initDSQLDB(uri string, cfg *sqlcommon.Config) (*pgxpool.Pool, error) {
7344
poolCfg.MaxConnIdleTime = cfg.ConnMaxIdleTime
7445
}
7546

76-
pool, err := dsql.NewPool(context.Background(), dsqlCfg, poolCfg)
77-
if err != nil {
78-
return nil, fmt.Errorf("create DSQL pool: %w", err)
79-
}
80-
81-
return pool.Pool, nil
47+
return dsql.NewPool(context.Background(), dsqlCfg, poolCfg)
8248
}

0 commit comments

Comments
 (0)