IAM: Run team_member uid migrations on team service startup (#112565)

* run uid migrations on team service startup

* go mod tidy

* make update-workspace

* remove logsdrilldown pkg
This commit is contained in:
Mihai Doarna
2025-10-17 15:57:10 +03:00
committed by GitHub
parent e014f1ba0c
commit 1937f62c02
2 changed files with 30 additions and 1 deletions
+23
View File
@@ -11,6 +11,7 @@ import (
"github.com/grafana/grafana/pkg/apimachinery/identity"
"github.com/grafana/grafana/pkg/infra/db"
ac "github.com/grafana/grafana/pkg/services/accesscontrol"
"github.com/grafana/grafana/pkg/services/sqlstore/migrator"
"github.com/grafana/grafana/pkg/services/team"
"github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/util"
@@ -584,3 +585,25 @@ func (ss *xormStore) getTeamMembers(ctx context.Context, query *team.GetTeamMemb
func (ss *xormStore) RegisterDelete(query string) {
ss.deletes = append(ss.deletes, query)
}
// teamMemberUidMigration ensures that all team members have a valid uid.
// To protect against upgrade / downgrade we need to run this for a couple of releases.
// FIXME: Remove this migration around Q2 2026
func (ss *xormStore) teamMemberUidMigration() error {
return ss.db.WithDbSession(context.Background(), func(sess *db.Session) error {
switch ss.db.GetDBType() {
case migrator.SQLite:
_, err := sess.Exec("UPDATE team_member SET uid=printf('tm%09d',id) WHERE uid IS NULL OR uid = '';")
return err
case migrator.Postgres:
_, err := sess.Exec("UPDATE team_member SET uid='tm' || lpad('' || id::text,9,'0') WHERE uid IS NULL OR uid = '';")
return err
case migrator.MySQL:
_, err := sess.Exec("UPDATE team_member SET uid=concat('tm',lpad(id,9,'0')) WHERE uid IS NULL OR uid = '';")
return err
default:
// this branch should be unreachable
return nil
}
})
}
+7 -1
View File
@@ -25,9 +25,15 @@ type Service struct {
}
func ProvideService(db db.DB, cfg *setting.Cfg, tracer tracing.Tracer) (team.Service, error) {
store := &xormStore{db: db, cfg: cfg, deletes: []string{}}
if err := store.teamMemberUidMigration(); err != nil {
return nil, err
}
return &Service{
cache: localcache.New(defaultCacheDuration, 2*defaultCacheDuration),
store: &xormStore{db: db, cfg: cfg, deletes: []string{}},
store: store,
tracer: tracer,
}, nil
}