mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-03-10 15:48:52 +01:00
[bugfix] Fix app migration (#3868)
* [bugfix] Fix app migration * use temporary index during migration * create temporary index for the migration * include local = true in temporary index * tweak migration a bit for SPEED
This commit is contained in:
parent
24da574684
commit
ab7ec43988
1 changed files with 29 additions and 4 deletions
|
@ -23,11 +23,14 @@
|
||||||
oldmodel "github.com/superseriousbusiness/gotosocial/internal/db/bundb/migrations/20211113114307_init"
|
oldmodel "github.com/superseriousbusiness/gotosocial/internal/db/bundb/migrations/20211113114307_init"
|
||||||
newmodel "github.com/superseriousbusiness/gotosocial/internal/db/bundb/migrations/20250224105654_token_app_client_refactor"
|
newmodel "github.com/superseriousbusiness/gotosocial/internal/db/bundb/migrations/20250224105654_token_app_client_refactor"
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/id"
|
"github.com/superseriousbusiness/gotosocial/internal/id"
|
||||||
|
"github.com/superseriousbusiness/gotosocial/internal/log"
|
||||||
"github.com/uptrace/bun"
|
"github.com/uptrace/bun"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
up := func(ctx context.Context, db *bun.DB) error {
|
up := func(ctx context.Context, db *bun.DB) error {
|
||||||
|
log.Info(ctx, "migrating applications to new model, this may take a bit of time, please wait and do not interrupt!")
|
||||||
|
|
||||||
return db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
|
return db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
|
||||||
|
|
||||||
// Drop unused clients table.
|
// Drop unused clients table.
|
||||||
|
@ -88,12 +91,32 @@ func init() {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(oldApps) != 0 {
|
appsCount := len(oldApps)
|
||||||
|
if appsCount != 0 {
|
||||||
|
|
||||||
// Convert all the old model applications into new ones.
|
// Convert all the old model applications into new ones.
|
||||||
newApps := make([]*newmodel.Application, 0, len(oldApps))
|
newApps := make([]*newmodel.Application, 0, appsCount)
|
||||||
for _, oldApp := range oldApps {
|
for i, oldApp := range oldApps {
|
||||||
|
log.Infof(ctx, "preparing to migrate application %s (%s) to new model...", oldApp.Name, oldApp.ID)
|
||||||
|
|
||||||
|
// Update application ID on any
|
||||||
|
// statuses that used this app.
|
||||||
|
newAppID := id.NewULIDFromTime(oldApp.CreatedAt)
|
||||||
|
if _, err := tx.
|
||||||
|
NewUpdate().
|
||||||
|
Table("statuses").
|
||||||
|
Set("? = ?", bun.Ident("created_with_application_id"), newAppID).
|
||||||
|
// Only local statuses have created_with_application_id set,
|
||||||
|
// and we have an index on "local", so use this to narrow down.
|
||||||
|
Where("? = ?", bun.Ident("local"), true).
|
||||||
|
Where("? = ?", bun.Ident("created_with_application_id"), oldApp.ID).
|
||||||
|
Exec(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the new app to the slice for insertion.
|
||||||
newApps = append(newApps, &newmodel.Application{
|
newApps = append(newApps, &newmodel.Application{
|
||||||
ID: id.NewULIDFromTime(oldApp.CreatedAt),
|
ID: newAppID,
|
||||||
Name: oldApp.Name,
|
Name: oldApp.Name,
|
||||||
Website: oldApp.Website,
|
Website: oldApp.Website,
|
||||||
RedirectURIs: []string{oldApp.RedirectURI},
|
RedirectURIs: []string{oldApp.RedirectURI},
|
||||||
|
@ -101,6 +124,8 @@ func init() {
|
||||||
ClientSecret: oldApp.ClientSecret,
|
ClientSecret: oldApp.ClientSecret,
|
||||||
Scopes: oldApp.Scopes,
|
Scopes: oldApp.Scopes,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
log.Infof(ctx, "prepared %d of %d new model applications", i+1, appsCount)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Whack all the new apps in
|
// Whack all the new apps in
|
||||||
|
|
Loading…
Reference in a new issue