mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
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:
commit
75f799cdc1
@ -126,7 +126,7 @@ Clustering:
|
||||
--enable-v2 '` + strconv.FormatBool(embed.DefaultEnableV2) + `'
|
||||
Accept etcd V2 client requests.
|
||||
--next-cluster-version-compatible 'false'
|
||||
Enable 3.4 to be compatible with next version 3.5, to allow 3.4 server to join 3.5 cluster and start on 3.5 schema.
|
||||
Enable 3.4 to be compatible with next version 3.5, to allow 3.4 server to join 3.5 cluster and start on 3.5 schema.
|
||||
|
||||
Security:
|
||||
--cert-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)
|
||||
}
|
||||
|
||||
|
@ -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")
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user