mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
etcdserver: recover cluster version from backend
This commit is contained in:
parent
5cd2502ab1
commit
ed5a01a48d
@ -893,7 +893,7 @@ func TestKVLargeRequests(t *testing.T) {
|
|||||||
expectError error
|
expectError error
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
maxRequestBytesServer: 1,
|
maxRequestBytesServer: 256,
|
||||||
maxCallSendBytesClient: 0,
|
maxCallSendBytesClient: 0,
|
||||||
maxCallRecvBytesClient: 0,
|
maxCallRecvBytesClient: 0,
|
||||||
valueSize: 1024,
|
valueSize: 1024,
|
||||||
|
@ -247,7 +247,7 @@ func (c *RaftCluster) Recover(onSet func(*zap.Logger, *semver.Version)) {
|
|||||||
defer c.Unlock()
|
defer c.Unlock()
|
||||||
|
|
||||||
c.members, c.removed = membersFromStore(c.lg, c.v2store)
|
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)
|
mustDetectDowngrade(c.lg, c.version)
|
||||||
onSet(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))
|
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
|
// ValidateClusterAndAssignIDs validates the local cluster by matching the PeerURLs
|
||||||
// with the existing cluster. If the validation succeeds, it assigns the IDs
|
// with the existing cluster. If the validation succeeds, it assigns the IDs
|
||||||
// from the existing cluster to the local cluster.
|
// from the existing cluster to the local cluster.
|
||||||
|
@ -1898,7 +1898,7 @@ func TestV3LargeRequests(t *testing.T) {
|
|||||||
expectError error
|
expectError error
|
||||||
}{
|
}{
|
||||||
// don't set to 0. use 0 as the default.
|
// 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, 9 * 1024 * 1024, nil},
|
||||||
{10 * 1024 * 1024, 10 * 1024 * 1024, rpctypes.ErrGRPCRequestTooLarge},
|
{10 * 1024 * 1024, 10 * 1024 * 1024, rpctypes.ErrGRPCRequestTooLarge},
|
||||||
{10 * 1024 * 1024, 10*1024*1024 + 5, rpctypes.ErrGRPCRequestTooLarge},
|
{10 * 1024 * 1024, 10*1024*1024 + 5, rpctypes.ErrGRPCRequestTooLarge},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user