mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
server: Use server version to decide if to downgrade has finished
This commit is contained in:
@@ -185,11 +185,12 @@ func (m *Monitor) membersMinimalServerVersion() *semver.Version {
|
||||
// It can be used to decide the whether the cluster finishes downgrading to target version.
|
||||
func (m *Monitor) versionsMatchTarget(targetVersion *semver.Version) bool {
|
||||
vers := m.s.GetMembersVersions()
|
||||
targetVersion = &semver.Version{Major: targetVersion.Major, Minor: targetVersion.Minor}
|
||||
for mid, ver := range vers {
|
||||
if ver == nil {
|
||||
return false
|
||||
}
|
||||
v, err := semver.NewVersion(ver.Cluster)
|
||||
v, err := semver.NewVersion(ver.Server)
|
||||
if err != nil {
|
||||
m.lg.Warn(
|
||||
"failed to parse server version of remote member",
|
||||
@@ -199,6 +200,7 @@ func (m *Monitor) versionsMatchTarget(targetVersion *semver.Version) bool {
|
||||
)
|
||||
return false
|
||||
}
|
||||
v = &semver.Version{Major: v.Major, Minor: v.Minor}
|
||||
if !targetVersion.Equal(*v) {
|
||||
m.lg.Warn("remotes server has mismatching etcd version",
|
||||
zap.String("remote-member-id", mid),
|
||||
|
||||
@@ -127,7 +127,7 @@ func TestVersionMatchTarget(t *testing.T) {
|
||||
"When cannot parse peer version",
|
||||
&semver.Version{Major: 3, Minor: 4},
|
||||
map[string]*version.Versions{
|
||||
"mem1": {Server: "3.4.1", Cluster: "3.4"},
|
||||
"mem1": {Server: "3.4", Cluster: "3.4.0"},
|
||||
"mem2": {Server: "3.4.2-pre", Cluster: "3.4.0"},
|
||||
"mem3": {Server: "3.4.2", Cluster: "3.4.0"},
|
||||
},
|
||||
@@ -277,6 +277,24 @@ func TestCancelDowngradeIfNeeded(t *testing.T) {
|
||||
"b": {Cluster: "3.6.0", Server: "3.6.2"},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Continue downgrade if just started",
|
||||
memberVersions: map[string]*version.Versions{
|
||||
"a": {Cluster: "3.5.0", Server: "3.6.1"},
|
||||
"b": {Cluster: "3.5.0", Server: "3.6.2"},
|
||||
},
|
||||
downgrade: &DowngradeInfo{TargetVersion: "3.5.0", Enabled: true},
|
||||
expectDowngrade: &DowngradeInfo{TargetVersion: "3.5.0", Enabled: true},
|
||||
},
|
||||
{
|
||||
name: "Continue downgrade if there is at least one member with not matching",
|
||||
memberVersions: map[string]*version.Versions{
|
||||
"a": {Cluster: "3.5.0", Server: "3.5.1"},
|
||||
"b": {Cluster: "3.5.0", Server: "3.6.2"},
|
||||
},
|
||||
downgrade: &DowngradeInfo{TargetVersion: "3.5.0", Enabled: true},
|
||||
expectDowngrade: &DowngradeInfo{TargetVersion: "3.5.0", Enabled: true},
|
||||
},
|
||||
{
|
||||
name: "Cancel downgrade if all members have downgraded",
|
||||
memberVersions: map[string]*version.Versions{
|
||||
|
||||
Reference in New Issue
Block a user