*: remove MemberLeader API in client side (fix examples)
parent
b78886239e
commit
2c6176b5f2
|
@ -34,9 +34,6 @@ type Cluster interface {
|
||||||
// MemberList lists the current cluster membership.
|
// MemberList lists the current cluster membership.
|
||||||
MemberList(ctx context.Context) (*MemberListResponse, error)
|
MemberList(ctx context.Context) (*MemberListResponse, error)
|
||||||
|
|
||||||
// MemberLeader returns the current leader member.
|
|
||||||
MemberLeader(ctx context.Context) (*Member, error)
|
|
||||||
|
|
||||||
// MemberAdd adds a new member into the cluster.
|
// MemberAdd adds a new member into the cluster.
|
||||||
MemberAdd(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error)
|
MemberAdd(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error)
|
||||||
|
|
||||||
|
@ -135,19 +132,6 @@ func (c *cluster) MemberList(ctx context.Context) (*MemberListResponse, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *cluster) MemberLeader(ctx context.Context) (*Member, error) {
|
|
||||||
resp, err := c.MemberList(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
for _, m := range resp.Members {
|
|
||||||
if m.IsLeader {
|
|
||||||
return (*Member)(m), nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *cluster) getRemote() pb.ClusterClient {
|
func (c *cluster) getRemote() pb.ClusterClient {
|
||||||
c.mu.Lock()
|
c.mu.Lock()
|
||||||
defer c.mu.Unlock()
|
defer c.mu.Unlock()
|
||||||
|
|
|
@ -40,24 +40,6 @@ func ExampleCluster_memberList() {
|
||||||
// members: 3
|
// members: 3
|
||||||
}
|
}
|
||||||
|
|
||||||
func ExampleCluster_memberLeader() {
|
|
||||||
cli, err := clientv3.New(clientv3.Config{
|
|
||||||
Endpoints: endpoints,
|
|
||||||
DialTimeout: dialTimeout,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
defer cli.Close()
|
|
||||||
|
|
||||||
resp, err := cli.MemberLeader(context.Background())
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
fmt.Println("leader:", resp.Name)
|
|
||||||
// leader: infra1
|
|
||||||
}
|
|
||||||
|
|
||||||
func ExampleCluster_memberAdd() {
|
func ExampleCluster_memberAdd() {
|
||||||
cli, err := clientv3.New(clientv3.Config{
|
cli, err := clientv3.New(clientv3.Config{
|
||||||
Endpoints: endpoints[:2],
|
Endpoints: endpoints[:2],
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
// 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 clientv3_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"golang.org/x/net/context"
|
||||||
|
|
||||||
|
"github.com/coreos/etcd/clientv3"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ExampleMaintenance_Status() {
|
||||||
|
for _, ep := range endpoints {
|
||||||
|
cli, err := clientv3.New(clientv3.Config{
|
||||||
|
Endpoints: []string{ep},
|
||||||
|
DialTimeout: dialTimeout,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
defer cli.Close()
|
||||||
|
|
||||||
|
// resp, err := cli.Status(context.Background(), ep)
|
||||||
|
//
|
||||||
|
// or
|
||||||
|
//
|
||||||
|
mapi := clientv3.NewMaintenance(cli)
|
||||||
|
resp, err := mapi.Status(context.Background(), ep)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
fmt.Printf("endpoint: %s / IsLeader: %v\n", ep, resp.Header.MemberId == resp.Leader)
|
||||||
|
}
|
||||||
|
// endpoint: localhost:2379 / IsLeader: false
|
||||||
|
// endpoint: localhost:22379 / IsLeader: false
|
||||||
|
// endpoint: localhost:32379 / IsLeader: true
|
||||||
|
}
|
|
@ -25,7 +25,7 @@ import (
|
||||||
var (
|
var (
|
||||||
dialTimeout = 5 * time.Second
|
dialTimeout = 5 * time.Second
|
||||||
requestTimeout = 1 * time.Second
|
requestTimeout = 1 * time.Second
|
||||||
endpoints = []string{"localhost:2379", "localhost:22379", "http://localhost:32379"}
|
endpoints = []string{"localhost:2379", "localhost:22379", "localhost:32379"}
|
||||||
)
|
)
|
||||||
|
|
||||||
func Example() {
|
func Example() {
|
||||||
|
|
|
@ -108,7 +108,7 @@ func (s *simplePrinter) Alarm(resp v3.AlarmResponse) {
|
||||||
|
|
||||||
func (s *simplePrinter) MemberList(resp v3.MemberListResponse) {
|
func (s *simplePrinter) MemberList(resp v3.MemberListResponse) {
|
||||||
table := tablewriter.NewWriter(os.Stdout)
|
table := tablewriter.NewWriter(os.Stdout)
|
||||||
table.SetHeader([]string{"ID", "Status", "Name", "Peer Addrs", "Client Addrs", "Is Leader"})
|
table.SetHeader([]string{"ID", "Status", "Name", "Peer Addrs", "Client Addrs"})
|
||||||
|
|
||||||
for _, m := range resp.Members {
|
for _, m := range resp.Members {
|
||||||
status := "started"
|
status := "started"
|
||||||
|
@ -122,7 +122,6 @@ func (s *simplePrinter) MemberList(resp v3.MemberListResponse) {
|
||||||
m.Name,
|
m.Name,
|
||||||
strings.Join(m.PeerURLs, ","),
|
strings.Join(m.PeerURLs, ","),
|
||||||
strings.Join(m.ClientURLs, ","),
|
strings.Join(m.ClientURLs, ","),
|
||||||
fmt.Sprint(m.IsLeader),
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -185,24 +185,27 @@ func (c *cluster) GetLeader() (int, error) {
|
||||||
if c.v2Only {
|
if c.v2Only {
|
||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
cli, err := clientv3.New(clientv3.Config{
|
|
||||||
Endpoints: c.GRPCURLs,
|
for i, ep := range c.GRPCURLs {
|
||||||
DialTimeout: 5 * time.Second,
|
cli, err := clientv3.New(clientv3.Config{
|
||||||
})
|
Endpoints: []string{ep},
|
||||||
if err != nil {
|
DialTimeout: 5 * time.Second,
|
||||||
return 0, err
|
})
|
||||||
}
|
if err != nil {
|
||||||
defer cli.Close()
|
return 0, err
|
||||||
clus := clientv3.NewCluster(cli)
|
}
|
||||||
mem, err := clus.MemberLeader(context.Background())
|
defer cli.Close()
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
mapi := clientv3.NewMaintenance(cli)
|
||||||
}
|
resp, err := mapi.Status(context.Background(), ep)
|
||||||
for i, name := range c.Names {
|
if err != nil {
|
||||||
if name == mem.Name {
|
return 0, err
|
||||||
|
}
|
||||||
|
if resp.Header.MemberId == resp.Leader {
|
||||||
return i, nil
|
return i, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0, fmt.Errorf("no leader found")
|
return 0, fmt.Errorf("no leader found")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue