etcdserver: recover cluster version from backend

This commit is contained in:
Jingyi Hu 2019-12-03 10:35:50 -08:00 committed by yoyinzyc
parent 5cd2502ab1
commit ed5a01a48d
3 changed files with 23 additions and 3 deletions

View File

@ -893,7 +893,7 @@ func TestKVLargeRequests(t *testing.T) {
expectError error
}{
{
maxRequestBytesServer: 1,
maxRequestBytesServer: 256,
maxCallSendBytesClient: 0,
maxCallRecvBytesClient: 0,
valueSize: 1024,

View File

@ -247,7 +247,7 @@ func (c *RaftCluster) Recover(onSet func(*zap.Logger, *semver.Version)) {
defer c.Unlock()
c.members, c.removed = membersFromStore(c.lg, c.v2store)
c.version = clusterVersionFromStore(c.lg, c.v2store)
c.version = clusterVersionFromBackend(c.lg, c.be)
mustDetectDowngrade(c.lg, c.version)
onSet(c.lg, c.version)
@ -753,6 +753,26 @@ func clusterVersionFromStore(lg *zap.Logger, st v2store.Store) *semver.Version {
return semver.Must(semver.NewVersion(*e.Node.Value))
}
func clusterVersionFromBackend(lg *zap.Logger, be backend.Backend) *semver.Version {
ckey := backendClusterVersionKey()
tx := be.ReadTx()
tx.RLock()
defer tx.RUnlock()
keys, vals := tx.UnsafeRange(clusterBucketName, ckey, nil, 0)
if len(keys) == 0 {
return nil
}
if len(keys) != 1 {
if lg != nil {
lg.Panic(
"unexpected number of keys when getting cluster version from backend",
zap.Int("number fo keys", len(keys)),
)
}
}
return semver.Must(semver.NewVersion(string(vals[0])))
}
// ValidateClusterAndAssignIDs validates the local cluster by matching the PeerURLs
// with the existing cluster. If the validation succeeds, it assigns the IDs
// from the existing cluster to the local cluster.

View File

@ -1898,7 +1898,7 @@ func TestV3LargeRequests(t *testing.T) {
expectError error
}{
// don't set to 0. use 0 as the default.
{1, 1024, rpctypes.ErrGRPCRequestTooLarge},
{256, 1024, rpctypes.ErrGRPCRequestTooLarge},
{10 * 1024 * 1024, 9 * 1024 * 1024, nil},
{10 * 1024 * 1024, 10 * 1024 * 1024, rpctypes.ErrGRPCRequestTooLarge},
{10 * 1024 * 1024, 10*1024*1024 + 5, rpctypes.ErrGRPCRequestTooLarge},