From f3ac4aa2ff4c19b6468f39071d57200d6148846e Mon Sep 17 00:00:00 2001 From: qingxinhome <758355272@qq.com> Date: Wed, 4 Sep 2024 18:00:24 +0800 Subject: [PATCH 1/5] append log info --- pkg/bootstrap/service_upgrade.go | 2 +- pkg/frontend/mysql_cmd_executor.go | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/bootstrap/service_upgrade.go b/pkg/bootstrap/service_upgrade.go index 27c1d72d0a0eb..2b23f7aea87af 100644 --- a/pkg/bootstrap/service_upgrade.go +++ b/pkg/bootstrap/service_upgrade.go @@ -190,7 +190,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 { diff --git a/pkg/frontend/mysql_cmd_executor.go b/pkg/frontend/mysql_cmd_executor.go index f98c0cad714ae..39c5f15aae47a 100644 --- a/pkg/frontend/mysql_cmd_executor.go +++ b/pkg/frontend/mysql_cmd_executor.go @@ -3359,8 +3359,9 @@ func (h *marshalPlanHandler) Stats(ctx context.Context, ses FeSession) (statsByt statsInfo.CompileDuration+ statsInfo.PlanDuration) - (statsInfo.IOAccessTimeConsumption + statsInfo.IOMergerTimeConsumption()) if val < 0 { - ses.Warnf(ctx, " negative cpu (%s) + statsInfo(%d + %d + %d - %d - %d) = %d", + ses.Warnf(ctx, " negative cpu (%s) + statsInfo(%d + %d + %d + %d - %d - %d) = %d", uuid.UUID(h.stmt.StatementID).String(), + statsByte.GetTimeConsumed(), statsInfo.ParseDuration, statsInfo.CompileDuration, statsInfo.PlanDuration, From d9a0c4d636209e41cfc50ba1e34c431f70a40298 Mon Sep 17 00:00:00 2001 From: qingxinhome <758355272@qq.com> Date: Wed, 4 Sep 2024 18:02:31 +0800 Subject: [PATCH 2/5] recover code --- pkg/frontend/mysql_cmd_executor.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/frontend/mysql_cmd_executor.go b/pkg/frontend/mysql_cmd_executor.go index 39c5f15aae47a..f98c0cad714ae 100644 --- a/pkg/frontend/mysql_cmd_executor.go +++ b/pkg/frontend/mysql_cmd_executor.go @@ -3359,9 +3359,8 @@ func (h *marshalPlanHandler) Stats(ctx context.Context, ses FeSession) (statsByt statsInfo.CompileDuration+ statsInfo.PlanDuration) - (statsInfo.IOAccessTimeConsumption + statsInfo.IOMergerTimeConsumption()) if val < 0 { - ses.Warnf(ctx, " negative cpu (%s) + statsInfo(%d + %d + %d + %d - %d - %d) = %d", + ses.Warnf(ctx, " negative cpu (%s) + statsInfo(%d + %d + %d - %d - %d) = %d", uuid.UUID(h.stmt.StatementID).String(), - statsByte.GetTimeConsumed(), statsInfo.ParseDuration, statsInfo.CompileDuration, statsInfo.PlanDuration, From afe08278ec5a9d683ebe44b98fe401f39a787ebf Mon Sep 17 00:00:00 2001 From: qingxinhome <758355272@qq.com> Date: Wed, 4 Sep 2024 19:10:45 +0800 Subject: [PATCH 3/5] fix version upgrade with same versionOffset --- pkg/bootstrap/service_upgrade.go | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/pkg/bootstrap/service_upgrade.go b/pkg/bootstrap/service_upgrade.go index 2b23f7aea87af..801904835ea87 100644 --- a/pkg/bootstrap/service_upgrade.go +++ b/pkg/bootstrap/service_upgrade.go @@ -146,13 +146,26 @@ 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() && v.Version != final.Version && v.VersionOffset != final.VersionOffset { + if v.Version == final.Version { + 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)) + } + } else { + panic(fmt.Sprintf("cannot upgrade to version %s , because version %s is in upgrading", + final.Version, + v.Version)) + } + } // cluster is running at v1, cannot startup a old version to join cluster. if v.IsReady() && versions.Compare(final.Version, v.Version) < 0 { From ea8e9cc05d85a67d863ac286a2c2c06fef6b9c0f Mon Sep 17 00:00:00 2001 From: qingxinhome <758355272@qq.com> Date: Thu, 5 Sep 2024 14:21:56 +0800 Subject: [PATCH 4/5] improve code --- pkg/bootstrap/service_upgrade.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/bootstrap/service_upgrade.go b/pkg/bootstrap/service_upgrade.go index 801904835ea87..bacb04152aebc 100644 --- a/pkg/bootstrap/service_upgrade.go +++ b/pkg/bootstrap/service_upgrade.go @@ -151,7 +151,7 @@ func (s *service) doCheckUpgrade(ctx context.Context) error { 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 && v.VersionOffset != final.VersionOffset { + if !v.IsReady() { if v.Version == final.Version { 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", From 29b65e15cb474fa9372cd3d3c9ab260ffee81c42 Mon Sep 17 00:00:00 2001 From: qingxinhome <758355272@qq.com> Date: Fri, 6 Sep 2024 14:41:34 +0800 Subject: [PATCH 5/5] improve code --- pkg/bootstrap/service_upgrade.go | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/pkg/bootstrap/service_upgrade.go b/pkg/bootstrap/service_upgrade.go index bacb04152aebc..cb69bed66f5e1 100644 --- a/pkg/bootstrap/service_upgrade.go +++ b/pkg/bootstrap/service_upgrade.go @@ -152,20 +152,17 @@ func (s *service) doCheckUpgrade(ctx context.Context) error { // cluster is upgrading to v1, only v1's cn can start up. if !v.IsReady() { - if v.Version == final.Version { - 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)) - } - } else { - panic(fmt.Sprintf("cannot upgrade to version %s , because version %s is in upgrading", + 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 {