diff --git a/clientv3/integration/kv_test.go b/clientv3/integration/kv_test.go index f4c024aed..8ee28dd96 100644 --- a/clientv3/integration/kv_test.go +++ b/clientv3/integration/kv_test.go @@ -893,7 +893,7 @@ func TestKVLargeRequests(t *testing.T) { expectError error }{ { - maxRequestBytesServer: 1, + maxRequestBytesServer: 256, maxCallSendBytesClient: 0, maxCallRecvBytesClient: 0, valueSize: 1024, diff --git a/etcdserver/api/membership/cluster.go b/etcdserver/api/membership/cluster.go index 137ff3038..5ca447945 100644 --- a/etcdserver/api/membership/cluster.go +++ b/etcdserver/api/membership/cluster.go @@ -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. diff --git a/integration/v3_grpc_test.go b/integration/v3_grpc_test.go index 331f2bc60..64b94d490 100644 --- a/integration/v3_grpc_test.go +++ b/integration/v3_grpc_test.go @@ -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},