code: func (c *RegionCache) DropStoreOnSendRequestFail(ctx *RPCContext, err error) {
  	// We need to drop the store only when the request is the first one failed on this store.
  	// Because too many concurrently requests trying to drop the store will be blocked on the lock.
  	failedRegionID := ctx.Region
  	failedStoreID := ctx.Peer.StoreId
  	c.mu.Lock()
  	_, ok := c.mu.regions[failedRegionID]
  	if !ok {
  		// The failed region is dropped already by another request, we don't need to iterate the regions
  		// and find regions on the failed store to drop.
  		c.mu.Unlock()
  		return
  	}
  	for id, r := range c.mu.regions {
  		if r.region.peer.GetStoreId() == failedStoreID {
  			c.dropRegionFromCache(id)
  		}
  	}
  	c.mu.Unlock()
  
  	// Store's meta may be out of date.
  	var failedStoreAddr string
  	c.storeMu.Lock()
  	store, ok := c.storeMu.stores[failedStoreID]
  	if ok {
  		failedStoreAddr = store.Addr
  		delete(c.storeMu.stores, failedStoreID)
  	}
  	c.storeMu.Unlock()
  	logutil.Logger(context.Background()).Info("drop regions that on the store due to send request fail",
  		zap.Uint64("store", failedStoreID),
  		zap.String("store addr", failedStoreAddr),
  		zap.Error(err))
  }
docs: // DropStoreOnSendRequestFail is used for clearing cache when a tikv server does not respond.