mirror of https://github.com/portainer/portainer
fix(migrator): fix setting version struct fields after migration [EE-4613] (#8090)
* fix setting version struct fields * fix go tests * remove versionUpdateRequired * remove old code that was originally for debugging purposespull/8128/head
parent
d78b762f7b
commit
95bc508462
|
@ -8,7 +8,6 @@ import (
|
||||||
"path"
|
"path"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/portainer/libhelm"
|
"github.com/portainer/libhelm"
|
||||||
portainer "github.com/portainer/portainer/api"
|
portainer "github.com/portainer/portainer/api"
|
||||||
|
@ -142,15 +141,6 @@ func initDataStore(flags *portainer.CLIFlags, secretKey []byte, fileService port
|
||||||
go func() {
|
go func() {
|
||||||
<-shutdownCtx.Done()
|
<-shutdownCtx.Done()
|
||||||
defer connection.Close()
|
defer connection.Close()
|
||||||
|
|
||||||
exportFilename := path.Join(*flags.Data, fmt.Sprintf("export-%d.json", time.Now().Unix()))
|
|
||||||
|
|
||||||
err := store.Export(exportFilename)
|
|
||||||
if err != nil {
|
|
||||||
log.Error().Str("filename", exportFilename).Err(err).Msg("failed to export")
|
|
||||||
} else {
|
|
||||||
log.Debug().Str("filename", exportFilename).Msg("exported")
|
|
||||||
}
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return store
|
return store
|
||||||
|
|
|
@ -32,15 +32,13 @@ func (m *Migrator) Migrate() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
newMigratorCount := 0
|
newMigratorCount := 0
|
||||||
versionUpdateRequired := false
|
apiVersion := semver.MustParse(portainer.APIVersion)
|
||||||
if schemaVersion.Equal(semver.MustParse(portainer.APIVersion)) {
|
if schemaVersion.Equal(apiVersion) {
|
||||||
// detect and run migrations when the versions are the same.
|
// detect and run migrations when the versions are the same.
|
||||||
// e.g. development builds
|
// e.g. development builds
|
||||||
latestMigrations := m.latestMigrations()
|
latestMigrations := m.latestMigrations()
|
||||||
if latestMigrations.version.Equal(schemaVersion) &&
|
if latestMigrations.version.Equal(schemaVersion) &&
|
||||||
version.MigratorCount != len(latestMigrations.migrationFuncs) {
|
version.MigratorCount != len(latestMigrations.migrationFuncs) {
|
||||||
|
|
||||||
versionUpdateRequired = true
|
|
||||||
err := runMigrations(latestMigrations.migrationFuncs)
|
err := runMigrations(latestMigrations.migrationFuncs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -51,7 +49,7 @@ func (m *Migrator) Migrate() error {
|
||||||
// regular path when major/minor/patch versions differ
|
// regular path when major/minor/patch versions differ
|
||||||
for _, migration := range m.migrations {
|
for _, migration := range m.migrations {
|
||||||
if schemaVersion.LessThan(migration.version) {
|
if schemaVersion.LessThan(migration.version) {
|
||||||
versionUpdateRequired = true
|
|
||||||
log.Info().Msgf("migrating data to %s", migration.version.String())
|
log.Info().Msgf("migrating data to %s", migration.version.String())
|
||||||
err := runMigrations(migration.migrationFuncs)
|
err := runMigrations(migration.migrationFuncs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -59,27 +57,27 @@ func (m *Migrator) Migrate() error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
newMigratorCount = len(migration.migrationFuncs)
|
if apiVersion.Equal(migration.version) {
|
||||||
|
newMigratorCount = len(migration.migrationFuncs)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if versionUpdateRequired || newMigratorCount != version.MigratorCount {
|
err = m.Always()
|
||||||
err := m.Always()
|
if err != nil {
|
||||||
if err != nil {
|
return migrationError(err, "Always migrations returned error")
|
||||||
return migrationError(err, "Always migrations returned error")
|
|
||||||
}
|
|
||||||
|
|
||||||
version.SchemaVersion = portainer.APIVersion
|
|
||||||
version.MigratorCount = newMigratorCount
|
|
||||||
|
|
||||||
err = m.versionService.UpdateVersion(version)
|
|
||||||
if err != nil {
|
|
||||||
return migrationError(err, "StoreDBVersion")
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Info().Msgf("db migrated to %s", portainer.APIVersion)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
version.SchemaVersion = portainer.APIVersion
|
||||||
|
version.MigratorCount = newMigratorCount
|
||||||
|
|
||||||
|
err = m.versionService.UpdateVersion(version)
|
||||||
|
if err != nil {
|
||||||
|
return migrationError(err, "StoreDBVersion")
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Info().Msgf("db migrated to %s", portainer.APIVersion)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -930,6 +930,6 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"version": {
|
"version": {
|
||||||
"VERSION": "{\"SchemaVersion\":\"2.17.0\",\"MigratorCount\":1,\"Edition\":1,\"InstanceID\":\"463d5c47-0ea5-4aca-85b1-405ceefee254\"}"
|
"VERSION": "{\"SchemaVersion\":\"2.17.0\",\"MigratorCount\":0,\"Edition\":1,\"InstanceID\":\"463d5c47-0ea5-4aca-85b1-405ceefee254\"}"
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue