mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #3309 from xiang90/enforce
etcdserver: add version enforcement when setting cluster version
This commit is contained in:
commit
ba3a9b5f92
@ -222,6 +222,7 @@ func (c *cluster) SetStore(st store.Store) { c.store = st }
|
||||
func (c *cluster) Recover() {
|
||||
c.members, c.removed = membersFromStore(c.store)
|
||||
c.version = clusterVersionFromStore(c.store)
|
||||
MustDetectDowngrade(c.version)
|
||||
}
|
||||
|
||||
// ValidateConfigurationChange takes a proposed ConfChange and
|
||||
@ -364,6 +365,7 @@ func (c *cluster) SetVersion(ver *semver.Version) {
|
||||
plog.Noticef("set the initial cluster version to %v", version.Cluster(ver.String()))
|
||||
}
|
||||
c.version = ver
|
||||
MustDetectDowngrade(c.version)
|
||||
}
|
||||
|
||||
func membersFromStore(st store.Store) (map[types.ID]*Member, map[types.ID]bool) {
|
||||
|
@ -252,3 +252,12 @@ func getVersion(m *Member, tr *http.Transport) (*version.Versions, error) {
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func MustDetectDowngrade(cv *semver.Version) {
|
||||
lv := semver.Must(semver.NewVersion(version.Version))
|
||||
// only keep major.minor version for comparison against cluster version
|
||||
lv = &semver.Version{Major: lv.Major, Minor: lv.Minor}
|
||||
if cv != nil && lv.LessThan(*cv) {
|
||||
plog.Fatalf("cluster cannot be downgraded (current version: %s is lower than determined cluster version: %s).", version.Version, version.Cluster(cv.String()))
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user