mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
*: drop breaking-changes from master branch
This commit is contained in:
parent
3a8b524d36
commit
41e329cd35
@ -15,8 +15,6 @@
|
|||||||
package integration
|
package integration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
|
||||||
"sort"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -458,59 +456,6 @@ func TestLeaseKeepAliveTTLTimeout(t *testing.T) {
|
|||||||
clus.Members[0].Restart(t)
|
clus.Members[0].Restart(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLeaseTimeToLive(t *testing.T) {
|
|
||||||
defer testutil.AfterTest(t)
|
|
||||||
|
|
||||||
clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3})
|
|
||||||
defer clus.Terminate(t)
|
|
||||||
|
|
||||||
lapi := clientv3.NewLease(clus.RandClient())
|
|
||||||
defer lapi.Close()
|
|
||||||
|
|
||||||
resp, err := lapi.Grant(context.Background(), 10)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("failed to create lease %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
kv := clientv3.NewKV(clus.RandClient())
|
|
||||||
keys := []string{"foo1", "foo2"}
|
|
||||||
for i := range keys {
|
|
||||||
if _, err = kv.Put(context.TODO(), keys[i], "bar", clientv3.WithLease(resp.ID)); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
lresp, lerr := lapi.TimeToLive(context.Background(), resp.ID, clientv3.WithAttachedKeys())
|
|
||||||
if lerr != nil {
|
|
||||||
t.Fatal(lerr)
|
|
||||||
}
|
|
||||||
if lresp.ID != resp.ID {
|
|
||||||
t.Fatalf("leaseID expected %d, got %d", resp.ID, lresp.ID)
|
|
||||||
}
|
|
||||||
if lresp.GrantedTTL != int64(10) {
|
|
||||||
t.Fatalf("GrantedTTL expected %d, got %d", 10, lresp.GrantedTTL)
|
|
||||||
}
|
|
||||||
if lresp.TTL == 0 || lresp.TTL > lresp.GrantedTTL {
|
|
||||||
t.Fatalf("unexpected TTL %d (granted %d)", lresp.TTL, lresp.GrantedTTL)
|
|
||||||
}
|
|
||||||
ks := make([]string, len(lresp.Keys))
|
|
||||||
for i := range lresp.Keys {
|
|
||||||
ks[i] = string(lresp.Keys[i])
|
|
||||||
}
|
|
||||||
sort.Strings(ks)
|
|
||||||
if !reflect.DeepEqual(ks, keys) {
|
|
||||||
t.Fatalf("keys expected %v, got %v", keys, ks)
|
|
||||||
}
|
|
||||||
|
|
||||||
lresp, lerr = lapi.TimeToLive(context.Background(), resp.ID)
|
|
||||||
if lerr != nil {
|
|
||||||
t.Fatal(lerr)
|
|
||||||
}
|
|
||||||
if len(lresp.Keys) != 0 {
|
|
||||||
t.Fatalf("unexpected keys %+v", lresp.Keys)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestLeaseRenewLostQuorum ensures keepalives work after losing quorum
|
// TestLeaseRenewLostQuorum ensures keepalives work after losing quorum
|
||||||
// for a while.
|
// for a while.
|
||||||
func TestLeaseRenewLostQuorum(t *testing.T) {
|
func TestLeaseRenewLostQuorum(t *testing.T) {
|
||||||
|
@ -239,7 +239,7 @@ func (s *EtcdServer) LeaseRenew(ctx context.Context, id lease.LeaseID) (int64, e
|
|||||||
return -1, lerr
|
return -1, lerr
|
||||||
}
|
}
|
||||||
for _, url := range leader.PeerURLs {
|
for _, url := range leader.PeerURLs {
|
||||||
lurl := url + leasehttp.LeasePrefix
|
lurl := url + "/leases"
|
||||||
ttl, err = leasehttp.RenewHTTP(cctx, id, lurl, s.peerRt)
|
ttl, err = leasehttp.RenewHTTP(cctx, id, lurl, s.peerRt)
|
||||||
if err == nil || err == lease.ErrLeaseNotFound {
|
if err == nil || err == lease.ErrLeaseNotFound {
|
||||||
return ttl, err
|
return ttl, err
|
||||||
@ -249,49 +249,6 @@ func (s *EtcdServer) LeaseRenew(ctx context.Context, id lease.LeaseID) (int64, e
|
|||||||
return -1, ErrTimeout
|
return -1, ErrTimeout
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *EtcdServer) LeaseTimeToLive(ctx context.Context, r *pb.LeaseTimeToLiveRequest) (*pb.LeaseTimeToLiveResponse, error) {
|
|
||||||
if s.Leader() == s.ID() {
|
|
||||||
// primary; timetolive directly from leader
|
|
||||||
le := s.lessor.Lookup(lease.LeaseID(r.ID))
|
|
||||||
if le == nil {
|
|
||||||
return nil, lease.ErrLeaseNotFound
|
|
||||||
}
|
|
||||||
// TODO: fill out ResponseHeader
|
|
||||||
resp := &pb.LeaseTimeToLiveResponse{Header: &pb.ResponseHeader{}, ID: r.ID, TTL: int64(le.Remaining().Seconds()), GrantedTTL: le.TTL()}
|
|
||||||
if r.Keys {
|
|
||||||
ks := le.Keys()
|
|
||||||
kbs := make([][]byte, len(ks))
|
|
||||||
for i := range ks {
|
|
||||||
kbs[i] = []byte(ks[i])
|
|
||||||
}
|
|
||||||
resp.Keys = kbs
|
|
||||||
}
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, s.Cfg.ReqTimeout())
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
// forward to leader
|
|
||||||
for cctx.Err() == nil {
|
|
||||||
leader, err := s.waitLeader(cctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
for _, url := range leader.PeerURLs {
|
|
||||||
lurl := url + leasehttp.LeaseInternalPrefix
|
|
||||||
resp, err := leasehttp.TimeToLiveHTTP(cctx, lease.LeaseID(r.ID), r.Keys, lurl, s.peerRt)
|
|
||||||
if err == nil {
|
|
||||||
return resp.LeaseTimeToLiveResponse, nil
|
|
||||||
}
|
|
||||||
if err == lease.ErrLeaseNotFound {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil, ErrTimeout
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *EtcdServer) waitLeader(ctx context.Context) (*membership.Member, error) {
|
func (s *EtcdServer) waitLeader(ctx context.Context) (*membership.Member, error) {
|
||||||
leader := s.cluster.Member(s.Leader())
|
leader := s.cluster.Member(s.Leader())
|
||||||
for leader == nil {
|
for leader == nil {
|
||||||
@ -300,24 +257,16 @@ func (s *EtcdServer) waitLeader(ctx context.Context) (*membership.Member, error)
|
|||||||
select {
|
select {
|
||||||
case <-time.After(dur):
|
case <-time.After(dur):
|
||||||
leader = s.cluster.Member(s.Leader())
|
leader = s.cluster.Member(s.Leader())
|
||||||
case <-s.stopping:
|
case <-s.done:
|
||||||
return nil, ErrStopped
|
return nil, ErrStopped
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
return nil, ErrNoLeader
|
return nil, ErrNoLeader
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if leader == nil || len(leader.PeerURLs) == 0 {
|
if leader == nil || len(leader.PeerURLs) == 0 {
|
||||||
return -1, ErrNoLeader
|
return nil, ErrNoLeader
|
||||||
}
|
}
|
||||||
|
return leader, nil
|
||||||
for _, url := range leader.PeerURLs {
|
|
||||||
lurl := url + "/leases"
|
|
||||||
ttl, err = leasehttp.RenewHTTP(id, lurl, s.peerRt, s.Cfg.peerDialTimeout())
|
|
||||||
if err == nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ttl, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *EtcdServer) Alarm(ctx context.Context, r *pb.AlarmRequest) (*pb.AlarmResponse, error) {
|
func (s *EtcdServer) Alarm(ctx context.Context, r *pb.AlarmRequest) (*pb.AlarmResponse, error) {
|
||||||
|
@ -31,7 +31,7 @@ func TestRenewHTTP(t *testing.T) {
|
|||||||
defer os.Remove(tmpPath)
|
defer os.Remove(tmpPath)
|
||||||
defer be.Close()
|
defer be.Close()
|
||||||
|
|
||||||
le := lease.NewLessor(be, int64(5))
|
le := lease.NewLessor(be)
|
||||||
le.Promote(time.Second)
|
le.Promote(time.Second)
|
||||||
l, err := le.Grant(1, int64(5))
|
l, err := le.Grant(1, int64(5))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -41,7 +41,7 @@ func TestRenewHTTP(t *testing.T) {
|
|||||||
ts := httptest.NewServer(NewHandler(le))
|
ts := httptest.NewServer(NewHandler(le))
|
||||||
defer ts.Close()
|
defer ts.Close()
|
||||||
|
|
||||||
ttl, err := RenewHTTP(context.TODO(), l.ID, ts.URL+LeasePrefix, http.DefaultTransport)
|
ttl, err := RenewHTTP(context.TODO(), l.ID, ts.URL+"/leases", http.DefaultTransport)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -49,30 +49,3 @@ func TestRenewHTTP(t *testing.T) {
|
|||||||
t.Fatalf("ttl expected 5, got %d", ttl)
|
t.Fatalf("ttl expected 5, got %d", ttl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTimeToLiveHTTP(t *testing.T) {
|
|
||||||
be, tmpPath := backend.NewTmpBackend(time.Hour, 10000)
|
|
||||||
defer os.Remove(tmpPath)
|
|
||||||
defer be.Close()
|
|
||||||
|
|
||||||
le := lease.NewLessor(be, int64(5))
|
|
||||||
le.Promote(time.Second)
|
|
||||||
l, err := le.Grant(1, int64(5))
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("failed to create lease: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
ts := httptest.NewServer(NewHandler(le))
|
|
||||||
defer ts.Close()
|
|
||||||
|
|
||||||
resp, err := TimeToLiveHTTP(context.TODO(), l.ID, true, ts.URL+LeaseInternalPrefix, http.DefaultTransport)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
if resp.LeaseTimeToLiveResponse.ID != 1 {
|
|
||||||
t.Fatalf("lease id expected 1, got %d", resp.LeaseTimeToLiveResponse.ID)
|
|
||||||
}
|
|
||||||
if resp.LeaseTimeToLiveResponse.GrantedTTL != 5 {
|
|
||||||
t.Fatalf("granted TTL expected 5, got %d", resp.LeaseTimeToLiveResponse.GrantedTTL)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user