From 25d9024aefaf7a77f0ee85fc19e0b22f79504776 Mon Sep 17 00:00:00 2001 From: naveen <172697+naveensrinivasan@users.noreply.github.com> Date: Sat, 2 Jan 2021 15:39:32 -0500 Subject: [PATCH] Fix-racecondition bug for service and pvc creation Fixes the racecondition bug #3 which could cause the service and the PVC not be created if the deployment alone was created. Also included config directory in the gitignore which was generated when make test was called. --- .gitignore | 3 +++ controllers/trackingserver_controller.go | 32 ++++++++++++++++++------ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index a3f754f..7a14660 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,6 @@ vendor # Custom secret.txt + +#generated config +config diff --git a/controllers/trackingserver_controller.go b/controllers/trackingserver_controller.go index e2a12c6..3b1f8a4 100644 --- a/controllers/trackingserver_controller.go +++ b/controllers/trackingserver_controller.go @@ -88,20 +88,38 @@ func (r *TrackingServerReconciler) Reconcile(req ctrl.Request) (ctrl.Result, err if err != nil { return ctrl.Result{}, err } - err2 := r.Client.Create(context.TODO(), svc) - if err2 != nil { - return ctrl.Result{}, err2 + return ctrl.Result{}, nil + } else if err != nil { + return ctrl.Result{}, err + } + + svcFound := &corev1.Service{} + err = r.Client.Get(context.TODO(), types.NamespacedName{Name: svc.Name, Namespace: svc.Namespace}, svcFound) + if err != nil && errors.IsNotFound(err) { + reqLogger.Info("Creating a new Service", "Service.Namespace", svc.Namespace, "Service.Name", svc.Name) + err = r.Client.Create(context.TODO(), svc) + if err != nil { + return ctrl.Result{}, err } - err3 := r.Client.Create(context.TODO(), pvc) - if err3 != nil { - return ctrl.Result{}, err3 + return ctrl.Result{}, nil + } else if err != nil { + return ctrl.Result{}, err + } + + pvcFound := &corev1.PersistentVolumeClaim{} + err = r.Client.Get(context.TODO(), types.NamespacedName{Name: pvc.Name, Namespace: pvc.Namespace}, pvcFound) + if err != nil && errors.IsNotFound(err) { + reqLogger.Info("Creating a new PVC", "PVC.Namespace", pvc.Namespace, "PVC.Name", pvc.Name) + err = r.Client.Create(context.TODO(), pvc) + if err != nil { + return ctrl.Result{}, err } return ctrl.Result{}, nil } else if err != nil { return ctrl.Result{}, err } - reqLogger.Info("Skip reconciliation: Deployment already exists", "Deployment.Namespace", found.Namespace, "Deployment.Name", found.Name) + reqLogger.Info("Skip reconciliation: Deployment, Service and PVC already exists", "Deployment.Namespace", found.Namespace, "Deployment.Name", found.Name) return ctrl.Result{}, nil }