server: Use server version to decide if to downgrade has finished

This commit is contained in:
Marek Siarkowicz
2021-10-06 15:10:30 +02:00
parent f5d71fa389
commit 335dc98c8d
2 changed files with 22 additions and 2 deletions

View File

@@ -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),

View File

@@ -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{