From ca460f08630283eb07a66fa8a5a1bfbc856bf157 Mon Sep 17 00:00:00 2001
From: Lukasz Lopatowski <llopat@man.poznan.pl>
Date: Wed, 3 Jun 2020 10:59:33 +0200
Subject: [PATCH] Fixed StatefulSet handling

---
 pkg/service/v1/config-service.go      | 28 +++++++++++++++------------
 pkg/service/v1/config-service_test.go | 22 ++++++++++-----------
 2 files changed, 27 insertions(+), 23 deletions(-)

diff --git a/pkg/service/v1/config-service.go b/pkg/service/v1/config-service.go
index 25747d9..6bdfada 100644
--- a/pkg/service/v1/config-service.go
+++ b/pkg/service/v1/config-service.go
@@ -222,7 +222,7 @@ func (s *configServiceServer) DeleteIfExists(ctx context.Context, req *v1.Instan
 	//check if configmap exist
 	_, err = s.kubeAPI.CoreV1().ConfigMaps(depl.Namespace).Get(depl.Uid, metav1.GetOptions{})
 	if err != nil {
-		return prepareResponse(v1.Status_OK,"ConfigMap not exists or is unavailable"), nil
+		return prepareResponse(v1.Status_OK, "ConfigMap not exists or is unavailable"), nil
 	}
 
 	//delete configmap
@@ -414,25 +414,29 @@ func (s *readinessServiceServer) CheckIfReady(ctx context.Context, req *v1.Insta
 		return prepareResponse(v1.Status_FAILED, namespaceNotFound), err
 	}
 
-	//looking for deployment and checking its status
+	log.Print("looking for deployment and checking its status")
 	dep, err := s.kubeAPI.ExtensionsV1beta1().Deployments(depl.Namespace).Get(depl.Uid, metav1.GetOptions{})
-	if err == nil {
-		if *dep.Spec.Replicas == dep.Status.ReadyReplicas {
-			return prepareResponse(v1.Status_OK, "Deployment is ready"), nil
-		}
-		return prepareResponse(v1.Status_PENDING, "Waiting for deployment"), err
-	} else {
-		//deployment not found, looking for statefulset and checking its status
+	if err != nil {
+		log.Print("deployment not found, looking for statefulset and checking its status")
 		sts, err2 := s.kubeAPI.AppsV1().StatefulSets(depl.Namespace).Get(depl.Uid, metav1.GetOptions{})
-		if err2 == nil {
+		if err2 != nil {
+			log.Print("statefulset not found as well")
+			return prepareResponse(v1.Status_FAILED, "Neither Deployment nor StatefulSet found!"), err2
+		} else {
+			log.Print("statefulset found, verifying status")
 			if *sts.Spec.Replicas == sts.Status.ReadyReplicas {
 				return prepareResponse(v1.Status_OK, "StatefulSet is ready"), nil
 			}
-			return prepareResponse(v1.Status_PENDING, "Waiting for deployment"), err
+			return prepareResponse(v1.Status_PENDING, "Waiting for statefulset"), nil
+		}
+	} else {
+		log.Print("deployment found, verifying status")
+		if *dep.Spec.Replicas == dep.Status.ReadyReplicas {
+			return prepareResponse(v1.Status_OK, "Deployment is ready"), nil
 		}
+		return prepareResponse(v1.Status_PENDING, "Waiting for deployment"), nil
 	}
 
-	return prepareResponse(v1.Status_FAILED, "Neither Deployment nor StatefulSet found!"), err
 }
 
 func (s *informationServiceServer) RetrieveServiceIp(ctx context.Context, req *v1.InstanceRequest) (*v1.InfoServiceResponse, error) {
diff --git a/pkg/service/v1/config-service_test.go b/pkg/service/v1/config-service_test.go
index d536e35..48aa0cf 100644
--- a/pkg/service/v1/config-service_test.go
+++ b/pkg/service/v1/config-service_test.go
@@ -114,17 +114,17 @@ func TestReadinessServiceServer_CheckIfReadyWithStatefulSet(t *testing.T) {
 	}
 
 	//create mock statefulset that is fully deployed
-        sts := appsv1.StatefulSet{}
-        sts.Name = "test-uid"
-        q := int32(5)
-        sts.Spec.Replicas = &q
-        sts.Status.ReadyReplicas = q
-        _, _ = client.AppsV1().StatefulSets("test-namespace").Create(&sts)
-
-        res, err = server.CheckIfReady(context.Background(), &req)
-        if err != nil || res.Status != v1.Status_OK {
-                t.Fail()
-        }
+	sts := appsv1.StatefulSet{}
+	sts.Name = "test-uid"
+	q := int32(5)
+	sts.Spec.Replicas = &q
+	sts.Status.ReadyReplicas = q
+	_, _ = client.AppsV1().StatefulSets("test-namespace").Create(&sts)
+
+	res, err = server.CheckIfReady(context.Background(), &req)
+	if err != nil || res.Status != v1.Status_OK {
+		t.Fail()
+	}
 }
 
 func TestInformationServiceServer_RetrieveServiceIp(t *testing.T) {
-- 
GitLab