Dashboard: Do not run backend migrations if schemaVersion < min_version migration implemented in the backend (#102088)

This commit is contained in:
Ivan Ortega Alba
2025-03-14 08:55:40 +00:00
committed by GitHub
parent d3a9c04562
commit 0e5c436288
4 changed files with 33 additions and 1 deletions
+6
View File
@@ -9,6 +9,12 @@ func Migrate(dash map[string]interface{}, targetVersion int) error {
inputVersion := schemaversion.GetSchemaVersion(dash)
dash["schemaVersion"] = inputVersion
// If the schema version is older than the minimum version, with migration support,
// we don't migrate the dashboard.
if inputVersion < schemaversion.MIN_VERSION {
return schemaversion.NewMigrationError("schema version is too old", inputVersion, schemaversion.MIN_VERSION)
}
for nextVersion := inputVersion + 1; nextVersion <= targetVersion; nextVersion++ {
if migration, ok := schemaversion.Migrations[nextVersion]; ok {
if err := migration(dash); err != nil {
@@ -22,6 +22,15 @@ func TestMigrate(t *testing.T) {
files, err := os.ReadDir(INPUT_DIR)
require.NoError(t, err)
t.Run("minimum version check", func(t *testing.T) {
err := migration.Migrate(map[string]interface{}{
"schemaVersion": schemaversion.MIN_VERSION - 1,
}, schemaversion.MIN_VERSION)
var minVersionErr = schemaversion.NewMigrationError("schema version is too old", schemaversion.MIN_VERSION-1, schemaversion.MIN_VERSION)
require.ErrorAs(t, err, &minVersionErr)
})
for _, f := range files {
if f.IsDir() {
continue
@@ -23,3 +23,17 @@ type MigrationError struct {
func (e *MigrationError) Error() string {
return fmt.Errorf("schema migration from version %d to %d failed: %v", e.currentVersion, e.targetVersion, e.msg).Error()
}
// MinimumVersionError is an error that is returned when the schema version is below the minimum version.
func NewMinimumVersionError(inputVersion int) *MinimumVersionError {
return &MinimumVersionError{inputVersion: inputVersion}
}
// MinimumVersionError is an error type for minimum version errors.
type MinimumVersionError struct {
inputVersion int
}
func (e *MinimumVersionError) Error() string {
return fmt.Errorf("input schema version is below minimum version. input: %d minimum: %d", e.inputVersion, MIN_VERSION).Error()
}
@@ -4,7 +4,10 @@ import "strconv"
type SchemaVersionMigrationFunc func(map[string]interface{}) error
const LATEST_VERSION = 41
const (
MIN_VERSION = 36
LATEST_VERSION = 41
)
var Migrations = map[int]SchemaVersionMigrationFunc{
37: V37,