code: func chooseZonesForVolumeIncludingZone(zones sets.String, pvcName, zoneToInclude string, numReplicas uint32) (sets.String, error) {
  	if numReplicas == 0 {
  		return nil, fmt.Errorf("invalid number of replicas passed")
  	}
  	if uint32(zones.Len()) < numReplicas {
  		return nil, fmt.Errorf("not enough zones found to provision a volume with %d replicas. Need at least %d distinct zones for a volume with %d replicas", numReplicas, numReplicas, numReplicas)
  	}
  	if zoneToInclude != "" && !zones.Has(zoneToInclude) {
  		return nil, fmt.Errorf("zone to be included: %s needs to be member of set: %v", zoneToInclude, zones)
  	}
  	if uint32(zones.Len()) == numReplicas {
  		return zones, nil
  	}
  	if zoneToInclude != "" {
  		zones.Delete(zoneToInclude)
  		numReplicas = numReplicas - 1
  	}
  	zonesChosen := ChooseZonesForVolume(zones, pvcName, numReplicas)
  	if zoneToInclude != "" {
  		zonesChosen.Insert(zoneToInclude)
  	}
  	return zonesChosen, nil
  }
docs: // chooseZonesForVolumeIncludingZone is a wrapper around ChooseZonesForVolume that ensures zoneToInclude is chosen
  // zoneToInclude can either be empty in which case it is ignored. If non-empty, zoneToInclude is expected to be member of zones.
  // numReplicas is expected to be > 0 and <= zones.Len()