Browse Source

Merge pull request #4294 from xiang90/member_api

*: finish member api implementation
Xiang Li 10 years ago
parent
commit
6d8b82f6ce

+ 219 - 0
etcdctlv3/command/member_command.go

@@ -0,0 +1,219 @@
+// Copyright 2016 CoreOS, Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package command
+
+import (
+	"fmt"
+	"strconv"
+	"strings"
+
+	"github.com/coreos/etcd/Godeps/_workspace/src/github.com/spf13/cobra"
+	"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
+	"github.com/coreos/etcd/Godeps/_workspace/src/google.golang.org/grpc"
+	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
+)
+
+var (
+	memberID       uint64
+	memberPeerURLs string
+)
+
+// NewMemberCommand returns the cobra command for "member".
+func NewMemberCommand() *cobra.Command {
+	mc := &cobra.Command{
+		Use:   "member",
+		Short: "member is used to manage membership in an etcd cluster.",
+	}
+
+	mc.AddCommand(NewMemberAddCommand())
+	mc.AddCommand(NewMemberRemoveCommand())
+	mc.AddCommand(NewMemberUpdateCommand())
+	mc.AddCommand(NewMemberListCommand())
+
+	return mc
+}
+
+// NewMemberAddCommand returns the cobra command for "member add".
+func NewMemberAddCommand() *cobra.Command {
+	cc := &cobra.Command{
+		Use:   "add",
+		Short: "add is used to add a member into the cluster",
+
+		Run: memberAddCommandFunc,
+	}
+
+	cc.Flags().StringVar(&memberPeerURLs, "peerURLs", "", "comma separated peer URLs for the new member.")
+
+	return cc
+}
+
+// NewMemberRemoveCommand returns the cobra command for "member remove".
+func NewMemberRemoveCommand() *cobra.Command {
+	cc := &cobra.Command{
+		Use:   "remove",
+		Short: "remove is used to remove a member from the cluster",
+
+		Run: memberRemoveCommandFunc,
+	}
+
+	return cc
+}
+
+// NewMemberUpdateCommand returns the cobra command for "member update".
+func NewMemberUpdateCommand() *cobra.Command {
+	cc := &cobra.Command{
+		Use:   "update",
+		Short: "update is used to update a member in the cluster",
+
+		Run: memberUpdateCommandFunc,
+	}
+
+	cc.Flags().StringVar(&memberPeerURLs, "peerURLs", "", "comma separated peer URLs for the updated member.")
+
+	return cc
+}
+
+// NewMemberListCommand returns the cobra command for "member list".
+func NewMemberListCommand() *cobra.Command {
+	cc := &cobra.Command{
+		Use:   "list",
+		Short: "list is used to list all members in the cluster",
+
+		Run: memberListCommandFunc,
+	}
+
+	return cc
+}
+
+// memberAddCommandFunc executes the "member add" command.
+func memberAddCommandFunc(cmd *cobra.Command, args []string) {
+	if len(args) != 1 {
+		ExitWithError(ExitBadArgs, fmt.Errorf("member name not provided."))
+	}
+
+	if len(memberPeerURLs) == 0 {
+		ExitWithError(ExitBadArgs, fmt.Errorf("member peer urls not provided."))
+	}
+
+	urls := strings.Split(memberPeerURLs, ",")
+
+	endpoint, err := cmd.Flags().GetString("endpoint")
+	if err != nil {
+		ExitWithError(ExitError, err)
+	}
+	conn, err := grpc.Dial(endpoint)
+	if err != nil {
+		ExitWithError(ExitBadConnection, err)
+	}
+	mc := pb.NewClusterClient(conn)
+
+	resp, err := mc.MemberAdd(context.TODO(), &pb.MemberAddRequest{PeerURLs: urls})
+	if err != nil {
+		ExitWithError(ExitError, err)
+	}
+
+	fmt.Printf("Member %16x added to cluster %16x\n", args[0], resp.Member.ID, resp.Header.ClusterId)
+}
+
+// memberRemoveCommandFunc executes the "member remove" command.
+func memberRemoveCommandFunc(cmd *cobra.Command, args []string) {
+	if len(args) != 1 {
+		ExitWithError(ExitBadArgs, fmt.Errorf("member ID is not provided"))
+	}
+
+	id, err := strconv.ParseUint(args[0], 16, 64)
+	if err != nil {
+		ExitWithError(ExitBadArgs, fmt.Errorf("bad member ID arg (%v), expecting ID in Hex", err))
+	}
+
+	endpoint, err := cmd.Flags().GetString("endpoint")
+	if err != nil {
+		ExitWithError(ExitError, err)
+	}
+	conn, err := grpc.Dial(endpoint)
+	if err != nil {
+		ExitWithError(ExitBadConnection, err)
+	}
+	mc := pb.NewClusterClient(conn)
+
+	resp, err := mc.MemberRemove(context.TODO(), &pb.MemberRemoveRequest{ID: uint64(id)})
+	if err != nil {
+		ExitWithError(ExitError, err)
+	}
+
+	fmt.Printf("Member %16x removed from cluster %16x\n", id, resp.Header.ClusterId)
+}
+
+// memberUpdateCommandFunc executes the "member update" command.
+func memberUpdateCommandFunc(cmd *cobra.Command, args []string) {
+	if len(args) != 1 {
+		ExitWithError(ExitBadArgs, fmt.Errorf("member ID is not provided"))
+	}
+
+	id, err := strconv.ParseUint(args[0], 16, 64)
+	if err != nil {
+		ExitWithError(ExitBadArgs, fmt.Errorf("bad member ID arg (%v), expecting ID in Hex", err))
+	}
+
+	if len(memberPeerURLs) == 0 {
+		ExitWithError(ExitBadArgs, fmt.Errorf("member peer urls not provided."))
+	}
+
+	urls := strings.Split(memberPeerURLs, ",")
+
+	endpoint, err := cmd.Flags().GetString("endpoint")
+	if err != nil {
+		ExitWithError(ExitError, err)
+	}
+	conn, err := grpc.Dial(endpoint)
+	if err != nil {
+		ExitWithError(ExitBadConnection, err)
+	}
+	mc := pb.NewClusterClient(conn)
+
+	resp, err := mc.MemberUpdate(context.TODO(), &pb.MemberUpdateRequest{ID: uint64(id), PeerURLs: urls})
+	if err != nil {
+		ExitWithError(ExitError, err)
+	}
+
+	fmt.Printf("Member %16x updated in cluster %16x\n", id, resp.Header.ClusterId)
+}
+
+// memberListCommandFunc executes the "member list" command.
+func memberListCommandFunc(cmd *cobra.Command, args []string) {
+	endpoint, err := cmd.Flags().GetString("endpoint")
+	if err != nil {
+		ExitWithError(ExitError, err)
+	}
+	conn, err := grpc.Dial(endpoint)
+	if err != nil {
+		ExitWithError(ExitBadConnection, err)
+	}
+	mc := pb.NewClusterClient(conn)
+
+	resp, err := mc.MemberList(context.TODO(), &pb.MemberListRequest{})
+	if err != nil {
+		ExitWithError(ExitError, err)
+	}
+
+	// use https://github.com/olekukonko/tablewriter to print out a pretty table?
+	for _, m := range resp.Members {
+		if len(m.Name) == 0 {
+			fmt.Printf("%16x[unstarted]: peerURLs=%s\n", m.ID, strings.Join(m.PeerURLs, ","))
+		} else {
+			fmt.Printf("%16x: name=%s peerURLs=%s clientURLs=%s\n", m.ID, m.Name, strings.Join(m.PeerURLs, ","), strings.Join(m.ClientURLs, ","))
+		}
+	}
+}

