@@ -6,12 +6,13 @@ import (
6
6
"fmt"
7
7
"time"
8
8
9
- "github.com/openfga/openfga/assets"
9
+ openfga_assets "github.com/openfga/openfga/assets"
10
10
"github.com/pressly/goose/v3"
11
11
"github.com/redis/go-redis/v9"
12
12
"github.com/sourcegraph/log"
13
13
"go.opentelemetry.io/otel/attribute"
14
14
"go.opentelemetry.io/otel/codes"
15
+ "go.opentelemetry.io/otel/trace"
15
16
"gorm.io/driver/postgres"
16
17
"gorm.io/gorm"
17
18
gormlogger "gorm.io/gorm/logger"
@@ -31,7 +32,10 @@ type metadata struct {
31
32
// migrateAndReconcile migrates the "msp-iam" database schema (when needed) and
32
33
// reconciles the framework metadata.
33
34
func migrateAndReconcile (ctx context.Context , logger log.Logger , sqlDB * sql.DB , redisClient * redis.Client ) (_ * metadata , err error ) {
34
- ctx , span := iamTracer .Start (ctx , "iam.migrateAndReconcile" )
35
+ ctx , span := iamTracer .Start (ctx , "iam.migrateAndReconcile" ,
36
+ trace .WithAttributes (
37
+ attribute .String ("database" , databaseName ),
38
+ ))
35
39
defer func () {
36
40
if err != nil {
37
41
span .RecordError (err )
@@ -53,10 +57,9 @@ func migrateAndReconcile(ctx context.Context, logger log.Logger, sqlDB *sql.DB,
53
57
return nil , errors .Wrap (err , "open connection" )
54
58
}
55
59
56
- goose .SetBaseFS (assets .EmbedMigrations )
60
+ goose .SetBaseFS (openfga_assets .EmbedMigrations )
57
61
goose .SetLogger (& gooseLoggerShim {Logger : logger })
58
-
59
- currentVersion , err := goose .GetDBVersion (sqlDB )
62
+ currentVersion , err := goose .GetDBVersionContext (ctx , sqlDB )
60
63
if err != nil {
61
64
return nil , errors .Wrap (err , "get DB version" )
62
65
}
@@ -70,11 +73,13 @@ func migrateAndReconcile(ctx context.Context, logger log.Logger, sqlDB *sql.DB,
70
73
fmt .Sprintf ("%s:auto-migrate" , databaseName ),
71
74
15 * time .Second ,
72
75
func () error {
76
+ ctx := context .WithoutCancel (ctx ) // do not interrupt once we start
73
77
span .AddEvent ("lock.acquired" )
74
78
75
79
// Create a session that ignore debug logging.
76
80
sess := conn .Session (& gorm.Session {
77
- Logger : gormlogger .Default .LogMode (gormlogger .Warn ),
81
+ Context : ctx ,
82
+ Logger : gormlogger .Default .LogMode (gormlogger .Warn ),
78
83
})
79
84
// Auto-migrate database table definitions.
80
85
for _ , table := range []any {& metadata {}} {
@@ -86,10 +91,11 @@ func migrateAndReconcile(ctx context.Context, logger log.Logger, sqlDB *sql.DB,
86
91
}
87
92
88
93
// Migrate OpenFGA's database schema.
94
+ span .AddEvent ("automigrate.openfga" )
89
95
err = goose .UpContext (
90
96
ctx ,
91
97
sqlDB ,
92
- assets .PostgresMigrationDir ,
98
+ openfga_assets .PostgresMigrationDir ,
93
99
)
94
100
if err != nil {
95
101
return errors .Wrap (err , "run OpenFGA migrations" )
0 commit comments