@@ -31,7 +31,6 @@ import (
3131 "github.com/cockroachdb/cockroach/pkg/kv/kvserver"
3232 "github.com/cockroachdb/cockroach/pkg/kv/kvserver/allocator/storepool"
3333 "github.com/cockroachdb/cockroach/pkg/kv/kvserver/kvserverbase"
34- "github.com/cockroachdb/cockroach/pkg/kv/kvserver/liveness"
3534 "github.com/cockroachdb/cockroach/pkg/roachpb"
3635 "github.com/cockroachdb/cockroach/pkg/server"
3736 "github.com/cockroachdb/cockroach/pkg/settings/cluster"
@@ -57,10 +56,15 @@ func TestStoreRangeLease(t *testing.T) {
5756 defer leaktest .AfterTest (t )()
5857 defer log .Scope (t ).Close (t )
5958
59+ ctx := context .Background ()
60+ st := cluster .MakeTestingClusterSettings ()
61+ kvserver .ExpirationLeasesOnly .Override (ctx , & st .SV , false ) // override metamorphism
62+
6063 tc := testcluster .StartTestCluster (t , 1 ,
6164 base.TestClusterArgs {
6265 ReplicationMode : base .ReplicationManual ,
6366 ServerArgs : base.TestServerArgs {
67+ Settings : st ,
6468 Knobs : base.TestingKnobs {
6569 Store : & kvserver.StoreTestingKnobs {
6670 DisableMergeQueue : true ,
@@ -69,7 +73,7 @@ func TestStoreRangeLease(t *testing.T) {
6973 },
7074 },
7175 )
72- defer tc .Stopper ().Stop (context . Background () )
76+ defer tc .Stopper ().Stop (ctx )
7377
7478 store := tc .GetFirstStoreFromServer (t , 0 )
7579 // NodeLivenessKeyMax is a static split point, so this is always
@@ -839,7 +843,6 @@ func TestLeaseholderRelocate(t *testing.T) {
839843
840844 // Make sure the lease is on 3 and is fully upgraded.
841845 tc .TransferRangeLeaseOrFatal (t , rhsDesc , tc .Target (2 ))
842- tc .WaitForLeaseUpgrade (ctx , t , rhsDesc )
843846
844847 // Check that the lease moved to 3.
845848 leaseHolder , err := tc .FindRangeLeaseHolder (rhsDesc , nil )
@@ -872,17 +875,24 @@ func TestLeaseholderRelocate(t *testing.T) {
872875 require .NoError (t , err )
873876 require .Equal (t , tc .Target (3 ), leaseHolder )
874877
875- // Double check that lease moved directly.
878+ // Double check that lease moved directly. The tail of the lease history
879+ // should all be on leaseHolder.NodeID. We may metamorphically enable
880+ // kv.expiration_leases_only.enabled, in which case there will be a single
881+ // expiration lease, but otherwise we'll have transferred an expiration lease
882+ // and then upgraded to an epoch lease.
876883 repl := tc .GetFirstStoreFromServer (t , 3 ).
877884 LookupReplica (roachpb .RKey (rhsDesc .StartKey .AsRawKey ()))
878885 history := repl .GetLeaseHistory ()
879886
880- require .Equal (t , leaseHolder .NodeID ,
881- history [len (history )- 1 ].Replica .NodeID )
882- require .Equal (t , leaseHolder .NodeID ,
883- history [len (history )- 2 ].Replica .NodeID ) // account for the lease upgrade
884- require .Equal (t , tc .Target (2 ).NodeID ,
885- history [len (history )- 3 ].Replica .NodeID )
887+ require .Equal (t , leaseHolder .NodeID , history [len (history )- 1 ].Replica .NodeID )
888+ var prevLeaseHolder roachpb.NodeID
889+ for i := len (history ) - 1 ; i >= 0 ; i -- {
890+ if id := history [i ].Replica .NodeID ; id != leaseHolder .NodeID {
891+ prevLeaseHolder = id
892+ break
893+ }
894+ }
895+ require .Equal (t , tc .Target (2 ).NodeID , prevLeaseHolder )
886896}
887897
888898func gossipLiveness (t * testing.T , tc * testcluster.TestCluster ) {
@@ -1100,15 +1110,20 @@ func TestLeasesDontThrashWhenNodeBecomesSuspect(t *testing.T) {
11001110 locality ("us-west" ),
11011111 locality ("us-west" ),
11021112 }
1113+
1114+ ctx := context .Background ()
1115+ st := cluster .MakeTestingClusterSettings ()
1116+ kvserver .ExpirationLeasesOnly .Override (ctx , & st .SV , false ) // override metamorphism
1117+
11031118 // Speed up lease transfers.
11041119 stickyRegistry := server .NewStickyInMemEnginesRegistry ()
11051120 defer stickyRegistry .CloseAllStickyInMemEngines ()
1106- ctx := context .Background ()
11071121 manualClock := hlc .NewHybridManualClock ()
11081122 serverArgs := make (map [int ]base.TestServerArgs )
11091123 numNodes := 4
11101124 for i := 0 ; i < numNodes ; i ++ {
11111125 serverArgs [i ] = base.TestServerArgs {
1126+ Settings : st ,
11121127 Locality : localities [i ],
11131128 Knobs : base.TestingKnobs {
11141129 Server : & server.TestingKnobs {
@@ -1346,21 +1361,18 @@ func TestAcquireLeaseTimeout(t *testing.T) {
13461361 return nil
13471362 }
13481363
1349- // The lease request timeout depends on the Raft election timeout, so we set
1350- // it low to get faster timeouts (800 ms) and speed up the test.
1351- var raftCfg base.RaftConfig
1352- raftCfg .SetDefaults ()
1353- raftCfg .RaftHeartbeatIntervalTicks = 1
1354- raftCfg .RaftElectionTimeoutTicks = 2
1355-
13561364 manualClock := hlc .NewHybridManualClock ()
13571365
13581366 // Start a two-node cluster.
13591367 const numNodes = 2
13601368 tc := testcluster .StartTestCluster (t , numNodes , base.TestClusterArgs {
13611369 ReplicationMode : base .ReplicationManual ,
13621370 ServerArgs : base.TestServerArgs {
1363- RaftConfig : raftCfg ,
1371+ RaftConfig : base.RaftConfig {
1372+ // Lease request timeout depends on Raft election timeout, speed it up.
1373+ RaftHeartbeatIntervalTicks : 1 ,
1374+ RaftElectionTimeoutTicks : 2 ,
1375+ },
13641376 Knobs : base.TestingKnobs {
13651377 Server : & server.TestingKnobs {
13661378 WallClock : manualClock ,
@@ -1383,27 +1395,10 @@ func TestAcquireLeaseTimeout(t *testing.T) {
13831395 repl , err := tc .GetFirstStoreFromServer (t , 0 ).GetReplica (desc .RangeID )
13841396 require .NoError (t , err )
13851397
1386- tc .IncrClockForLeaseUpgrade (t , manualClock )
1387- tc .WaitForLeaseUpgrade (ctx , t , desc )
1388-
1389- // Stop n2 and increment its epoch to invalidate the lease.
1398+ // Stop n2 and invalidate its leases by forwarding the clock.
13901399 tc .StopServer (1 )
1391- n2ID := tc .Server (1 ).NodeID ()
1392- lv , ok := tc .Server (0 ).NodeLiveness ().(* liveness.NodeLiveness )
1393- require .True (t , ok )
1394- lvNode2 , ok := lv .GetLiveness (n2ID )
1395- require .True (t , ok )
1396- manualClock .Forward (lvNode2 .Expiration .WallTime )
1397-
1398- testutils .SucceedsSoon (t , func () error {
1399- lvNode2 , ok = lv .GetLiveness (n2ID )
1400- require .True (t , ok )
1401- err := lv .IncrementEpoch (context .Background (), lvNode2 .Liveness )
1402- if errors .Is (err , liveness .ErrEpochAlreadyIncremented ) {
1403- return nil
1404- }
1405- return err
1406- })
1400+ leaseDuration := tc .GetFirstStoreFromServer (t , 0 ).GetStoreConfig ().RangeLeaseDuration
1401+ manualClock .Increment (leaseDuration .Nanoseconds ())
14071402 require .False (t , repl .CurrentLeaseStatus (ctx ).IsValid ())
14081403
14091404 // Trying to acquire the lease should error with an empty NLHE, since the
@@ -1456,11 +1451,14 @@ func TestLeaseTransfersUseExpirationLeasesAndBumpToEpochBasedOnes(t *testing.T)
14561451 }{}
14571452
14581453 ctx := context .Background ()
1454+ st := cluster .MakeTestingClusterSettings ()
1455+ kvserver .ExpirationLeasesOnly .Override (ctx , & st .SV , false ) // override metamorphism
14591456
14601457 manualClock := hlc .NewHybridManualClock ()
14611458 tci := serverutils .StartNewTestCluster (t , 2 , base.TestClusterArgs {
14621459 ReplicationMode : base .ReplicationManual ,
14631460 ServerArgs : base.TestServerArgs {
1461+ Settings : st ,
14641462 Knobs : base.TestingKnobs {
14651463 Server : & server.TestingKnobs {
14661464 // Never ticked -- demonstrating that we're not relying on
@@ -1527,6 +1525,8 @@ func TestLeaseUpgradeVersionGate(t *testing.T) {
15271525 clusterversion .ByKey (clusterversion .TODODelete_V22_2EnableLeaseUpgrade - 1 ),
15281526 false , /* initializeVersion */
15291527 )
1528+ kvserver .ExpirationLeasesOnly .Override (ctx , & st .SV , false ) // override metamorphism
1529+
15301530 tci := serverutils .StartNewTestCluster (t , 2 , base.TestClusterArgs {
15311531 ReplicationMode : base .ReplicationManual ,
15321532 ServerArgs : base.TestServerArgs {
0 commit comments