Merge pull request #17665 from siyuanfoundation/3.4-downgrade

[3.4] Allow new server to join higher cluster version if NextClusterVersionCompatible is true
This commit is contained in:
Benjamin Wang 2024-03-29 21:04:28 +00:00 committed by GitHub
commit 75f799cdc1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 6 additions and 3 deletions

View File

@ -233,7 +233,7 @@ func decideClusterVersion(lg *zap.Logger, vers map[string]*version.Versions) *se
// cluster version in the range of [MinClusterVersion, Version] and no known members has a cluster version
// out of the range.
// We set this rule since when the local member joins, another member might be offline.
func isCompatibleWithCluster(lg *zap.Logger, cl *membership.RaftCluster, local types.ID, rt http.RoundTripper) bool {
func isCompatibleWithCluster(lg *zap.Logger, cl *membership.RaftCluster, local types.ID, rt http.RoundTripper, nextClusterVersionCompatible bool) bool {
vers := getVersions(lg, cl, local, rt)
minV := semver.Must(semver.NewVersion(version.MinClusterVersion))
maxV := semver.Must(semver.NewVersion(version.Version))
@ -241,6 +241,9 @@ func isCompatibleWithCluster(lg *zap.Logger, cl *membership.RaftCluster, local t
Major: maxV.Major,
Minor: maxV.Minor,
}
if nextClusterVersionCompatible {
maxV.Minor += 1
}
return isCompatibleWithVers(lg, vers, local, minV, maxV)
}

View File

@ -371,7 +371,7 @@ func NewServer(cfg ServerConfig) (srv *EtcdServer, err error) {
if err = membership.ValidateClusterAndAssignIDs(cfg.Logger, cl, existingCluster); err != nil {
return nil, fmt.Errorf("error validating peerURLs %s: %v", existingCluster, err)
}
if !isCompatibleWithCluster(cfg.Logger, cl, cl.MemberByName(cfg.Name).ID, prt) {
if !isCompatibleWithCluster(cfg.Logger, cl, cl.MemberByName(cfg.Name).ID, prt, cfg.NextClusterVersionCompatible) {
return nil, fmt.Errorf("incompatible with current running cluster")
}