mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Chore: [Nested Folder] Add db migration at service start time (#58590)
* add db migration at service start time * make changes for the 3 db * revert migrator * fix feature toggle check Co-authored-by: Serge Zaitsev <serge.zaitsev@grafana.com>
This commit is contained in:
parent
75e435fb00
commit
69b5a9c752
@ -15,6 +15,8 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/services/dashboards"
|
"github.com/grafana/grafana/pkg/services/dashboards"
|
||||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||||
"github.com/grafana/grafana/pkg/services/folder"
|
"github.com/grafana/grafana/pkg/services/folder"
|
||||||
|
"github.com/grafana/grafana/pkg/services/sqlstore"
|
||||||
|
"github.com/grafana/grafana/pkg/services/sqlstore/migrator"
|
||||||
"github.com/grafana/grafana/pkg/util"
|
"github.com/grafana/grafana/pkg/util"
|
||||||
|
|
||||||
"github.com/grafana/grafana/pkg/services/guardian"
|
"github.com/grafana/grafana/pkg/services/guardian"
|
||||||
@ -54,7 +56,7 @@ func ProvideService(
|
|||||||
ac.RegisterScopeAttributeResolver(dashboards.NewFolderNameScopeResolver(dashboardStore))
|
ac.RegisterScopeAttributeResolver(dashboards.NewFolderNameScopeResolver(dashboardStore))
|
||||||
ac.RegisterScopeAttributeResolver(dashboards.NewFolderIDScopeResolver(dashboardStore))
|
ac.RegisterScopeAttributeResolver(dashboards.NewFolderIDScopeResolver(dashboardStore))
|
||||||
store := ProvideStore(db, cfg, features)
|
store := ProvideStore(db, cfg, features)
|
||||||
return &Service{
|
svr := &Service{
|
||||||
cfg: cfg,
|
cfg: cfg,
|
||||||
log: log.New("folder-service"),
|
log: log.New("folder-service"),
|
||||||
dashboardService: dashboardService,
|
dashboardService: dashboardService,
|
||||||
@ -66,6 +68,28 @@ func ProvideService(
|
|||||||
accessControl: ac,
|
accessControl: ac,
|
||||||
bus: bus,
|
bus: bus,
|
||||||
}
|
}
|
||||||
|
if features.IsEnabled(featuremgmt.FlagNestedFolders) {
|
||||||
|
svr.DBMigration(db)
|
||||||
|
}
|
||||||
|
return svr
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Service) DBMigration(db db.DB) {
|
||||||
|
ctx := context.Background()
|
||||||
|
err := db.WithDbSession(ctx, func(sess *sqlstore.DBSession) error {
|
||||||
|
var err error
|
||||||
|
if db.GetDialect().DriverName() == migrator.SQLite {
|
||||||
|
_, err = sess.Exec("INSERT OR REPLACE INTO folder (id, uid, org_id, title, created, updated) SELECT id, uid, org_id, title, created, updated FROM dashboard WHERE is_folder = 1")
|
||||||
|
} else if db.GetDialect().DriverName() == migrator.Postgres {
|
||||||
|
_, err = sess.Exec("INSERT INTO folder (id, uid, org_id, title, created, updated) SELECT id, uid, org_id, title, created, updated FROM dashboard WHERE is_folder = true ON CONFLICT DO NOTHING")
|
||||||
|
} else {
|
||||||
|
_, err = sess.Exec("INSERT IGNORE INTO folder (id, uid, org_id, title, created, updated) SELECT id, uid, org_id, title, created, updated FROM dashboard WHERE is_folder = 1")
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
s.log.Error("DB migration on folder service start failed.")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Service) Get(ctx context.Context, cmd *folder.GetFolderQuery) (*folder.Folder, error) {
|
func (s *Service) Get(ctx context.Context, cmd *folder.GetFolderQuery) (*folder.Folder, error) {
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
package migrations
|
package migrations
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/grafana/grafana/pkg/services/folder"
|
|
||||||
"github.com/grafana/grafana/pkg/services/sqlstore/migrator"
|
"github.com/grafana/grafana/pkg/services/sqlstore/migrator"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -11,13 +8,6 @@ import (
|
|||||||
func addFolderMigrations(mg *migrator.Migrator) {
|
func addFolderMigrations(mg *migrator.Migrator) {
|
||||||
mg.AddMigration("create folder table", migrator.NewAddTableMigration(folderv1()))
|
mg.AddMigration("create folder table", migrator.NewAddTableMigration(folderv1()))
|
||||||
|
|
||||||
// copy any existing folders in the dashboard table into the new folder
|
|
||||||
// table. The *legacy* parent folder ID, stored as folder_id in the
|
|
||||||
// dashboard table, is always going to be "0" so it is safe to convert to a parent UID.
|
|
||||||
mg.AddMigration("copy existing folders from dashboard table", migrator.NewRawSQLMigration(
|
|
||||||
"INSERT INTO folder (id, uid, org_id, title, created, updated) SELECT id, uid, org_id, title, created, updated FROM dashboard WHERE is_folder = 1;",
|
|
||||||
).Postgres("INSERT INTO folder (id, uid, org_id, title, created, updated) SELECT id, uid, org_id, title, created, updated FROM dashboard WHERE is_folder = true;"))
|
|
||||||
|
|
||||||
mg.AddMigration("Add index for parent_uid", migrator.NewAddIndexMigration(folderv1(), &migrator.Index{
|
mg.AddMigration("Add index for parent_uid", migrator.NewAddIndexMigration(folderv1(), &migrator.Index{
|
||||||
Cols: []string{"parent_uid", "org_id"},
|
Cols: []string{"parent_uid", "org_id"},
|
||||||
}))
|
}))
|
||||||
@ -43,7 +33,7 @@ func folderv1() migrator.Table {
|
|||||||
{Name: "org_id", Type: migrator.DB_BigInt, Nullable: false},
|
{Name: "org_id", Type: migrator.DB_BigInt, Nullable: false},
|
||||||
{Name: "title", Type: migrator.DB_NVarchar, Length: 255, Nullable: false},
|
{Name: "title", Type: migrator.DB_NVarchar, Length: 255, Nullable: false},
|
||||||
{Name: "description", Type: migrator.DB_NVarchar, Length: 255, Nullable: true},
|
{Name: "description", Type: migrator.DB_NVarchar, Length: 255, Nullable: true},
|
||||||
{Name: "parent_uid", Type: migrator.DB_NVarchar, Length: 40, Default: fmt.Sprintf("'%s'", folder.GeneralFolderUID)},
|
{Name: "parent_uid", Type: migrator.DB_NVarchar, Length: 40, Default: ""},
|
||||||
{Name: "created", Type: migrator.DB_DateTime, Nullable: false},
|
{Name: "created", Type: migrator.DB_DateTime, Nullable: false},
|
||||||
{Name: "updated", Type: migrator.DB_DateTime, Nullable: false},
|
{Name: "updated", Type: migrator.DB_DateTime, Nullable: false},
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user