From f35ef282733ecb44f535c915a4c82db856b57660 Mon Sep 17 00:00:00 2001 From: Patryk Matuszak <305846+pmtk@users.noreply.github.com> Date: Wed, 21 Jun 2023 15:05:25 +0200 Subject: [PATCH] data should not be older by more than 1 minor ver --- pkg/admin/prerun/version.go | 10 ++++++++++ pkg/admin/prerun/version_test.go | 14 ++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/pkg/admin/prerun/version.go b/pkg/admin/prerun/version.go index c057d8f645..d3c995d7e4 100644 --- a/pkg/admin/prerun/version.go +++ b/pkg/admin/prerun/version.go @@ -105,6 +105,8 @@ func getVersionOfData() (versionMetadata, error) { return versionMetadataFromString(string(versionFileContents)) } +// checkVersionDiff compares versions of executable and existing data for purposes of data migration. +// It returns true if the migration should be performed. func checkVersionDiff(execVer, dataVer versionMetadata) (bool, error) { if execVer == dataVer { return false, nil @@ -118,5 +120,13 @@ func checkVersionDiff(execVer, dataVer versionMetadata) (bool, error) { return false, fmt.Errorf("executable (%s) is older than existing data (%s): migrating data to older version is not supported", execVer.String(), dataVer.String()) } + if execVer.Minor > dataVer.Minor { + if execVer.Minor-1 == dataVer.Minor { + return true, nil + } else { + return false, fmt.Errorf("executable (%s) is too recent compared to existing data (%s): maximum minor version difference is 1", execVer.String(), dataVer.String()) + } + } + return false, nil } diff --git a/pkg/admin/prerun/version_test.go b/pkg/admin/prerun/version_test.go index 93584a5bcc..e8bb978729 100644 --- a/pkg/admin/prerun/version_test.go +++ b/pkg/admin/prerun/version_test.go @@ -35,6 +35,20 @@ func TestCheckVersionDiff(t *testing.T) { expectedMigrationRequired: false, errExpected: true, }, + { + name: "binary must be newer only by one minor version", + execVer: versionMetadata{Major: 4, Minor: 15}, + dataVer: versionMetadata{Major: 4, Minor: 14}, + expectedMigrationRequired: true, + errExpected: false, + }, + { + name: "binary newer more than one minor version is not supported", + execVer: versionMetadata{Major: 4, Minor: 15}, + dataVer: versionMetadata{Major: 4, Minor: 13}, + expectedMigrationRequired: false, + errExpected: true, + }, } for _, td := range testData {