MCPcopy
hub / github.com/etcd-io/etcd / TestV3LeaseRecoverKeyWithMutipleLease

Function TestV3LeaseRecoverKeyWithMutipleLease

tests/integration/v3_lease_test.go:894–950  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

892}
893
894func TestV3LeaseRecoverKeyWithMutipleLease(t *testing.T) {
895 integration.BeforeTest(t)
896
897 clus := integration.NewCluster(t, &integration.ClusterConfig{Size: 1, UseBridge: true})
898 defer clus.Terminate(t)
899
900 kvc := integration.ToGRPC(clus.Client(0)).KV
901 lsc := integration.ToGRPC(clus.Client(0)).Lease
902
903 var leaseIDs []int64
904 for i := 0; i < 2; i++ {
905 lresp, err := lsc.LeaseGrant(context.TODO(), &pb.LeaseGrantRequest{TTL: fiveMinTTL})
906 require.NoError(t, err)
907 require.Empty(t, lresp.Error)
908 leaseIDs = append(leaseIDs, lresp.ID)
909
910 _, err = kvc.Put(context.TODO(), &pb.PutRequest{Key: []byte("foo"), Value: []byte("bar"), Lease: lresp.ID})
911 require.NoError(t, err)
912 }
913
914 // restart server and ensure lease still exists
915 clus.Members[0].Stop(t)
916 clus.Members[0].Restart(t)
917 clus.WaitMembersForLeader(t, clus.Members)
918 for i, leaseID := range leaseIDs {
919 if !leaseExist(t, clus, leaseID) {
920 t.Errorf("#%d: unexpected lease not exists", i)
921 }
922 }
923
924 // overwrite old client with newly dialed connection
925 // otherwise, error with "grpc: RPC failed fast due to transport failure"
926 nc, err := integration.NewClientV3(clus.Members[0])
927 require.NoError(t, err)
928 kvc = integration.ToGRPC(nc).KV
929 lsc = integration.ToGRPC(nc).Lease
930 defer nc.Close()
931
932 // revoke the old lease
933 _, err = lsc.LeaseRevoke(context.TODO(), &pb.LeaseRevokeRequest{ID: leaseIDs[0]})
934 require.NoError(t, err)
935 // key should still exist
936 rresp, err := kvc.Range(context.TODO(), &pb.RangeRequest{Key: []byte("foo")})
937 require.NoError(t, err)
938 if len(rresp.Kvs) != 1 {
939 t.Fatalf("only detached lease removed, key should remain")
940 }
941
942 // revoke the latest lease
943 _, err = lsc.LeaseRevoke(context.TODO(), &pb.LeaseRevokeRequest{ID: leaseIDs[1]})
944 require.NoError(t, err)
945 rresp, err = kvc.Range(context.TODO(), &pb.RangeRequest{Key: []byte("foo")})
946 require.NoError(t, err)
947 if len(rresp.Kvs) != 0 {
948 t.Fatalf("lease removed but key remains")
949 }
950}
951

Callers

nothing calls this directly

Calls 15

TerminateMethod · 0.95
ClientMethod · 0.95
WaitMembersForLeaderMethod · 0.95
leaseExistFunction · 0.85
NewClientV3Method · 0.80
BeforeTestMethod · 0.65
NewClusterMethod · 0.65
LeaseGrantMethod · 0.65
PutMethod · 0.65
StopMethod · 0.65
RestartMethod · 0.65
ErrorfMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…