示例#1
0
// PetSetHasDesiredPets returns a conditon that checks the number of petset replicas
func PetSetHasDesiredPets(psClient appsclient.PetSetsGetter, petset *apps.PetSet) wait.ConditionFunc {
	// TODO: Differentiate between 0 pets and a really quick scale down using generation.
	return func() (bool, error) {
		ps, err := psClient.PetSets(petset.Namespace).Get(petset.Name)
		if err != nil {
			return false, err
		}
		return ps.Status.Replicas == ps.Spec.Replicas, nil
	}
}
示例#2
0
// updatePetCount attempts to update the Status.Replicas of the given PetSet, with a single GET/PUT retry.
func updatePetCount(psClient appsclientset.PetSetsGetter, ps apps.PetSet, numPets int) (updateErr error) {
	if ps.Status.Replicas == numPets || psClient == nil {
		return nil
	}
	var getErr error
	for i, ps := 0, &ps; ; i++ {
		glog.V(4).Infof(fmt.Sprintf("Updating replica count for PetSet: %s/%s, ", ps.Namespace, ps.Name) +
			fmt.Sprintf("replicas %d->%d (need %d), ", ps.Status.Replicas, numPets, ps.Spec.Replicas))

		ps.Status = apps.PetSetStatus{Replicas: numPets}
		_, updateErr = psClient.PetSets(ps.Namespace).UpdateStatus(ps)
		if updateErr == nil || i >= statusUpdateRetries {
			return updateErr
		}
		if ps, getErr = psClient.PetSets(ps.Namespace).Get(ps.Name); getErr != nil {
			return getErr
		}
	}
}