@@ -26,11 +26,13 @@ import (
2626// maybeMigrate runs the auto-migration for the database when needed based on
2727// the given version.
2828func maybeMigrate (ctx context.Context , logger log.Logger , contract runtime.Contract , redisClient * redis.Client , currentVersion string ) (err error ) {
29+ dbName := databaseName (contract .MSP )
2930 ctx , span := databaseTracer .Start (
3031 ctx ,
3132 "database.maybeMigrate" ,
3233 trace .WithAttributes (
3334 attribute .String ("currentVersion" , currentVersion ),
35+ attribute .String ("database" , dbName ),
3436 ),
3537 )
3638 defer func () {
@@ -41,7 +43,6 @@ func maybeMigrate(ctx context.Context, logger log.Logger, contract runtime.Contr
4143 span .End ()
4244 }()
4345
44- dbName := databaseName (contract .MSP )
4546 sqlDB , err := contract .PostgreSQL .OpenDatabase (ctx , dbName )
4647 if err != nil {
4748 return errors .Wrap (err , "open database" )
@@ -78,11 +79,12 @@ func maybeMigrate(ctx context.Context, logger log.Logger, contract runtime.Contr
7879 fmt .Sprintf ("%s:auto-migrate" , dbName ),
7980 15 * time .Second ,
8081 func () error {
82+ ctx := context .WithoutCancel (ctx )
8183 span .AddEvent ("lock.acquired" )
8284
8385 versionKey := fmt .Sprintf ("%s:db_version" , dbName )
8486 if shouldSkipMigration (
85- redisClient .Get (context . Background () , versionKey ).Val (),
87+ redisClient .Get (ctx , versionKey ).Val (),
8688 currentVersion ,
8789 ) {
8890 logger .Info ("skipped auto-migration" ,
@@ -92,20 +94,22 @@ func maybeMigrate(ctx context.Context, logger log.Logger, contract runtime.Contr
9294 span .SetAttributes (attribute .Bool ("skipped" , true ))
9395 return nil
9496 }
97+ span .SetAttributes (attribute .Bool ("skipped" , false ))
9598
9699 // Create a session that ignore debug logging.
97100 sess := conn .Session (& gorm.Session {
98101 Logger : gormlogger .Default .LogMode (gormlogger .Warn ),
99102 })
100103 // Auto-migrate database table definitions.
101104 for _ , table := range tables .All () {
105+ span .AddEvent (fmt .Sprintf ("automigrate.%s" , table .TableName ()))
102106 err := sess .AutoMigrate (table )
103107 if err != nil {
104108 return errors .Wrapf (err , "auto migrating table for %s" , errors .Safe (fmt .Sprintf ("%T" , table )))
105109 }
106110 }
107111
108- return redisClient .Set (context . Background () , versionKey , currentVersion , 0 ).Err ()
112+ return redisClient .Set (ctx , versionKey , currentVersion , 0 ).Err ()
109113 },
110114 )
111115}
0 commit comments