code: func (g *Cloud) targetPoolNeedsRecreation(name, region string, affinityType v1.ServiceAffinity) (exists bool, needsRecreation bool, err error) {
  	tp, err := g.GetTargetPool(name, region)
  	if err != nil {
  		if isHTTPErrorCode(err, http.StatusNotFound) {
  			return false, true, nil
  		}
  		// Err on the side of caution in case of errors. Caller should notice the error and retry.
  		// We never want to end up recreating resources because g api flaked.
  		return true, false, fmt.Errorf("error getting load balancer's target pool: %v", err)
  	}
  	// TODO: If the user modifies their Service's session affinity, it *should*
  	// reflect in the associated target pool. However, currently not setting the
  	// session affinity on a target pool defaults it to the empty string while
  	// not setting in on a Service defaults it to None. There is a lack of
  	// documentation around the default setting for the target pool, so if we
  	// find it's the undocumented empty string, don't blindly recreate the
  	// target pool (which results in downtime). Fix this when we have formally
  	// defined the defaults on either side.
  	if tp.SessionAffinity != "" && translateAffinityType(affinityType) != tp.SessionAffinity {
  		klog.Infof("LoadBalancer target pool %v changed affinity from %v to %v", name, tp.SessionAffinity, affinityType)
  		return true, true, nil
  	}
  	return true, false, nil
  }
docs: // Doesn't check whether the hosts have changed, since host updating is handled
  // separately.