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:
@@ -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
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user