code: func (c *RegionCache) LocateRegionByID(bo *Backoffer, regionID uint64) (*KeyLocation, error) {
  	c.mu.RLock()
  	r := c.getRegionByIDFromCache(regionID)
  	if r != nil {
  		loc := &KeyLocation{
  			Region:   r.VerID(),
  			StartKey: r.StartKey(),
  			EndKey:   r.EndKey(),
  		}
  		c.mu.RUnlock()
  		return loc, nil
  	}
  	c.mu.RUnlock()
  
  	r, err := c.loadRegionByID(bo, regionID)
  	if err != nil {
  		return nil, errors.Trace(err)
  	}
  
  	c.mu.Lock()
  	defer c.mu.Unlock()
  	c.insertRegionToCache(r)
  	return &KeyLocation{
  		Region:   r.VerID(),
  		StartKey: r.StartKey(),
  		EndKey:   r.EndKey(),
  	}, nil
  }
docs: // LocateRegionByID searches for the region with ID.