mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-05 07:26:36 +08:00
[优化] 修复迁移
This commit is contained in:
@@ -10,6 +10,7 @@ const BaseDatabaseSchemaVersion = 7
|
||||
|
||||
type Context interface {
|
||||
ApplyCurrentSchema(db *gorm.DB, backend string) error
|
||||
ApplyCurrentSchemaExcept(db *gorm.DB, backend string, excludedTables ...string) error
|
||||
BackfillOriginsFromProxyRoutes(db *gorm.DB) error
|
||||
BackfillProxyRouteSiteFields(db *gorm.DB) error
|
||||
EnsureProxyRouteSiteNameUniqueIndex(db *gorm.DB) error
|
||||
|
||||
@@ -31,6 +31,10 @@ func migrateV21(ctx Context, db *gorm.DB, backend string) error {
|
||||
slog.Info("starting v21 database migration (Node Optimization & Observation Split)")
|
||||
|
||||
migrator := db.Migrator()
|
||||
dropLegacyNodeColumn := func(col string) error {
|
||||
slog.Info("v21: keeping legacy nodes column to avoid lock-heavy schema rewrite", "backend", backend, "column", col)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Rename agent_token → access_token (target may already exist if AutoMigrate ran earlier)
|
||||
if migrator.HasColumn(&nodeV21{}, "agent_token") {
|
||||
@@ -39,7 +43,7 @@ func migrateV21(ctx Context, db *gorm.DB, backend string) error {
|
||||
if err := db.Exec(`UPDATE nodes SET access_token = agent_token WHERE access_token IS NULL OR access_token = ''`).Error; err != nil {
|
||||
return fmt.Errorf("failed to backfill access_token from agent_token: %w", err)
|
||||
}
|
||||
if err := migrator.DropColumn(&nodeV21{}, "agent_token"); err != nil {
|
||||
if err := dropLegacyNodeColumn("agent_token"); err != nil {
|
||||
slog.Warn("failed to drop agent_token after backfill", "error", err)
|
||||
}
|
||||
} else {
|
||||
@@ -57,7 +61,7 @@ func migrateV21(ctx Context, db *gorm.DB, backend string) error {
|
||||
if err := db.Exec(`UPDATE nodes SET version = agent_version WHERE version = ''`).Error; err != nil {
|
||||
return fmt.Errorf("failed to backfill version from agent_version: %w", err)
|
||||
}
|
||||
if err := migrator.DropColumn(&nodeV21{}, "agent_version"); err != nil {
|
||||
if err := dropLegacyNodeColumn("agent_version"); err != nil {
|
||||
slog.Warn("failed to drop agent_version after backfill", "error", err)
|
||||
}
|
||||
} else {
|
||||
@@ -74,7 +78,7 @@ func migrateV21(ctx Context, db *gorm.DB, backend string) error {
|
||||
if err := db.Exec(`UPDATE nodes SET ext_version = nginx_version WHERE ext_version IS NULL OR ext_version = ''`).Error; err != nil {
|
||||
return fmt.Errorf("failed to backfill ext_version from nginx_version: %w", err)
|
||||
}
|
||||
if err := migrator.DropColumn(&nodeV21{}, "nginx_version"); err != nil {
|
||||
if err := dropLegacyNodeColumn("nginx_version"); err != nil {
|
||||
slog.Warn("failed to drop nginx_version after backfill", "error", err)
|
||||
}
|
||||
} else {
|
||||
@@ -94,13 +98,13 @@ func migrateV21(ctx Context, db *gorm.DB, backend string) error {
|
||||
|
||||
for _, col := range columnsToDrop {
|
||||
if migrator.HasColumn(&nodeV21{}, col) {
|
||||
if err := migrator.DropColumn(&nodeV21{}, col); err != nil {
|
||||
if err := dropLegacyNodeColumn(col); err != nil {
|
||||
slog.Warn("failed to drop column in v21 migration", "column", col, "error", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if err := ctx.ApplyCurrentSchema(db, backend); err != nil {
|
||||
if err := ctx.ApplyCurrentSchemaExcept(db, backend, "nodes"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user