@@ -13,7 +13,6 @@ import (
1313 "k8s.io/apimachinery/pkg/types"
1414
1515 "github.com/zalando/postgres-operator/pkg/util"
16- "github.com/zalando/postgres-operator/pkg/util/constants"
1716 "github.com/zalando/postgres-operator/pkg/util/k8sutil"
1817 "github.com/zalando/postgres-operator/pkg/util/retryutil"
1918)
@@ -278,19 +277,25 @@ func (c *Cluster) replaceStatefulSet(newStatefulSet *appsv1.StatefulSet) error {
278277 oldStatefulset := c .Statefulset
279278
280279 options := metav1.DeleteOptions {PropagationPolicy : & deletePropagationPolicy }
281- if err := c .KubeClient .StatefulSets (oldStatefulset .Namespace ).Delete (oldStatefulset .Name , & options ); err != nil {
280+ err := c .KubeClient .StatefulSets (oldStatefulset .Namespace ).Delete (oldStatefulset .Name , & options )
281+ if err != nil {
282282 return fmt .Errorf ("could not delete statefulset %q: %v" , statefulSetName , err )
283283 }
284284 // make sure we clear the stored statefulset status if the subsequent create fails.
285285 c .Statefulset = nil
286286 // wait until the statefulset is truly deleted
287287 c .logger .Debugf ("waiting for the statefulset to be deleted" )
288288
289- err : = retryutil .Retry (constants . StatefulsetDeletionInterval , constants . StatefulsetDeletionTimeout ,
289+ err = retryutil .Retry (c . OpConfig . ResourceCheckInterval , c . OpConfig . ResourceCheckTimeout ,
290290 func () (bool , error ) {
291- _ , err := c .KubeClient .StatefulSets (oldStatefulset .Namespace ).Get (oldStatefulset .Name , metav1.GetOptions {})
292-
293- return err != nil , nil
291+ _ , err2 := c .KubeClient .StatefulSets (oldStatefulset .Namespace ).Get (oldStatefulset .Name , metav1.GetOptions {})
292+ if err2 == nil {
293+ return false , nil
294+ }
295+ if k8sutil .ResourceNotFound (err2 ) {
296+ return true , nil
297+ }
298+ return false , err2
294299 })
295300 if err != nil {
296301 return fmt .Errorf ("could not delete statefulset: %v" , err )
@@ -380,13 +385,27 @@ func (c *Cluster) updateService(role PostgresRole, newService *v1.Service) error
380385 return fmt .Errorf ("could not delete service %q: %v" , serviceName , err )
381386 }
382387
383- c .Endpoints [role ] = nil
384- svc , err := c .KubeClient .Services (serviceName .Namespace ).Create (newService )
388+ // wait until the service is truly deleted
389+ c .logger .Debugf ("waiting for service to be deleted" )
390+
391+ err = retryutil .Retry (c .OpConfig .ResourceCheckInterval , c .OpConfig .ResourceCheckTimeout ,
392+ func () (bool , error ) {
393+ _ , err2 := c .KubeClient .Services (serviceName .Namespace ).Get (serviceName .Name , metav1.GetOptions {})
394+ if err2 == nil {
395+ return false , nil
396+ }
397+ if k8sutil .ResourceNotFound (err2 ) {
398+ return true , nil
399+ }
400+ return false , err2
401+ })
385402 if err != nil {
386- return fmt .Errorf ("could not create service %q: %v" , serviceName , err )
403+ return fmt .Errorf ("could not delete service %q: %v" , serviceName , err )
387404 }
388405
389- c .Services [role ] = svc
406+ // make sure we clear the stored service and endpoint status if the subsequent create fails.
407+ c .Services [role ] = nil
408+ c .Endpoints [role ] = nil
390409 if role == Master {
391410 // create the new endpoint using the addresses obtained from the previous one
392411 endpointSpec := c .generateEndpoint (role , currentEndpoint .Subsets )
@@ -398,6 +417,13 @@ func (c *Cluster) updateService(role PostgresRole, newService *v1.Service) error
398417 c .Endpoints [role ] = ep
399418 }
400419
420+ svc , err := c .KubeClient .Services (serviceName .Namespace ).Create (newService )
421+ if err != nil {
422+ return fmt .Errorf ("could not create service %q: %v" , serviceName , err )
423+ }
424+
425+ c .Services [role ] = svc
426+
401427 return nil
402428 }
403429
0 commit comments