code: func BucketOf(c context.Context, master string) (string, error) {
  	v, err := bucketCache.GetOrCreate(c, master, func() (v interface{}, exp time.Duration, err error) {
  		transport, err := auth.GetRPCTransport(c, auth.AsSelf)
  		if err != nil {
  			return nil, 0, err
  		}
  		u := fmt.Sprintf("https://luci-migration.appspot.com/masters/%s/?format=json", url.PathEscape(master))
  		var bucket string
  		err = retry.Retry(c, retry.Default, func() error {
  			res, err := ctxhttp.Get(c, &http.Client{Transport: transport}, u)
  			if err != nil {
  				return err
  			}
  			defer res.Body.Close()
  			switch {
  			case res.StatusCode == http.StatusNotFound:
  				return nil
  			case res.StatusCode != http.StatusOK:
  				return errors.Reason("migration app returned HTTP %d", res.StatusCode).Err()
  			}
  
  			var body struct {
  				Bucket string
  			}
  			if err := json.NewDecoder(res.Body).Decode(&body); err != nil {
  				return errors.Annotate(err, "could not decode migration app's response body").Err()
  			}
  
  			bucket = body.Bucket
  			return nil
  		}, retry.LogCallback(c, "luci-migration-get-master"))
  
  		if err != nil {
  			return nil, 0, err
  		}
  		// cache the result for 10min in process memory and memcache.
  		return bucket, 10 * time.Minute, nil
  	})
  
  	bucket, _ := v.(string)
  	return bucket, err
  }
docs: // BucketOf returns LUCI bucket that the given buildbot master is migrating to.
  // Returns "" if it is unknown.