From 3de4695057cb755f4f8d124fce0bad6a7232822c Mon Sep 17 00:00:00 2001 From: d00369826 Date: Mon, 12 Sep 2016 17:10:28 +0800 Subject: [PATCH] fix petset update(pet) retries bug Change-Id: I92e2b653ab78fca72ae41cf87945d90fbbc67f44 --- pkg/controller/petset/pet.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/pkg/controller/petset/pet.go b/pkg/controller/petset/pet.go index 982e3368f8b..d2dd5f77c41 100644 --- a/pkg/controller/petset/pet.go +++ b/pkg/controller/petset/pet.go @@ -197,23 +197,26 @@ func (p *apiServerPetClient) Create(pet *pcb) error { } // Update updates the pet in the 'pet' pcb to match the pet in the 'expectedPet' pcb. +// If the pod object of a pet which to be updated has been changed in server side, we +// will get the actual value and set pet identity before retries. func (p *apiServerPetClient) Update(pet *pcb, expectedPet *pcb) (updateErr error) { - var getErr error pc := podClient(p.c, pet.parent.Namespace) - pod, needsUpdate, err := copyPetID(pet, expectedPet) - if err != nil || !needsUpdate { - return err - } - glog.Infof("Resetting pet %v to match PetSet %v spec", pod.Name, pet.parent.Name) - for i, p := 0, &pod; ; i++ { - _, updateErr = pc.Update(p) + for i := 0; ; i++ { + updatePod, needsUpdate, err := copyPetID(pet, expectedPet) + if err != nil || !needsUpdate { + return err + } + glog.Infof("Resetting pet %v/%v to match PetSet %v spec", pet.pod.Namespace, pet.pod.Name, pet.parent.Name) + _, updateErr = pc.Update(&updatePod) if updateErr == nil || i >= updateRetries { return updateErr } - if p, getErr = pc.Get(pod.Name); getErr != nil { + getPod, getErr := pc.Get(updatePod.Name) + if getErr != nil { return getErr } + pet.pod = getPod } }