+ 1 - 0
etcdctlv3/main.go

@@ -52,6 +52,7 @@ func init() {
 		command.NewWatchCommand(),
 		command.NewVersionCommand(),
 		command.NewLeaseCommand(),
+		command.NewMemberCommand(),
 	)
 }
 

+ 1 - 0
etcdmain/etcd.go

@@ -334,6 +334,7 @@ func startEtcd(cfg *config) (<-chan struct{}, error) {
 		etcdserverpb.RegisterKVServer(grpcServer, v3rpc.NewKVServer(s))
 		etcdserverpb.RegisterWatchServer(grpcServer, v3rpc.NewWatchServer(s))
 		etcdserverpb.RegisterLeaseServer(grpcServer, v3rpc.NewLeaseServer(s))
+		etcdserverpb.RegisterClusterServer(grpcServer, v3rpc.NewClusterServer(s))
 		go func() { plog.Fatal(grpcServer.Serve(v3l)) }()
 	}
 

+ 5 - 0
etcdserver/api/v3rpc/error.go

@@ -26,4 +26,9 @@ var (
 	ErrCompacted     = grpc.Errorf(codes.OutOfRange, storage.ErrCompacted.Error())
 	ErrFutureRev     = grpc.Errorf(codes.OutOfRange, storage.ErrFutureRev.Error())
 	ErrLeaseNotFound = grpc.Errorf(codes.NotFound, "requested lease not found")
+
+	ErrMemberExist    = grpc.Errorf(codes.FailedPrecondition, "member ID already exist")
+	ErrPeerURLExist   = grpc.Errorf(codes.FailedPrecondition, "Peer URLs already exists")
+	ErrMemberBadURLs  = grpc.Errorf(codes.InvalidArgument, "given member URLs are invalid")
+	ErrMemberNotFound = grpc.Errorf(codes.NotFound, "member not found")
 )

+ 116 - 0
etcdserver/api/v3rpc/member.go

@@ -0,0 +1,116 @@
+// Copyright 2016 CoreOS, Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package v3rpc
+
+import (
+	"time"
+
+	"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
+	"github.com/coreos/etcd/Godeps/_workspace/src/google.golang.org/grpc"
+	"github.com/coreos/etcd/Godeps/_workspace/src/google.golang.org/grpc/codes"
+	"github.com/coreos/etcd/etcdserver"
+	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
+	"github.com/coreos/etcd/pkg/types"
+)
+
+type ClusterServer struct {
+	cluster   etcdserver.Cluster
+	server    etcdserver.Server
+	raftTimer etcdserver.RaftTimer
+}
+
+func NewClusterServer(s *etcdserver.EtcdServer) *ClusterServer {
+	return &ClusterServer{
+		cluster:   s.Cluster(),
+		server:    s,
+		raftTimer: s,
+	}
+}
+
+func (cs *ClusterServer) MemberAdd(ctx context.Context, r *pb.MemberAddRequest) (*pb.MemberAddResponse, error) {
+	urls, err := types.NewURLs(r.PeerURLs)
+	if err != nil {
+		return nil, ErrMemberBadURLs
+	}
+
+	now := time.Now()
+	m := etcdserver.NewMember("", urls, "", &now)
+	err = cs.server.AddMember(ctx, *m)
+	switch {
+	case err == etcdserver.ErrIDExists:
+		return nil, ErrMemberExist
+	case err == etcdserver.ErrPeerURLexists:
+		return nil, ErrPeerURLExist
+	case err != nil:
+		return nil, grpc.Errorf(codes.Unknown, err.Error())
+	}
+
+	return &pb.MemberAddResponse{
+		Header: cs.header(),
+		Member: &pb.Member{ID: uint64(m.ID), PeerURLs: m.PeerURLs},
+	}, nil
+}
+
+func (cs *ClusterServer) MemberRemove(ctx context.Context, r *pb.MemberRemoveRequest) (*pb.MemberRemoveResponse, error) {
+	err := cs.server.RemoveMember(ctx, r.ID)
+	switch {
+	case err == etcdserver.ErrIDRemoved:
+		fallthrough
+	case err == etcdserver.ErrIDNotFound:
+		return nil, ErrMemberNotFound
+	case err != nil:
+		return nil, grpc.Errorf(codes.Unknown, err.Error())
+	}
+
+	return &pb.MemberRemoveResponse{Header: cs.header()}, nil
+}
+
+func (cs *ClusterServer) MemberUpdate(ctx context.Context, r *pb.MemberUpdateRequest) (*pb.MemberUpdateResponse, error) {
+	m := etcdserver.Member{
+		ID:             types.ID(r.ID),
+		RaftAttributes: etcdserver.RaftAttributes{PeerURLs: r.PeerURLs},
+	}
+	err := cs.server.UpdateMember(ctx, m)
+	switch {
+	case err == etcdserver.ErrPeerURLexists:
+		return nil, ErrPeerURLExist
+	case err == etcdserver.ErrIDNotFound:
+		return nil, ErrMemberNotFound
+	case err != nil:
+		return nil, grpc.Errorf(codes.Unknown, err.Error())
+	}
+
+	return &pb.MemberUpdateResponse{Header: cs.header()}, nil
+}
+
+func (cs *ClusterServer) MemberList(ctx context.Context, r *pb.MemberListRequest) (*pb.MemberListResponse, error) {
+	membs := cs.cluster.Members()
+
+	protoMembs := make([]*pb.Member, len(membs))
+	for i := range membs {
+		protoMembs[i] = &pb.Member{
+			Name:       membs[i].Name,
+			ID:         uint64(membs[i].ID),
+			PeerURLs:   membs[i].PeerURLs,
+			ClientURLs: membs[i].ClientURLs,
+		}
+	}
+
+	return &pb.MemberListResponse{Header: cs.header(), Members: protoMembs}, nil
+}
+
+func (cs *ClusterServer) header() *pb.ResponseHeader {
+	return &pb.ResponseHeader{ClusterId: uint64(cs.cluster.ID()), MemberId: uint64(cs.server.ID()), RaftTerm: cs.raftTimer.Term()}
+}

+ 172 - 172
etcdserver/etcdserverpb/rpc.pb.go

