diff --git a/pkg/bootstrap/service_upgrade.go b/pkg/bootstrap/service_upgrade.go index 27c1d72d0a0eb..cb69bed66f5e1 100644 --- a/pkg/bootstrap/service_upgrade.go +++ b/pkg/bootstrap/service_upgrade.go @@ -146,13 +146,23 @@ func (s *service) doCheckUpgrade(ctx context.Context) error { getUpgradeLogger().Info("get current mo cluster latest version", zap.String("latest", v.Version), - zap.String("final", final.Version)) + zap.Uint32("latest versionOffset", v.VersionOffset), + zap.String("final", final.Version), + zap.Uint32("final versionOffset", final.VersionOffset)) // cluster is upgrading to v1, only v1's cn can start up. - if !v.IsReady() && v.Version != final.Version { - panic(fmt.Sprintf("cannot upgrade to version %s, because version %s is in upgrading", - final.Version, - v.Version)) + if !v.IsReady() { + if v.Version != final.Version { + panic(fmt.Sprintf("cannot upgrade to version %s, because version %s is in upgrading", + final.Version, + v.Version)) + } else if v.VersionOffset != final.VersionOffset { + panic(fmt.Sprintf("cannot upgrade to version %s with versionOffset[%d], because version %s with versionOffset[%d] is in upgrading", + final.Version, + final.VersionOffset, + v.Version, + v.VersionOffset)) + } } // cluster is running at v1, cannot startup a old version to join cluster. if v.IsReady() && versions.Compare(final.Version, v.Version) < 0 { @@ -190,7 +200,7 @@ func (s *service) doCheckUpgrade(ctx context.Context) error { } getUpgradeLogger().Info("final version added", - zap.String("final", final.Version)) + zap.String("final", final.Version), zap.Uint32("versionOffset", final.VersionOffset)) latest, err := versions.MustGetLatestReadyVersion(txn) if err != nil {