code: func (c *DiskTokenCache) updateCacheFile(cb func(*cacheFile, time.Time) bool) error {
  	retryParams := func() retry.Iterator {
  		return &retry.ExponentialBackoff{
  			Limited: retry.Limited{
  				Delay:    10 * time.Millisecond,
  				Retries:  200,
  				MaxTotal: 4 * time.Second,
  			},
  			Multiplier: 1.5,
  		}
  	}
  	return retry.Retry(c.Context, transient.Only(retryParams), func() error {
  		cache, err := c.readCacheFile()
  		if err != nil {
  			return err
  		}
  		now := clock.Now(c.Context).UTC()
  		if cb(cache, now) {
  			return c.writeCacheFile(cache, now)
  		}
  		return nil
  	}, func(err error, d time.Duration) {
  		logging.WithError(err).Warningf(c.Context, "Failed to update %s, retrying...", c.absPath())
  	})
  }
docs: // updateCacheFile reads the token cache file, calls the callback, writes the file
  // back if the callback returns 'true'.
  //
  // It retries a bunch of times when encountering sharing violation errors on
  // Windows.
  //
  // TODO(vadimsh): Change this to use file locking - updateCacheFile is a global
  // critical section.