diff --git a/clientv3/integration/lease_test.go b/clientv3/integration/lease_test.go index 6429eef54..9d960e50c 100644 --- a/clientv3/integration/lease_test.go +++ b/clientv3/integration/lease_test.go @@ -15,8 +15,6 @@ package integration import ( - "reflect" - "sort" "testing" "time" @@ -458,59 +456,6 @@ func TestLeaseKeepAliveTTLTimeout(t *testing.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 // for a while. func TestLeaseRenewLostQuorum(t *testing.T) { diff --git a/etcdserver/v3_server.go b/etcdserver/v3_server.go index 119cb17c7..743dd2af5 100644 --- a/etcdserver/v3_server.go +++ b/etcdserver/v3_server.go @@ -239,7 +239,7 @@ func (s *EtcdServer) LeaseRenew(ctx context.Context, id lease.LeaseID) (int64, e return -1, lerr } for _, url := range leader.PeerURLs { - lurl := url + leasehttp.LeasePrefix + lurl := url + "/leases" ttl, err = leasehttp.RenewHTTP(cctx, id, lurl, s.peerRt) if err == nil || err == lease.ErrLeaseNotFound { return ttl, err @@ -249,49 +249,6 @@ func (s *EtcdServer) LeaseRenew(ctx context.Context, id lease.LeaseID) (int64, e 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) { leader := s.cluster.Member(s.Leader()) for leader == nil { @@ -300,24 +257,16 @@ func (s *EtcdServer) waitLeader(ctx context.Context) (*membership.Member, error) select { case <-time.After(dur): leader = s.cluster.Member(s.Leader()) - case <-s.stopping: + case <-s.done: return nil, ErrStopped case <-ctx.Done(): return nil, ErrNoLeader } } if leader == nil || len(leader.PeerURLs) == 0 { - return -1, ErrNoLeader + return nil, ErrNoLeader } - - 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 + return leader, nil } func (s *EtcdServer) Alarm(ctx context.Context, r *pb.AlarmRequest) (*pb.AlarmResponse, error) { diff --git a/lease/leasehttp/http_test.go b/lease/leasehttp/http_test.go index 6219a4a2c..cd88029bd 100644 --- a/lease/leasehttp/http_test.go +++ b/lease/leasehttp/http_test.go @@ -31,7 +31,7 @@ func TestRenewHTTP(t *testing.T) { defer os.Remove(tmpPath) defer be.Close() - le := lease.NewLessor(be, int64(5)) + le := lease.NewLessor(be) le.Promote(time.Second) l, err := le.Grant(1, int64(5)) if err != nil { @@ -41,7 +41,7 @@ func TestRenewHTTP(t *testing.T) { ts := httptest.NewServer(NewHandler(le)) 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 { t.Fatal(err) } @@ -49,30 +49,3 @@ func TestRenewHTTP(t *testing.T) { 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) - } -}