@@ -26,11 +26,13 @@ import (
26
26
// maybeMigrate runs the auto-migration for the database when needed based on
27
27
// the given version.
28
28
func maybeMigrate (ctx context.Context , logger log.Logger , contract runtime.Contract , redisClient * redis.Client , currentVersion string ) (err error ) {
29
+ dbName := databaseName (contract .MSP )
29
30
ctx , span := databaseTracer .Start (
30
31
ctx ,
31
32
"database.maybeMigrate" ,
32
33
trace .WithAttributes (
33
34
attribute .String ("currentVersion" , currentVersion ),
35
+ attribute .String ("database" , dbName ),
34
36
),
35
37
)
36
38
defer func () {
@@ -41,7 +43,6 @@ func maybeMigrate(ctx context.Context, logger log.Logger, contract runtime.Contr
41
43
span .End ()
42
44
}()
43
45
44
- dbName := databaseName (contract .MSP )
45
46
sqlDB , err := contract .PostgreSQL .OpenDatabase (ctx , dbName )
46
47
if err != nil {
47
48
return errors .Wrap (err , "open database" )
@@ -78,11 +79,12 @@ func maybeMigrate(ctx context.Context, logger log.Logger, contract runtime.Contr
78
79
fmt .Sprintf ("%s:auto-migrate" , dbName ),
79
80
15 * time .Second ,
80
81
func () error {
82
+ ctx := context .WithoutCancel (ctx )
81
83
span .AddEvent ("lock.acquired" )
82
84
83
85
versionKey := fmt .Sprintf ("%s:db_version" , dbName )
84
86
if shouldSkipMigration (
85
- redisClient .Get (context . Background () , versionKey ).Val (),
87
+ redisClient .Get (ctx , versionKey ).Val (),
86
88
currentVersion ,
87
89
) {
88
90
logger .Info ("skipped auto-migration" ,
@@ -92,20 +94,22 @@ func maybeMigrate(ctx context.Context, logger log.Logger, contract runtime.Contr
92
94
span .SetAttributes (attribute .Bool ("skipped" , true ))
93
95
return nil
94
96
}
97
+ span .SetAttributes (attribute .Bool ("skipped" , false ))
95
98
96
99
// Create a session that ignore debug logging.
97
100
sess := conn .Session (& gorm.Session {
98
101
Logger : gormlogger .Default .LogMode (gormlogger .Warn ),
99
102
})
100
103
// Auto-migrate database table definitions.
101
104
for _ , table := range tables .All () {
105
+ span .AddEvent (fmt .Sprintf ("automigrate.%s" , table .TableName ()))
102
106
err := sess .AutoMigrate (table )
103
107
if err != nil {
104
108
return errors .Wrapf (err , "auto migrating table for %s" , errors .Safe (fmt .Sprintf ("%T" , table )))
105
109
}
106
110
}
107
111
108
- return redisClient .Set (context . Background () , versionKey , currentVersion , 0 ).Err ()
112
+ return redisClient .Set (ctx , versionKey , currentVersion , 0 ).Err ()
109
113
},
110
114
)
111
115
}
0 commit comments