func acquire( s *server.TestServer, descID sqlbase.ID, version sqlbase.DescriptorVersion, ) (*csql.LeaseState, error) { var lease *csql.LeaseState err := s.DB().Txn(context.TODO(), func(txn *client.Txn) error { var err error lease, err = s.LeaseManager().(*csql.LeaseManager).Acquire(txn, descID, version) return err }) return lease, err }
// FindRangeLease is similar to FindRangeLeaseHolder but returns a Lease proto // without verifying if the lease is still active. Instead, it returns a time- // stamp taken off the queried node's clock. func (tc *TestCluster) FindRangeLease( rangeDesc *roachpb.RangeDescriptor, hint *ReplicationTarget, ) (_ *roachpb.Lease, now hlc.Timestamp, _ error) { if hint != nil { var ok bool if _, ok = rangeDesc.GetReplicaDescriptor(hint.StoreID); !ok { return nil, hlc.ZeroTimestamp, errors.Errorf( "bad hint: %+v; store doesn't have a replica of the range", hint) } } else { hint = &ReplicationTarget{ NodeID: rangeDesc.Replicas[0].NodeID, StoreID: rangeDesc.Replicas[0].StoreID} } // Find the server indicated by the hint and send a LeaseInfoRequest through // it. var hintServer *server.TestServer for _, s := range tc.Servers { if s.GetNode().Descriptor.NodeID == hint.NodeID { hintServer = s break } } if hintServer == nil { return nil, hlc.ZeroTimestamp, errors.Errorf("bad hint: %+v; no such node", hint) } leaseReq := roachpb.LeaseInfoRequest{ Span: roachpb.Span{ Key: rangeDesc.StartKey.AsRawKey(), }, } leaseResp, pErr := client.SendWrappedWith( context.TODO(), hintServer.DB().GetSender(), roachpb.Header{ // INCONSISTENT read, since we want to make sure that the node used to // send this is the one that processes the command, for the hint to // matter. ReadConsistency: roachpb.INCONSISTENT, }, &leaseReq) if pErr != nil { return nil, hlc.ZeroTimestamp, pErr.GoError() } return leaseResp.(*roachpb.LeaseInfoResponse).Lease, hintServer.Clock().Now(), nil }
// forceNewConfig forces a system config update by writing a bogus descriptor with an // incremented value inside. It then repeatedly fetches the gossip config until the // just-written descriptor is found. func forceNewConfig(t *testing.T, s *server.TestServer) config.SystemConfig { configID++ configDesc := &sqlbase.Descriptor{ Union: &sqlbase.Descriptor_Database{ Database: &sqlbase.DatabaseDescriptor{ Name: "sentinel", ID: configID, Privileges: &sqlbase.PrivilegeDescriptor{}, }, }, } // This needs to be done in a transaction with the system trigger set. if err := s.DB().Txn(context.TODO(), func(txn *client.Txn) error { txn.SetSystemConfigTrigger() return txn.Put(configDescKey, configDesc) }); err != nil { t.Fatal(err) } return waitForConfigChange(t, s) }