mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
test: Handle adding new members for clusters with TCP enabled
This commit is contained in:
parent
5bcbf77980
commit
98242da5f1
@ -83,7 +83,7 @@ var (
|
|||||||
|
|
||||||
// LocalListenCount integration test uses unique ports, counting up, to listen for each
|
// LocalListenCount integration test uses unique ports, counting up, to listen for each
|
||||||
// member, ensuring restarted members can listen on the same port again.
|
// member, ensuring restarted members can listen on the same port again.
|
||||||
LocalListenCount = int64(0)
|
LocalListenCount = int32(0)
|
||||||
|
|
||||||
TestTLSInfo = transport.TLSInfo{
|
TestTLSInfo = transport.TLSInfo{
|
||||||
KeyFile: MustAbsPath("../fixtures/server.key.insecure"),
|
KeyFile: MustAbsPath("../fixtures/server.key.insecure"),
|
||||||
@ -177,11 +177,6 @@ type Cluster struct {
|
|||||||
LastMemberNum int
|
LastMemberNum int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Cluster) generateMemberName() string {
|
|
||||||
c.LastMemberNum++
|
|
||||||
return fmt.Sprintf("m%v", c.LastMemberNum-1)
|
|
||||||
}
|
|
||||||
|
|
||||||
func SchemeFromTLSInfo(tls *transport.TLSInfo) string {
|
func SchemeFromTLSInfo(tls *transport.TLSInfo) string {
|
||||||
if tls == nil {
|
if tls == nil {
|
||||||
return URLScheme
|
return URLScheme
|
||||||
@ -219,7 +214,7 @@ func NewClusterFromConfig(t testutil.TB, cfg *ClusterConfig) *Cluster {
|
|||||||
c := &Cluster{Cfg: cfg}
|
c := &Cluster{Cfg: cfg}
|
||||||
ms := make([]*Member, cfg.Size)
|
ms := make([]*Member, cfg.Size)
|
||||||
for i := 0; i < cfg.Size; i++ {
|
for i := 0; i < cfg.Size; i++ {
|
||||||
ms[i] = c.mustNewMember(t, int64(i))
|
ms[i] = c.mustNewMember(t)
|
||||||
}
|
}
|
||||||
c.Members = ms
|
c.Members = ms
|
||||||
if err := c.fillClusterForMembers(); err != nil {
|
if err := c.fillClusterForMembers(); err != nil {
|
||||||
@ -306,10 +301,12 @@ func (c *Cluster) HTTPMembers() []client.Member {
|
|||||||
return ms
|
return ms
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Cluster) mustNewMember(t testutil.TB, memberNumber int64) *Member {
|
func (c *Cluster) mustNewMember(t testutil.TB) *Member {
|
||||||
|
memberNumber := c.LastMemberNum
|
||||||
|
c.LastMemberNum++
|
||||||
m := MustNewMember(t,
|
m := MustNewMember(t,
|
||||||
MemberConfig{
|
MemberConfig{
|
||||||
Name: c.generateMemberName(),
|
Name: fmt.Sprintf("m%v", memberNumber-1),
|
||||||
MemberNumber: memberNumber,
|
MemberNumber: memberNumber,
|
||||||
AuthToken: c.Cfg.AuthToken,
|
AuthToken: c.Cfg.AuthToken,
|
||||||
PeerTLS: c.Cfg.PeerTLS,
|
PeerTLS: c.Cfg.PeerTLS,
|
||||||
@ -344,7 +341,7 @@ func (c *Cluster) mustNewMember(t testutil.TB, memberNumber int64) *Member {
|
|||||||
|
|
||||||
// addMember return PeerURLs of the added member.
|
// addMember return PeerURLs of the added member.
|
||||||
func (c *Cluster) addMember(t testutil.TB) types.URLs {
|
func (c *Cluster) addMember(t testutil.TB) types.URLs {
|
||||||
m := c.mustNewMember(t, 0)
|
m := c.mustNewMember(t)
|
||||||
|
|
||||||
scheme := SchemeFromTLSInfo(c.Cfg.PeerTLS)
|
scheme := SchemeFromTLSInfo(c.Cfg.PeerTLS)
|
||||||
|
|
||||||
@ -563,7 +560,7 @@ func isMembersEqual(membs []client.Member, wmembs []client.Member) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newLocalListener(t testutil.TB) net.Listener {
|
func newLocalListener(t testutil.TB) net.Listener {
|
||||||
c := atomic.AddInt64(&LocalListenCount, 1)
|
c := atomic.AddInt32(&LocalListenCount, 1)
|
||||||
// Go 1.8+ allows only numbers in port
|
// Go 1.8+ allows only numbers in port
|
||||||
addr := fmt.Sprintf("127.0.0.1:%05d%05d", c+BasePort, os.Getpid())
|
addr := fmt.Sprintf("127.0.0.1:%05d%05d", c+BasePort, os.Getpid())
|
||||||
return NewListenerWithAddr(t, addr)
|
return NewListenerWithAddr(t, addr)
|
||||||
@ -579,8 +576,8 @@ func NewListenerWithAddr(t testutil.TB, addr string) net.Listener {
|
|||||||
|
|
||||||
type Member struct {
|
type Member struct {
|
||||||
config.ServerConfig
|
config.ServerConfig
|
||||||
UniqNumber int64
|
UniqNumber int
|
||||||
MemberNumber int64
|
MemberNumber int
|
||||||
PeerListeners, ClientListeners []net.Listener
|
PeerListeners, ClientListeners []net.Listener
|
||||||
GrpcListener net.Listener
|
GrpcListener net.Listener
|
||||||
// PeerTLSInfo enables peer TLS when set
|
// PeerTLSInfo enables peer TLS when set
|
||||||
@ -622,7 +619,7 @@ func (m *Member) GRPCURL() string { return m.GrpcURL }
|
|||||||
type MemberConfig struct {
|
type MemberConfig struct {
|
||||||
Name string
|
Name string
|
||||||
UniqNumber int64
|
UniqNumber int64
|
||||||
MemberNumber int64
|
MemberNumber int
|
||||||
PeerTLS *transport.TLSInfo
|
PeerTLS *transport.TLSInfo
|
||||||
ClientTLS *transport.TLSInfo
|
ClientTLS *transport.TLSInfo
|
||||||
AuthToken string
|
AuthToken string
|
||||||
@ -652,7 +649,7 @@ func MustNewMember(t testutil.TB, mcfg MemberConfig) *Member {
|
|||||||
var err error
|
var err error
|
||||||
m := &Member{
|
m := &Member{
|
||||||
MemberNumber: mcfg.MemberNumber,
|
MemberNumber: mcfg.MemberNumber,
|
||||||
UniqNumber: atomic.AddInt64(&LocalListenCount, 1),
|
UniqNumber: int(atomic.AddInt32(&LocalListenCount, 1)),
|
||||||
}
|
}
|
||||||
|
|
||||||
peerScheme := SchemeFromTLSInfo(mcfg.PeerTLS)
|
peerScheme := SchemeFromTLSInfo(mcfg.PeerTLS)
|
||||||
@ -852,7 +849,7 @@ func (m *Member) grpcAddr() (network, host, port string) {
|
|||||||
return network, host, port
|
return network, host, port
|
||||||
}
|
}
|
||||||
|
|
||||||
func GrpcPortNumber(uniqNumber, memberNumber int64) int64 {
|
func GrpcPortNumber(uniqNumber, memberNumber int) int {
|
||||||
return BaseGRPCPort + uniqNumber*10 + memberNumber
|
return BaseGRPCPort + uniqNumber*10 + memberNumber
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1545,7 +1542,7 @@ func (c *ClusterV3) GetLearnerMembers() ([]*pb.Member, error) {
|
|||||||
// AddAndLaunchLearnerMember creates a leaner member, adds it to Cluster
|
// AddAndLaunchLearnerMember creates a leaner member, adds it to Cluster
|
||||||
// via v3 MemberAdd API, and then launches the new member.
|
// via v3 MemberAdd API, and then launches the new member.
|
||||||
func (c *ClusterV3) AddAndLaunchLearnerMember(t testutil.TB) {
|
func (c *ClusterV3) AddAndLaunchLearnerMember(t testutil.TB) {
|
||||||
m := c.mustNewMember(t, 0)
|
m := c.mustNewMember(t)
|
||||||
m.IsLearner = true
|
m.IsLearner = true
|
||||||
|
|
||||||
scheme := SchemeFromTLSInfo(c.Cfg.PeerTLS)
|
scheme := SchemeFromTLSInfo(c.Cfg.PeerTLS)
|
||||||
@ -1646,7 +1643,7 @@ func (p SortableProtoMemberSliceByPeerURLs) Swap(i, j int) { p[i], p[j] = p[j],
|
|||||||
|
|
||||||
// MustNewMember creates a new member instance based on the response of V3 Member Add API.
|
// MustNewMember creates a new member instance based on the response of V3 Member Add API.
|
||||||
func (c *ClusterV3) MustNewMember(t testutil.TB, resp *clientv3.MemberAddResponse) *Member {
|
func (c *ClusterV3) MustNewMember(t testutil.TB, resp *clientv3.MemberAddResponse) *Member {
|
||||||
m := c.mustNewMember(t, 0)
|
m := c.mustNewMember(t)
|
||||||
m.IsLearner = resp.Member.IsLearner
|
m.IsLearner = resp.Member.IsLearner
|
||||||
m.NewCluster = false
|
m.NewCluster = false
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user