@@ -978,119 +978,119 @@ func (m *LeaseKeepAliveResponse) GetHeader() *ResponseHeader {
 type Member struct {
 	ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
 	// If the member is not started, name will be an empty string.
-	Name      string   `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
-	Peer_URLs []string `protobuf:"bytes,3,rep,name=peer_URLs" json:"peer_URLs,omitempty"`
+	Name     string   `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	PeerURLs []string `protobuf:"bytes,3,rep,name=peerURLs" json:"peerURLs,omitempty"`
 	// If the member is not started, client_URLs will be an zero length
 	// string array.
-	Client_URLs []string `protobuf:"bytes,4,rep,name=client_URLs" json:"client_URLs,omitempty"`
+	ClientURLs []string `protobuf:"bytes,4,rep,name=clientURLs" json:"clientURLs,omitempty"`
 }
 
 func (m *Member) Reset()         { *m = Member{} }
 func (m *Member) String() string { return proto.CompactTextString(m) }
 func (*Member) ProtoMessage()    {}
 
-type AddMemberRequest struct {
-	Peer_URLs []string `protobuf:"bytes,1,rep,name=peer_URLs" json:"peer_URLs,omitempty"`
+type MemberAddRequest struct {
+	PeerURLs []string `protobuf:"bytes,1,rep,name=peerURLs" json:"peerURLs,omitempty"`
 }
 
-func (m *AddMemberRequest) Reset()         { *m = AddMemberRequest{} }
-func (m *AddMemberRequest) String() string { return proto.CompactTextString(m) }
-func (*AddMemberRequest) ProtoMessage()    {}
+func (m *MemberAddRequest) Reset()         { *m = MemberAddRequest{} }
+func (m *MemberAddRequest) String() string { return proto.CompactTextString(m) }
+func (*MemberAddRequest) ProtoMessage()    {}
 
-type AddMemberResponse struct {
+type MemberAddResponse struct {
 	Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"`
 	Member *Member         `protobuf:"bytes,2,opt,name=member" json:"member,omitempty"`
 }
 
-func (m *AddMemberResponse) Reset()         { *m = AddMemberResponse{} }
-func (m *AddMemberResponse) String() string { return proto.CompactTextString(m) }
-func (*AddMemberResponse) ProtoMessage()    {}
+func (m *MemberAddResponse) Reset()         { *m = MemberAddResponse{} }
+func (m *MemberAddResponse) String() string { return proto.CompactTextString(m) }
+func (*MemberAddResponse) ProtoMessage()    {}
 
-func (m *AddMemberResponse) GetHeader() *ResponseHeader {
+func (m *MemberAddResponse) GetHeader() *ResponseHeader {
 	if m != nil {
 		return m.Header
 	}
 	return nil
 }
 
-func (m *AddMemberResponse) GetMember() *Member {
+func (m *MemberAddResponse) GetMember() *Member {
 	if m != nil {
 		return m.Member
 	}
 	return nil
 }
 
-type RemoveMemberRequest struct {
+type MemberRemoveRequest struct {
 	ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
 }
 
-func (m *RemoveMemberRequest) Reset()         { *m = RemoveMemberRequest{} }
-func (m *RemoveMemberRequest) String() string { return proto.CompactTextString(m) }
-func (*RemoveMemberRequest) ProtoMessage()    {}
+func (m *MemberRemoveRequest) Reset()         { *m = MemberRemoveRequest{} }
+func (m *MemberRemoveRequest) String() string { return proto.CompactTextString(m) }
+func (*MemberRemoveRequest) ProtoMessage()    {}
 
-type RemoveMemberResponse struct {
+type MemberRemoveResponse struct {
 	Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"`
 }
 
-func (m *RemoveMemberResponse) Reset()         { *m = RemoveMemberResponse{} }
-func (m *RemoveMemberResponse) String() string { return proto.CompactTextString(m) }
-func (*RemoveMemberResponse) ProtoMessage()    {}
+func (m *MemberRemoveResponse) Reset()         { *m = MemberRemoveResponse{} }
+func (m *MemberRemoveResponse) String() string { return proto.CompactTextString(m) }
+func (*MemberRemoveResponse) ProtoMessage()    {}
 
-func (m *RemoveMemberResponse) GetHeader() *ResponseHeader {
+func (m *MemberRemoveResponse) GetHeader() *ResponseHeader {
 	if m != nil {
 		return m.Header
 	}
 	return nil
 }
 
-type UpdateMemberRequest struct {
-	ID        uint64   `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
-	Peer_URLs []string `protobuf:"bytes,2,rep,name=peer_URLs" json:"peer_URLs,omitempty"`
+type MemberUpdateRequest struct {
+	ID       uint64   `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
+	PeerURLs []string `protobuf:"bytes,2,rep,name=peerURLs" json:"peerURLs,omitempty"`
 }
 
-func (m *UpdateMemberRequest) Reset()         { *m = UpdateMemberRequest{} }
-func (m *UpdateMemberRequest) String() string { return proto.CompactTextString(m) }
-func (*UpdateMemberRequest) ProtoMessage()    {}
+func (m *MemberUpdateRequest) Reset()         { *m = MemberUpdateRequest{} }
+func (m *MemberUpdateRequest) String() string { return proto.CompactTextString(m) }
+func (*MemberUpdateRequest) ProtoMessage()    {}
 
-type UpdateMemberResponse struct {
+type MemberUpdateResponse struct {
 	Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"`
 }
 
-func (m *UpdateMemberResponse) Reset()         { *m = UpdateMemberResponse{} }
-func (m *UpdateMemberResponse) String() string { return proto.CompactTextString(m) }
-func (*UpdateMemberResponse) ProtoMessage()    {}
+func (m *MemberUpdateResponse) Reset()         { *m = MemberUpdateResponse{} }
+func (m *MemberUpdateResponse) String() string { return proto.CompactTextString(m) }
+func (*MemberUpdateResponse) ProtoMessage()    {}
 
-func (m *UpdateMemberResponse) GetHeader() *ResponseHeader {
+func (m *MemberUpdateResponse) GetHeader() *ResponseHeader {
 	if m != nil {
 		return m.Header
 	}
 	return nil
 }
 
-type ListMemberRequest struct {
+type MemberListRequest struct {
 }
 
-func (m *ListMemberRequest) Reset()         { *m = ListMemberRequest{} }
-func (m *ListMemberRequest) String() string { return proto.CompactTextString(m) }
-func (*ListMemberRequest) ProtoMessage()    {}
+func (m *MemberListRequest) Reset()         { *m = MemberListRequest{} }
+func (m *MemberListRequest) String() string { return proto.CompactTextString(m) }
+func (*MemberListRequest) ProtoMessage()    {}
 
-type ListMemberResponse struct {
+type MemberListResponse struct {
 	Header  *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"`
 	Members []*Member       `protobuf:"bytes,2,rep,name=members" json:"members,omitempty"`
 }
 
-func (m *ListMemberResponse) Reset()         { *m = ListMemberResponse{} }
-func (m *ListMemberResponse) String() string { return proto.CompactTextString(m) }
-func (*ListMemberResponse) ProtoMessage()    {}
+func (m *MemberListResponse) Reset()         { *m = MemberListResponse{} }
+func (m *MemberListResponse) String() string { return proto.CompactTextString(m) }
+func (*MemberListResponse) ProtoMessage()    {}
 
-func (m *ListMemberResponse) GetHeader() *ResponseHeader {
+func (m *MemberListResponse) GetHeader() *ResponseHeader {
 	if m != nil {
 		return m.Header
 	}
 	return nil
 }
 
-func (m *ListMemberResponse) GetMembers() []*Member {
+func (m *MemberListResponse) GetMembers() []*Member {
 	if m != nil {
 		return m.Members
 	}
@@ -1123,14 +1123,14 @@ func init() {
 	proto.RegisterType((*LeaseKeepAliveRequest)(nil), "etcdserverpb.LeaseKeepAliveRequest")
 	proto.RegisterType((*LeaseKeepAliveResponse)(nil), "etcdserverpb.LeaseKeepAliveResponse")
 	proto.RegisterType((*Member)(nil), "etcdserverpb.Member")
-	proto.RegisterType((*AddMemberRequest)(nil), "etcdserverpb.AddMemberRequest")
-	proto.RegisterType((*AddMemberResponse)(nil), "etcdserverpb.AddMemberResponse")
-	proto.RegisterType((*RemoveMemberRequest)(nil), "etcdserverpb.RemoveMemberRequest")
-	proto.RegisterType((*RemoveMemberResponse)(nil), "etcdserverpb.RemoveMemberResponse")
-	proto.RegisterType((*UpdateMemberRequest)(nil), "etcdserverpb.UpdateMemberRequest")
-	proto.RegisterType((*UpdateMemberResponse)(nil), "etcdserverpb.UpdateMemberResponse")
-	proto.RegisterType((*ListMemberRequest)(nil), "etcdserverpb.ListMemberRequest")
-	proto.RegisterType((*ListMemberResponse)(nil), "etcdserverpb.ListMemberResponse")
+	proto.RegisterType((*MemberAddRequest)(nil), "etcdserverpb.MemberAddRequest")
+	proto.RegisterType((*MemberAddResponse)(nil), "etcdserverpb.MemberAddResponse")
+	proto.RegisterType((*MemberRemoveRequest)(nil), "etcdserverpb.MemberRemoveRequest")
+	proto.RegisterType((*MemberRemoveResponse)(nil), "etcdserverpb.MemberRemoveResponse")
+	proto.RegisterType((*MemberUpdateRequest)(nil), "etcdserverpb.MemberUpdateRequest")
+	proto.RegisterType((*MemberUpdateResponse)(nil), "etcdserverpb.MemberUpdateResponse")
+	proto.RegisterType((*MemberListRequest)(nil), "etcdserverpb.MemberListRequest")
+	proto.RegisterType((*MemberListResponse)(nil), "etcdserverpb.MemberListResponse")
 	proto.RegisterEnum("etcdserverpb.RangeRequest_SortOrder", RangeRequest_SortOrder_name, RangeRequest_SortOrder_value)
 	proto.RegisterEnum("etcdserverpb.RangeRequest_SortTarget", RangeRequest_SortTarget_name, RangeRequest_SortTarget_value)
 	proto.RegisterEnum("etcdserverpb.Compare_CompareResult", Compare_CompareResult_name, Compare_CompareResult_value)
@@ -1600,14 +1600,14 @@ var _Lease_serviceDesc = grpc.ServiceDesc{
 // Client API for Cluster service
 
 type ClusterClient interface {
-	// AddMember adds a member into the cluster.
-	AddMember(ctx context.Context, in *AddMemberRequest, opts ...grpc.CallOption) (*AddMemberResponse, error)
-	// RemoveMember removes an existing member from the cluster.
-	RemoveMember(ctx context.Context, in *RemoveMemberRequest, opts ...grpc.CallOption) (*RemoveMemberResponse, error)
-	// UpdateMember updates the member configuration.
-	UpdateMember(ctx context.Context, in *UpdateMemberRequest, opts ...grpc.CallOption) (*UpdateMemberResponse, error)
-	// ListMember lists all the members in the cluster.
-	ListMember(ctx context.Context, in *ListMemberRequest, opts ...grpc.CallOption) (*ListMemberResponse, error)
+	// MemberAdd adds a member into the cluster.
+	MemberAdd(ctx context.Context, in *MemberAddRequest, opts ...grpc.CallOption) (*MemberAddResponse, error)
+	// MemberRemove removes an existing member from the cluster.
+	MemberRemove(ctx context.Context, in *MemberRemoveRequest, opts ...grpc.CallOption) (*MemberRemoveResponse, error)
+	// MemberUpdate updates the member configuration.
+	MemberUpdate(ctx context.Context, in *MemberUpdateRequest, opts ...grpc.CallOption) (*MemberUpdateResponse, error)
+	// MemberList lists all the members in the cluster.
+	MemberList(ctx context.Context, in *MemberListRequest, opts ...grpc.CallOption) (*MemberListResponse, error)
 }
 
 type clusterClient struct {
@@ -1618,36 +1618,36 @@ func NewClusterClient(cc *grpc.ClientConn) ClusterClient {
 	return &clusterClient{cc}
 }
 
-func (c *clusterClient) AddMember(ctx context.Context, in *AddMemberRequest, opts ...grpc.CallOption) (*AddMemberResponse, error) {
-	out := new(AddMemberResponse)
-	err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/AddMember", in, out, c.cc, opts...)
+func (c *clusterClient) MemberAdd(ctx context.Context, in *MemberAddRequest, opts ...grpc.CallOption) (*MemberAddResponse, error) {
+	out := new(MemberAddResponse)
+	err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/MemberAdd", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
 	return out, nil
 }
 
-func (c *clusterClient) RemoveMember(ctx context.Context, in *RemoveMemberRequest, opts ...grpc.CallOption) (*RemoveMemberResponse, error) {
-	out := new(RemoveMemberResponse)
-	err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/RemoveMember", in, out, c.cc, opts...)
+func (c *clusterClient) MemberRemove(ctx context.Context, in *MemberRemoveRequest, opts ...grpc.CallOption) (*MemberRemoveResponse, error) {
+	out := new(MemberRemoveResponse)
+	err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/MemberRemove", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
 	return out, nil
 }
 
-func (c *clusterClient) UpdateMember(ctx context.Context, in *UpdateMemberRequest, opts ...grpc.CallOption) (*UpdateMemberResponse, error) {
-	out := new(UpdateMemberResponse)
-	err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/UpdateMember", in, out, c.cc, opts...)
+func (c *clusterClient) MemberUpdate(ctx context.Context, in *MemberUpdateRequest, opts ...grpc.CallOption) (*MemberUpdateResponse, error) {
+	out := new(MemberUpdateResponse)
+	err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/MemberUpdate", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
 	return out, nil
 }
 
-func (c *clusterClient) ListMember(ctx context.Context, in *ListMemberRequest, opts ...grpc.CallOption) (*ListMemberResponse, error) {
-	out := new(ListMemberResponse)
-	err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/ListMember", in, out, c.cc, opts...)
+func (c *clusterClient) MemberList(ctx context.Context, in *MemberListRequest, opts ...grpc.CallOption) (*MemberListResponse, error) {
+	out := new(MemberListResponse)
+	err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/MemberList", in, out, c.cc, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1657,62 +1657,62 @@ func (c *clusterClient) ListMember(ctx context.Context, in *ListMemberRequest, o
 // Server API for Cluster service
 
 type ClusterServer interface {
-	// AddMember adds a member into the cluster.
-	AddMember(context.Context, *AddMemberRequest) (*AddMemberResponse, error)
-	// RemoveMember removes an existing member from the cluster.
-	RemoveMember(context.Context, *RemoveMemberRequest) (*RemoveMemberResponse, error)
-	// UpdateMember updates the member configuration.
-	UpdateMember(context.Context, *UpdateMemberRequest) (*UpdateMemberResponse, error)
-	// ListMember lists all the members in the cluster.
-	ListMember(context.Context, *ListMemberRequest) (*ListMemberResponse, error)
+	// MemberAdd adds a member into the cluster.
+	MemberAdd(context.Context, *MemberAddRequest) (*MemberAddResponse, error)
+	// MemberRemove removes an existing member from the cluster.
+	MemberRemove(context.Context, *MemberRemoveRequest) (*MemberRemoveResponse, error)
+	// MemberUpdate updates the member configuration.
+	MemberUpdate(context.Context, *MemberUpdateRequest) (*MemberUpdateResponse, error)
+	// MemberList lists all the members in the cluster.
+	MemberList(context.Context, *MemberListRequest) (*MemberListResponse, error)
 }
 
 func RegisterClusterServer(s *grpc.Server, srv ClusterServer) {
 	s.RegisterService(&_Cluster_serviceDesc, srv)
 }
 
-func _Cluster_AddMember_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
-	in := new(AddMemberRequest)
+func _Cluster_MemberAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
+	in := new(MemberAddRequest)
 	if err := dec(in); err != nil {
 		return nil, err
 	}
-	out, err := srv.(ClusterServer).AddMember(ctx, in)
+	out, err := srv.(ClusterServer).MemberAdd(ctx, in)
 	if err != nil {
 		return nil, err
 	}
 	return out, nil
 }
 
-func _Cluster_RemoveMember_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
-	in := new(RemoveMemberRequest)
+func _Cluster_MemberRemove_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
+	in := new(MemberRemoveRequest)
 	if err := dec(in); err != nil {
 		return nil, err
 	}
-	out, err := srv.(ClusterServer).RemoveMember(ctx, in)
+	out, err := srv.(ClusterServer).MemberRemove(ctx, in)
 	if err != nil {
 		return nil, err
 	}
 	return out, nil
 }
 
-func _Cluster_UpdateMember_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
-	in := new(UpdateMemberRequest)
+func _Cluster_MemberUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
+	in := new(MemberUpdateRequest)
 	if err := dec(in); err != nil {
 		return nil, err
 	}
-	out, err := srv.(ClusterServer).UpdateMember(ctx, in)
+	out, err := srv.(ClusterServer).MemberUpdate(ctx, in)
 	if err != nil {
 		return nil, err
 	}
 	return out, nil
 }
 
-func _Cluster_ListMember_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
-	in := new(ListMemberRequest)
+func _Cluster_MemberList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
+	in := new(MemberListRequest)
 	if err := dec(in); err != nil {
 		return nil, err
 	}
-	out, err := srv.(ClusterServer).ListMember(ctx, in)
+	out, err := srv.(ClusterServer).MemberList(ctx, in)
 	if err != nil {
 		return nil, err
 	}
@@ -1724,20 +1724,20 @@ var _Cluster_serviceDesc = grpc.ServiceDesc{
 	HandlerType: (*ClusterServer)(nil),
 	Methods: []grpc.MethodDesc{
 		{
-			MethodName: "AddMember",
-			Handler:    _Cluster_AddMember_Handler,
+			MethodName: "MemberAdd",
+			Handler:    _Cluster_MemberAdd_Handler,
 		},
 		{
-			MethodName: "RemoveMember",
-			Handler:    _Cluster_RemoveMember_Handler,
+			MethodName: "MemberRemove",
+			Handler:    _Cluster_MemberRemove_Handler,
 		},
 		{
-			MethodName: "UpdateMember",
-			Handler:    _Cluster_UpdateMember_Handler,
+			MethodName: "MemberUpdate",
+			Handler:    _Cluster_MemberUpdate_Handler,
 		},
 		{
-			MethodName: "ListMember",
-			Handler:    _Cluster_ListMember_Handler,
+			MethodName: "MemberList",
+			Handler:    _Cluster_MemberList_Handler,
 		},
 	},
 	Streams: []grpc.StreamDesc{},
@@ -2777,8 +2777,8 @@ func (m *Member) MarshalTo(data []byte) (int, error) {
 		i = encodeVarintRpc(data, i, uint64(len(m.Name)))
 		i += copy(data[i:], m.Name)
 	}
-	if len(m.Peer_URLs) > 0 {
-		for _, s := range m.Peer_URLs {
+	if len(m.PeerURLs) > 0 {
+		for _, s := range m.PeerURLs {
 			data[i] = 0x1a
 			i++
 			l = len(s)
@@ -2792,8 +2792,8 @@ func (m *Member) MarshalTo(data []byte) (int, error) {
 			i += copy(data[i:], s)
 		}
 	}
-	if len(m.Client_URLs) > 0 {
-		for _, s := range m.Client_URLs {
+	if len(m.ClientURLs) > 0 {
+		for _, s := range m.ClientURLs {
 			data[i] = 0x22
 			i++
 			l = len(s)
@@ -2810,7 +2810,7 @@ func (m *Member) MarshalTo(data []byte) (int, error) {
 	return i, nil
 }
 
-func (m *AddMemberRequest) Marshal() (data []byte, err error) {
+func (m *MemberAddRequest) Marshal() (data []byte, err error) {
 	size := m.Size()
 	data = make([]byte, size)
 	n, err := m.MarshalTo(data)
@@ -2820,13 +2820,13 @@ func (m *AddMemberRequest) Marshal() (data []byte, err error) {
 	return data[:n], nil
 }
 
-func (m *AddMemberRequest) MarshalTo(data []byte) (int, error) {
+func (m *MemberAddRequest) MarshalTo(data []byte) (int, error) {
 	var i int
 	_ = i
 	var l int
 	_ = l
-	if len(m.Peer_URLs) > 0 {
-		for _, s := range m.Peer_URLs {
+	if len(m.PeerURLs) > 0 {
+		for _, s := range m.PeerURLs {
 			data[i] = 0xa
 			i++
 			l = len(s)
@@ -2843,7 +2843,7 @@ func (m *AddMemberRequest) MarshalTo(data []byte) (int, error) {
 	return i, nil
 }
 
-func (m *AddMemberResponse) Marshal() (data []byte, err error) {
+func (m *MemberAddResponse) Marshal() (data []byte, err error) {
 	size := m.Size()
 	data = make([]byte, size)
 	n, err := m.MarshalTo(data)
@@ -2853,7 +2853,7 @@ func (m *AddMemberResponse) Marshal() (data []byte, err error) {
 	return data[:n], nil
 }
 
-func (m *AddMemberResponse) MarshalTo(data []byte) (int, error) {
+func (m *MemberAddResponse) MarshalTo(data []byte) (int, error) {
 	var i int
 	_ = i
 	var l int
@@ -2881,7 +2881,7 @@ func (m *AddMemberResponse) MarshalTo(data []byte) (int, error) {
 	return i, nil
 }
 
-func (m *RemoveMemberRequest) Marshal() (data []byte, err error) {
+func (m *MemberRemoveRequest) Marshal() (data []byte, err error) {
 	size := m.Size()
 	data = make([]byte, size)
 	n, err := m.MarshalTo(data)
@@ -2891,7 +2891,7 @@ func (m *RemoveMemberRequest) Marshal() (data []byte, err error) {
 	return data[:n], nil
 }
 
-func (m *RemoveMemberRequest) MarshalTo(data []byte) (int, error) {
+func (m *MemberRemoveRequest) MarshalTo(data []byte) (int, error) {
 	var i int
 	_ = i
 	var l int
@@ -2904,7 +2904,7 @@ func (m *RemoveMemberRequest) MarshalTo(data []byte) (int, error) {
 	return i, nil
 }
 
-func (m *RemoveMemberResponse) Marshal() (data []byte, err error) {
+func (m *MemberRemoveResponse) Marshal() (data []byte, err error) {
 	size := m.Size()
 	data = make([]byte, size)
 	n, err := m.MarshalTo(data)
@@ -2914,7 +2914,7 @@ func (m *RemoveMemberResponse) Marshal() (data []byte, err error) {
 	return data[:n], nil
 }
 
-func (m *RemoveMemberResponse) MarshalTo(data []byte) (int, error) {
+func (m *MemberRemoveResponse) MarshalTo(data []byte) (int, error) {
 	var i int
 	_ = i
 	var l int
@@ -2932,7 +2932,7 @@ func (m *RemoveMemberResponse) MarshalTo(data []byte) (int, error) {
 	return i, nil
 }
 
-func (m *UpdateMemberRequest) Marshal() (data []byte, err error) {
+func (m *MemberUpdateRequest) Marshal() (data []byte, err error) {
 	size := m.Size()
 	data = make([]byte, size)
 	n, err := m.MarshalTo(data)
@@ -2942,7 +2942,7 @@ func (m *UpdateMemberRequest) Marshal() (data []byte, err error) {
 	return data[:n], nil
 }
 
-func (m *UpdateMemberRequest) MarshalTo(data []byte) (int, error) {
+func (m *MemberUpdateRequest) MarshalTo(data []byte) (int, error) {
 	var i int
 	_ = i
 	var l int
@@ -2952,8 +2952,8 @@ func (m *UpdateMemberRequest) MarshalTo(data []byte) (int, error) {
 		i++
 		i = encodeVarintRpc(data, i, uint64(m.ID))
 	}
-	if len(m.Peer_URLs) > 0 {
-		for _, s := range m.Peer_URLs {
+	if len(m.PeerURLs) > 0 {
+		for _, s := range m.PeerURLs {
 			data[i] = 0x12
 			i++
 			l = len(s)
@@ -2970,7 +2970,7 @@ func (m *UpdateMemberRequest) MarshalTo(data []byte) (int, error) {
 	return i, nil
 }
 
-func (m *UpdateMemberResponse) Marshal() (data []byte, err error) {
+func (m *MemberUpdateResponse) Marshal() (data []byte, err error) {
 	size := m.Size()
 	data = make([]byte, size)
 	n, err := m.MarshalTo(data)
@@ -2980,7 +2980,7 @@ func (m *UpdateMemberResponse) Marshal() (data []byte, err error) {
 	return data[:n], nil
 }
 
-func (m *UpdateMemberResponse) MarshalTo(data []byte) (int, error) {
+func (m *MemberUpdateResponse) MarshalTo(data []byte) (int, error) {
 	var i int
 	_ = i
 	var l int
@@ -2998,7 +2998,7 @@ func (m *UpdateMemberResponse) MarshalTo(data []byte) (int, error) {
 	return i, nil
 }
 
-func (m *ListMemberRequest) Marshal() (data []byte, err error) {
+func (m *MemberListRequest) Marshal() (data []byte, err error) {
 	size := m.Size()
 	data = make([]byte, size)
 	n, err := m.MarshalTo(data)
@@ -3008,7 +3008,7 @@ func (m *ListMemberRequest) Marshal() (data []byte, err error) {
 	return data[:n], nil
 }
 
-func (m *ListMemberRequest) MarshalTo(data []byte) (int, error) {
+func (m *MemberListRequest) MarshalTo(data []byte) (int, error) {
 	var i int
 	_ = i
 	var l int
@@ -3016,7 +3016,7 @@ func (m *ListMemberRequest) MarshalTo(data []byte) (int, error) {
 	return i, nil
 }
 
-func (m *ListMemberResponse) Marshal() (data []byte, err error) {
+func (m *MemberListResponse) Marshal() (data []byte, err error) {
 	size := m.Size()
 	data = make([]byte, size)
 	n, err := m.MarshalTo(data)
@@ -3026,7 +3026,7 @@ func (m *ListMemberResponse) Marshal() (data []byte, err error) {
 	return data[:n], nil
 }
 
-func (m *ListMemberResponse) MarshalTo(data []byte) (int, error) {
+func (m *MemberListResponse) MarshalTo(data []byte) (int, error) {
 	var i int
 	_ = i
 	var l int
@@ -3562,14 +3562,14 @@ func (m *Member) Size() (n int) {
 	if l > 0 {
 		n += 1 + l + sovRpc(uint64(l))
 	}
-	if len(m.Peer_URLs) > 0 {
-		for _, s := range m.Peer_URLs {
+	if len(m.PeerURLs) > 0 {
+		for _, s := range m.PeerURLs {
 			l = len(s)
 			n += 1 + l + sovRpc(uint64(l))
 		}
 	}
-	if len(m.Client_URLs) > 0 {
-		for _, s := range m.Client_URLs {
+	if len(m.ClientURLs) > 0 {
+		for _, s := range m.ClientURLs {
 			l = len(s)
 			n += 1 + l + sovRpc(uint64(l))
 		}
@@ -3577,11 +3577,11 @@ func (m *Member) Size() (n int) {
 	return n
 }
 
-func (m *AddMemberRequest) Size() (n int) {
+func (m *MemberAddRequest) Size() (n int) {
 	var l int
 	_ = l
-	if len(m.Peer_URLs) > 0 {
-		for _, s := range m.Peer_URLs {
+	if len(m.PeerURLs) > 0 {
+		for _, s := range m.PeerURLs {
 			l = len(s)
 			n += 1 + l + sovRpc(uint64(l))
 		}
@@ -3589,7 +3589,7 @@ func (m *AddMemberRequest) Size() (n int) {
 	return n
 }
 
-func (m *AddMemberResponse) Size() (n int) {
+func (m *MemberAddResponse) Size() (n int) {
 	var l int
 	_ = l
 	if m.Header != nil {
@@ -3603,7 +3603,7 @@ func (m *AddMemberResponse) Size() (n int) {
 	return n
 }
 
-func (m *RemoveMemberRequest) Size() (n int) {
+func (m *MemberRemoveRequest) Size() (n int) {
 	var l int
 	_ = l
 	if m.ID != 0 {
@@ -3612,7 +3612,7 @@ func (m *RemoveMemberRequest) Size() (n int) {
 	return n
 }
 
-func (m *RemoveMemberResponse) Size() (n int) {
+func (m *MemberRemoveResponse) Size() (n int) {
 	var l int
 	_ = l
 	if m.Header != nil {
@@ -3622,14 +3622,14 @@ func (m *RemoveMemberResponse) Size() (n int) {
 	return n
 }
 
-func (m *UpdateMemberRequest) Size() (n int) {
+func (m *MemberUpdateRequest) Size() (n int) {
 	var l int
 	_ = l
 	if m.ID != 0 {
 		n += 1 + sovRpc(uint64(m.ID))
 	}
-	if len(m.Peer_URLs) > 0 {
-		for _, s := range m.Peer_URLs {
+	if len(m.PeerURLs) > 0 {
+		for _, s := range m.PeerURLs {
 			l = len(s)
 			n += 1 + l + sovRpc(uint64(l))
 		}
@@ -3637,7 +3637,7 @@ func (m *UpdateMemberRequest) Size() (n int) {
 	return n
 }
 
-func (m *UpdateMemberResponse) Size() (n int) {
+func (m *MemberUpdateResponse) Size() (n int) {
 	var l int
 	_ = l
 	if m.Header != nil {
@@ -3647,13 +3647,13 @@ func (m *UpdateMemberResponse) Size() (n int) {
 	return n
 }
 
-func (m *ListMemberRequest) Size() (n int) {
+func (m *MemberListRequest) Size() (n int) {
 	var l int
 	_ = l
 	return n
 }
 
-func (m *ListMemberResponse) Size() (n int) {
+func (m *MemberListResponse) Size() (n int) {
 	var l int
 	_ = l
 	if m.Header != nil {
@@ -6635,7 +6635,7 @@ func (m *Member) Unmarshal(data []byte) error {
 			iNdEx = postIndex
 		case 3:
 			if wireType != 2 {
-				return fmt.Errorf("proto: wrong wireType = %d for field Peer_URLs", wireType)
+				return fmt.Errorf("proto: wrong wireType = %d for field PeerURLs", wireType)
 			}
 			var stringLen uint64
 			for shift := uint(0); ; shift += 7 {
@@ -6660,11 +6660,11 @@ func (m *Member) Unmarshal(data []byte) error {
 			if postIndex > l {
 				return io.ErrUnexpectedEOF
 			}
-			m.Peer_URLs = append(m.Peer_URLs, string(data[iNdEx:postIndex]))
+			m.PeerURLs = append(m.PeerURLs, string(data[iNdEx:postIndex]))
 			iNdEx = postIndex
 		case 4:
 			if wireType != 2 {
-				return fmt.Errorf("proto: wrong wireType = %d for field Client_URLs", wireType)
+				return fmt.Errorf("proto: wrong wireType = %d for field ClientURLs", wireType)
 			}
 			var stringLen uint64
 			for shift := uint(0); ; shift += 7 {
@@ -6689,7 +6689,7 @@ func (m *Member) Unmarshal(data []byte) error {
 			if postIndex > l {
 				return io.ErrUnexpectedEOF
 			}
-			m.Client_URLs = append(m.Client_URLs, string(data[iNdEx:postIndex]))
+			m.ClientURLs = append(m.ClientURLs, string(data[iNdEx:postIndex]))
 			iNdEx = postIndex
 		default:
 			iNdEx = preIndex
@@ -6712,7 +6712,7 @@ func (m *Member) Unmarshal(data []byte) error {
 	}
 	return nil
 }
-func (m *AddMemberRequest) Unmarshal(data []byte) error {
+func (m *MemberAddRequest) Unmarshal(data []byte) error {
 	l := len(data)
 	iNdEx := 0
 	for iNdEx < l {
@@ -6735,15 +6735,15 @@ func (m *AddMemberRequest) Unmarshal(data []byte) error {
 		fieldNum := int32(wire >> 3)
 		wireType := int(wire & 0x7)
 		if wireType == 4 {
-			return fmt.Errorf("proto: AddMemberRequest: wiretype end group for non-group")
+			return fmt.Errorf("proto: MemberAddRequest: wiretype end group for non-group")
 		}
 		if fieldNum <= 0 {
-			return fmt.Errorf("proto: AddMemberRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+			return fmt.Errorf("proto: MemberAddRequest: illegal tag %d (wire type %d)", fieldNum, wire)
 		}
 		switch fieldNum {
 		case 1:
 			if wireType != 2 {
-				return fmt.Errorf("proto: wrong wireType = %d for field Peer_URLs", wireType)
+				return fmt.Errorf("proto: wrong wireType = %d for field PeerURLs", wireType)
 			}
 			var stringLen uint64
 			for shift := uint(0); ; shift += 7 {
@@ -6768,7 +6768,7 @@ func (m *AddMemberRequest) Unmarshal(data []byte) error {
 			if postIndex > l {
 				return io.ErrUnexpectedEOF
 			}
-			m.Peer_URLs = append(m.Peer_URLs, string(data[iNdEx:postIndex]))
+			m.PeerURLs = append(m.PeerURLs, string(data[iNdEx:postIndex]))
 			iNdEx = postIndex
 		default:
 			iNdEx = preIndex
@@ -6791,7 +6791,7 @@ func (m *AddMemberRequest) Unmarshal(data []byte) error {
 	}
 	return nil
 }
-func (m *AddMemberResponse) Unmarshal(data []byte) error {
+func (m *MemberAddResponse) Unmarshal(data []byte) error {
 	l := len(data)
 	iNdEx := 0
 	for iNdEx < l {
@@ -6814,10 +6814,10 @@ func (m *AddMemberResponse) Unmarshal(data []byte) error {
 		fieldNum := int32(wire >> 3)
 		wireType := int(wire & 0x7)
 		if wireType == 4 {
-			return fmt.Errorf("proto: AddMemberResponse: wiretype end group for non-group")
+			return fmt.Errorf("proto: MemberAddResponse: wiretype end group for non-group")
 		}
 		if fieldNum <= 0 {
-			return fmt.Errorf("proto: AddMemberResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+			return fmt.Errorf("proto: MemberAddResponse: illegal tag %d (wire type %d)", fieldNum, wire)
 		}
 		switch fieldNum {
 		case 1:
@@ -6907,7 +6907,7 @@ func (m *AddMemberResponse) Unmarshal(data []byte) error {
 	}
 	return nil
 }
-func (m *RemoveMemberRequest) Unmarshal(data []byte) error {
+func (m *MemberRemoveRequest) Unmarshal(data []byte) error {
 	l := len(data)
 	iNdEx := 0
 	for iNdEx < l {
@@ -6930,10 +6930,10 @@ func (m *RemoveMemberRequest) Unmarshal(data []byte) error {
 		fieldNum := int32(wire >> 3)
 		wireType := int(wire & 0x7)
 		if wireType == 4 {
-			return fmt.Errorf("proto: RemoveMemberRequest: wiretype end group for non-group")
+			return fmt.Errorf("proto: MemberRemoveRequest: wiretype end group for non-group")
 		}
 		if fieldNum <= 0 {
-			return fmt.Errorf("proto: RemoveMemberRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+			return fmt.Errorf("proto: MemberRemoveRequest: illegal tag %d (wire type %d)", fieldNum, wire)
 		}
 		switch fieldNum {
 		case 1:
@@ -6976,7 +6976,7 @@ func (m *RemoveMemberRequest) Unmarshal(data []byte) error {
 	}
 	return nil
 }
-func (m *RemoveMemberResponse) Unmarshal(data []byte) error {
+func (m *MemberRemoveResponse) Unmarshal(data []byte) error {
 	l := len(data)
 	iNdEx := 0
 	for iNdEx < l {
@@ -6999,10 +6999,10 @@ func (m *RemoveMemberResponse) Unmarshal(data []byte) error {
 		fieldNum := int32(wire >> 3)
 		wireType := int(wire & 0x7)
 		if wireType == 4 {
-			return fmt.Errorf("proto: RemoveMemberResponse: wiretype end group for non-group")
+			return fmt.Errorf("proto: MemberRemoveResponse: wiretype end group for non-group")
 		}
 		if fieldNum <= 0 {
-			return fmt.Errorf("proto: RemoveMemberResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+			return fmt.Errorf("proto: MemberRemoveResponse: illegal tag %d (wire type %d)", fieldNum, wire)
 		}
 		switch fieldNum {
 		case 1:
@@ -7059,7 +7059,7 @@ func (m *RemoveMemberResponse) Unmarshal(data []byte) error {
 	}
 	return nil
 }
-func (m *UpdateMemberRequest) Unmarshal(data []byte) error {
+func (m *MemberUpdateRequest) Unmarshal(data []byte) error {
 	l := len(data)
 	iNdEx := 0
 	for iNdEx < l {
@@ -7082,10 +7082,10 @@ func (m *UpdateMemberRequest) Unmarshal(data []byte) error {
 		fieldNum := int32(wire >> 3)
 		wireType := int(wire & 0x7)
 		if wireType == 4 {
-			return fmt.Errorf("proto: UpdateMemberRequest: wiretype end group for non-group")
+			return fmt.Errorf("proto: MemberUpdateRequest: wiretype end group for non-group")
 		}
 		if fieldNum <= 0 {
-			return fmt.Errorf("proto: UpdateMemberRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+			return fmt.Errorf("proto: MemberUpdateRequest: illegal tag %d (wire type %d)", fieldNum, wire)
 		}
 		switch fieldNum {
 		case 1:
@@ -7109,7 +7109,7 @@ func (m *UpdateMemberRequest) Unmarshal(data []byte) error {
 			}
 		case 2:
 			if wireType != 2 {
-				return fmt.Errorf("proto: wrong wireType = %d for field Peer_URLs", wireType)
+				return fmt.Errorf("proto: wrong wireType = %d for field PeerURLs", wireType)
 			}
 			var stringLen uint64
 			for shift := uint(0); ; shift += 7 {
@@ -7134,7 +7134,7 @@ func (m *UpdateMemberRequest) Unmarshal(data []byte) error {
 			if postIndex > l {
 				return io.ErrUnexpectedEOF
 			}
-			m.Peer_URLs = append(m.Peer_URLs, string(data[iNdEx:postIndex]))
+			m.PeerURLs = append(m.PeerURLs, string(data[iNdEx:postIndex]))
 			iNdEx = postIndex
 		default:
 			iNdEx = preIndex
@@ -7157,7 +7157,7 @@ func (m *UpdateMemberRequest) Unmarshal(data []byte) error {
 	}
 	return nil
 }
-func (m *UpdateMemberResponse) Unmarshal(data []byte) error {
+func (m *MemberUpdateResponse) Unmarshal(data []byte) error {
 	l := len(data)
 	iNdEx := 0
 	for iNdEx < l {
@@ -7180,10 +7180,10 @@ func (m *UpdateMemberResponse) Unmarshal(data []byte) error {
 		fieldNum := int32(wire >> 3)
 		wireType := int(wire & 0x7)
 		if wireType == 4 {
-			return fmt.Errorf("proto: UpdateMemberResponse: wiretype end group for non-group")
+			return fmt.Errorf("proto: MemberUpdateResponse: wiretype end group for non-group")
 		}
 		if fieldNum <= 0 {
-			return fmt.Errorf("proto: UpdateMemberResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+			return fmt.Errorf("proto: MemberUpdateResponse: illegal tag %d (wire type %d)", fieldNum, wire)
 		}
 		switch fieldNum {
 		case 1:
@@ -7240,7 +7240,7 @@ func (m *UpdateMemberResponse) Unmarshal(data []byte) error {
 	}
 	return nil
 }
-func (m *ListMemberRequest) Unmarshal(data []byte) error {
+func (m *MemberListRequest) Unmarshal(data []byte) error {
 	l := len(data)
 	iNdEx := 0
 	for iNdEx < l {
@@ -7263,10 +7263,10 @@ func (m *ListMemberRequest) Unmarshal(data []byte) error {
 		fieldNum := int32(wire >> 3)
 		wireType := int(wire & 0x7)
 		if wireType == 4 {
-			return fmt.Errorf("proto: ListMemberRequest: wiretype end group for non-group")
+			return fmt.Errorf("proto: MemberListRequest: wiretype end group for non-group")
 		}
 		if fieldNum <= 0 {
-			return fmt.Errorf("proto: ListMemberRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+			return fmt.Errorf("proto: MemberListRequest: illegal tag %d (wire type %d)", fieldNum, wire)
 		}
 		switch fieldNum {
 		default:
@@ -7290,7 +7290,7 @@ func (m *ListMemberRequest) Unmarshal(data []byte) error {
 	}
 	return nil
 }
-func (m *ListMemberResponse) Unmarshal(data []byte) error {
+func (m *MemberListResponse) Unmarshal(data []byte) error {
 	l := len(data)
 	iNdEx := 0
 	for iNdEx < l {
@@ -7313,10 +7313,10 @@ func (m *ListMemberResponse) Unmarshal(data []byte) error {
 		fieldNum := int32(wire >> 3)
 		wireType := int(wire & 0x7)
 		if wireType == 4 {
-			return fmt.Errorf("proto: ListMemberResponse: wiretype end group for non-group")
+			return fmt.Errorf("proto: MemberListResponse: wiretype end group for non-group")
 		}
 		if fieldNum <= 0 {
-			return fmt.Errorf("proto: ListMemberResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+			return fmt.Errorf("proto: MemberListResponse: illegal tag %d (wire type %d)", fieldNum, wire)
 		}
 		switch fieldNum {
 		case 1:

+ 20 - 20
etcdserver/etcdserverpb/rpc.proto

@@ -58,17 +58,17 @@ service Lease {
 }
 
 service Cluster {
-  // AddMember adds a member into the cluster.
-  rpc AddMember(AddMemberRequest) returns (AddMemberResponse) {}
+  // MemberAdd adds a member into the cluster.
+  rpc MemberAdd(MemberAddRequest) returns (MemberAddResponse) {}
 
-  // RemoveMember removes an existing member from the cluster.
-  rpc RemoveMember(RemoveMemberRequest) returns (RemoveMemberResponse) {}
+  // MemberRemove removes an existing member from the cluster.
+  rpc MemberRemove(MemberRemoveRequest) returns (MemberRemoveResponse) {}
 
-  // UpdateMember updates the member configuration.
-  rpc UpdateMember(UpdateMemberRequest) returns (UpdateMemberResponse) {}
+  // MemberUpdate updates the member configuration.
+  rpc MemberUpdate(MemberUpdateRequest) returns (MemberUpdateResponse) {}
 
-  // ListMember lists all the members in the cluster.
-  rpc ListMember(ListMemberRequest) returns (ListMemberResponse) {}
+  // MemberList lists all the members in the cluster.
+  rpc MemberList(MemberListRequest) returns (MemberListResponse) {}
 }
 
 message ResponseHeader {
@@ -311,42 +311,42 @@ message Member {
   uint64 ID = 1;
   // If the member is not started, name will be an empty string.
   string name = 2;
-  repeated string peer_URLs = 3;
+  repeated string peerURLs = 3;
   // If the member is not started, client_URLs will be an zero length
   // string array.
-  repeated string client_URLs = 4;
+  repeated string clientURLs = 4;
 }
 
-message AddMemberRequest {
-  repeated string peer_URLs = 1;
+message MemberAddRequest {
+  repeated string peerURLs = 1;
 }
 
-message AddMemberResponse {
+message MemberAddResponse {
   ResponseHeader header = 1;
   Member member = 2;
 }
 
-message RemoveMemberRequest {
+message MemberRemoveRequest {
   uint64 ID = 1;
 }
 
-message RemoveMemberResponse {
+message MemberRemoveResponse {
   ResponseHeader header = 1;
 }
 
-message UpdateMemberRequest {
+message MemberUpdateRequest {
   uint64 ID = 1;
-  repeated string peer_URLs = 2;
+  repeated string peerURLs = 2;
 }
 
-message UpdateMemberResponse{
+message MemberUpdateResponse{
   ResponseHeader header = 1;
 }
 
-message ListMemberRequest {
+message MemberListRequest {
 }
 
-message ListMemberResponse {
+message MemberListResponse {
   ResponseHeader header = 1;
   repeated Member members = 2;
 }