This is an automated email from the ASF dual-hosted git repository.

houston pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr-operator.git


The following commit(s) were added to refs/heads/main by this push:
     new ea138ed  Fix appProtocol issue for non-TLS SolrClouds (#641)
ea138ed is described below

commit ea138ed2e022a2c270dd335fdd5b1f0cfad27d75
Author: Houston Putman <[email protected]>
AuthorDate: Mon Oct 9 15:00:11 2023 -0400

    Fix appProtocol issue for non-TLS SolrClouds (#641)
---
 .../solrcloud_controller_externaldns_test.go       |  6 ++---
 controllers/solrcloud_controller_ingress_test.go   | 12 ++++------
 controllers/solrcloud_controller_test.go           |  6 ++---
 controllers/solrcloud_controller_tls_test.go       | 26 +++++++++++++++-------
 controllers/util/solr_util.go                      |  8 ++++---
 helm/solr-operator/Chart.yaml                      |  7 ++++++
 6 files changed, 38 insertions(+), 27 deletions(-)

diff --git a/controllers/solrcloud_controller_externaldns_test.go 
b/controllers/solrcloud_controller_externaldns_test.go
index 92d7e7e..0cd0bcc 100644
--- a/controllers/solrcloud_controller_externaldns_test.go
+++ b/controllers/solrcloud_controller_externaldns_test.go
@@ -117,8 +117,7 @@ var _ = FDescribe("SolrCloud controller - External DNS", 
func() {
                        
Expect(commonService.Spec.Ports[0].Port).To(Equal(int32(4000)), "Wrong port on 
common Service")
                        
Expect(commonService.Spec.Ports[0].TargetPort.StrVal).To(Equal("solr-client"), 
"Wrong podPort name on common Service")
                        
Expect(commonService.Spec.Ports[0].Protocol).To(Equal(corev1.ProtocolTCP), 
"Wrong protocol on common Service")
-                       
Expect(commonService.Spec.Ports[0].AppProtocol).ToNot(BeNil(), "AppProtocol on 
common Service should not be nil")
-                       
Expect(*commonService.Spec.Ports[0].AppProtocol).To(Equal("http"), "Wrong 
appProtocol on common Service")
+                       
Expect(commonService.Spec.Ports[0].AppProtocol).To(BeNil(), "AppProtocol on 
common Service should be nil when not running with TLS")
 
                        By("testing the Solr Headless Service")
                        headlessService := expectService(ctx, solrCloud, 
solrCloud.HeadlessServiceName(), statefulSet.Spec.Selector.MatchLabels, true)
@@ -130,8 +129,7 @@ var _ = FDescribe("SolrCloud controller - External DNS", 
func() {
                        
Expect(headlessService.Spec.Ports[0].Port).To(Equal(int32(3000)), "Wrong port 
on headless Service")
                        
Expect(headlessService.Spec.Ports[0].TargetPort.StrVal).To(Equal("solr-client"),
 "Wrong podPort name on headless Service")
                        
Expect(headlessService.Spec.Ports[0].Protocol).To(Equal(corev1.ProtocolTCP), 
"Wrong protocol on headless Service")
-                       
Expect(headlessService.Spec.Ports[0].AppProtocol).ToNot(BeNil(), "AppProtocol 
on headless Service should not be nil")
-                       
Expect(*headlessService.Spec.Ports[0].AppProtocol).To(Equal("http"), "Wrong 
appProtocol on headless Service")
+                       
Expect(headlessService.Spec.Ports[0].AppProtocol).To(BeNil(), "AppProtocol on 
headless Service should be nil when not running with TLS")
 
                        By("making sure no individual Solr Node Services exist")
                        expectNoServices(ctx, solrCloud, "Node service 
shouldn't exist, but it does.", solrCloud.GetAllSolrPodNames())
diff --git a/controllers/solrcloud_controller_ingress_test.go 
b/controllers/solrcloud_controller_ingress_test.go
index d9ad9bf..8a616a9 100644
--- a/controllers/solrcloud_controller_ingress_test.go
+++ b/controllers/solrcloud_controller_ingress_test.go
@@ -231,8 +231,7 @@ var _ = FDescribe("SolrCloud controller - Ingress", func() {
                        
Expect(commonService.Spec.Ports[0].Port).To(Equal(int32(4000)), "Wrong port on 
common Service")
                        
Expect(commonService.Spec.Ports[0].TargetPort.StrVal).To(Equal("solr-client"), 
"Wrong podPort name on common Service")
                        
Expect(commonService.Spec.Ports[0].Protocol).To(Equal(corev1.ProtocolTCP), 
"Wrong protocol on common Service")
-                       
Expect(commonService.Spec.Ports[0].AppProtocol).ToNot(BeNil(), "AppProtocol on 
common Service should not be nil")
-                       
Expect(*commonService.Spec.Ports[0].AppProtocol).To(Equal("http"), "Wrong 
appProtocol on common Service")
+                       
Expect(commonService.Spec.Ports[0].AppProtocol).To(BeNil(), "AppProtocol on 
common Service should be nil when not running with TLS")
 
                        By("testing the Solr Headless Service")
                        headlessService := expectService(ctx, solrCloud, 
solrCloud.HeadlessServiceName(), statefulSet.Spec.Selector.MatchLabels, true)
@@ -241,8 +240,7 @@ var _ = FDescribe("SolrCloud controller - Ingress", func() {
                        
Expect(headlessService.Spec.Ports[0].Port).To(Equal(int32(3000)), "Wrong port 
on headless Service")
                        
Expect(headlessService.Spec.Ports[0].TargetPort.StrVal).To(Equal("solr-client"),
 "Wrong podPort name on headless Service")
                        
Expect(headlessService.Spec.Ports[0].Protocol).To(Equal(corev1.ProtocolTCP), 
"Wrong protocol on headless Service")
-                       
Expect(headlessService.Spec.Ports[0].AppProtocol).ToNot(BeNil(), "AppProtocol 
on headless Service should not be nil")
-                       
Expect(*headlessService.Spec.Ports[0].AppProtocol).To(Equal("http"), "Wrong 
appProtocol on headless Service")
+                       
Expect(headlessService.Spec.Ports[0].AppProtocol).To(BeNil(), "AppProtocol on 
headless Service should be nil when not running with TLS")
 
                        By("making sure no individual Solr Node Services exist")
                        expectNoServices(ctx, solrCloud, "Node service 
shouldn't exist, but it does.", solrCloud.GetAllSolrPodNames())
@@ -311,8 +309,7 @@ var _ = FDescribe("SolrCloud controller - Ingress", func() {
                        
Expect(commonService.Spec.Ports[0].Port).To(Equal(int32(4000)), "Wrong port on 
common Service")
                        
Expect(commonService.Spec.Ports[0].TargetPort.StrVal).To(Equal("solr-client"), 
"Wrong podPort name on common Service")
                        
Expect(commonService.Spec.Ports[0].Protocol).To(Equal(corev1.ProtocolTCP), 
"Wrong protocol on common Service")
-                       
Expect(commonService.Spec.Ports[0].AppProtocol).ToNot(BeNil(), "AppProtocol on 
common Service should not be nil")
-                       
Expect(*commonService.Spec.Ports[0].AppProtocol).To(Equal("http"), "Wrong 
appProtocol on common Service")
+                       
Expect(commonService.Spec.Ports[0].AppProtocol).To(BeNil(), "AppProtocol on 
common Service should be nil when not running with TLS")
 
                        By("ensuring the Solr Headless Service does not exist")
                        expectNoService(ctx, solrCloud, 
solrCloud.HeadlessServiceName(), "Headless service shouldn't exist, but it 
does.")
@@ -329,8 +326,7 @@ var _ = FDescribe("SolrCloud controller - Ingress", func() {
                                
Expect(service.Spec.Ports[0].Port).To(Equal(int32(100)), "Wrong port on node 
Service")
                                
Expect(service.Spec.Ports[0].TargetPort.StrVal).To(Equal("solr-client"), "Wrong 
podPort name on node Service")
                                
Expect(service.Spec.Ports[0].Protocol).To(Equal(corev1.ProtocolTCP), "Wrong 
protocol on node Service")
-                               
Expect(service.Spec.Ports[0].AppProtocol).ToNot(BeNil(), "AppProtocol on node 
Service should not be nil")
-                               
Expect(*service.Spec.Ports[0].AppProtocol).To(Equal("http"), "Wrong appProtocol 
on node Service")
+                               
Expect(service.Spec.Ports[0].AppProtocol).To(BeNil(), "AppProtocol on node 
Service should be nil when not running with TLS")
                        }
 
                        By("making sure Ingress was created correctly")
diff --git a/controllers/solrcloud_controller_test.go 
b/controllers/solrcloud_controller_test.go
index 2c56858..8d81397 100644
--- a/controllers/solrcloud_controller_test.go
+++ b/controllers/solrcloud_controller_test.go
@@ -298,8 +298,7 @@ var _ = FDescribe("SolrCloud controller - General", func() {
                        
Expect(commonService.Labels).To(Equal(util.MergeLabelsOrAnnotations(expectedCommonServiceLabels,
 testCommonServiceLabels)), "Incorrect common service labels")
                        
Expect(commonService.Annotations).To(Equal(testCommonServiceAnnotations), 
"Incorrect common service annotations")
                        
Expect(commonService.Spec.Ports[0].Protocol).To(Equal(corev1.ProtocolTCP), 
"Wrong protocol on common Service")
-                       
Expect(commonService.Spec.Ports[0].AppProtocol).ToNot(BeNil(), "AppProtocol on 
common Service should not be nil")
-                       
Expect(*commonService.Spec.Ports[0].AppProtocol).To(Equal("http"), "Wrong 
appProtocol on common Service")
+                       
Expect(commonService.Spec.Ports[0].AppProtocol).To(BeNil(), "AppProtocol on 
common Service should be nil when not running with TLS")
 
                        By("testing the Solr Headless Service")
                        headlessService := expectService(ctx, solrCloud, 
solrCloud.HeadlessServiceName(), statefulSet.Spec.Selector.MatchLabels, true)
@@ -307,8 +306,7 @@ var _ = FDescribe("SolrCloud controller - General", func() {
                        
Expect(headlessService.Labels).To(Equal(util.MergeLabelsOrAnnotations(expectedHeadlessServiceLabels,
 testHeadlessServiceLabels)), "Incorrect headless service labels")
                        
Expect(headlessService.Annotations).To(Equal(testHeadlessServiceAnnotations), 
"Incorrect headless service annotations")
                        
Expect(headlessService.Spec.Ports[0].Protocol).To(Equal(corev1.ProtocolTCP), 
"Wrong protocol on headless Service")
-                       
Expect(headlessService.Spec.Ports[0].AppProtocol).ToNot(BeNil(), "AppProtocol 
on headless Service should not be nil")
-                       
Expect(*headlessService.Spec.Ports[0].AppProtocol).To(Equal("http"), "Wrong 
appProtocol on headless Service")
+                       
Expect(headlessService.Spec.Ports[0].AppProtocol).To(BeNil(), "AppProtocol on 
headless Service should be nil when not running with TLS")
 
                        By("testing the PodDisruptionBudget")
                        expectNoPodDisruptionBudget(ctx, solrCloud, 
solrCloud.StatefulSetName())
diff --git a/controllers/solrcloud_controller_tls_test.go 
b/controllers/solrcloud_controller_tls_test.go
index c24013f..6dff3d7 100644
--- a/controllers/solrcloud_controller_tls_test.go
+++ b/controllers/solrcloud_controller_tls_test.go
@@ -946,11 +946,9 @@ func expectZkSetupInitContainerForTLSWithGomega(g Gomega, 
solrCloud *solrv1beta1
 }
 
 func expectTLSService(ctx context.Context, solrCloud *solrv1beta1.SolrCloud, 
selectorLables map[string]string, podsHaveTLSEnabled bool) {
-       appProtocol := "http"
        podPort := 8983
        servicePort := 80
        if podsHaveTLSEnabled {
-               appProtocol = "https"
                servicePort = 443
        }
        By("testing the Solr Common Service")
@@ -959,8 +957,12 @@ func expectTLSService(ctx context.Context, solrCloud 
*solrv1beta1.SolrCloud, sel
        Expect(commonService.Spec.Ports[0].Port).To(Equal(int32(servicePort)), 
"Wrong port on common Service")
        
Expect(commonService.Spec.Ports[0].TargetPort.StrVal).To(Equal("solr-client"), 
"Wrong podPort name on common Service")
        
Expect(commonService.Spec.Ports[0].Protocol).To(Equal(corev1.ProtocolTCP), 
"Wrong protocol on common Service")
-       Expect(commonService.Spec.Ports[0].AppProtocol).ToNot(BeNil(), 
"AppProtocol on common Service should not be nil")
-       Expect(*commonService.Spec.Ports[0].AppProtocol).To(Equal(appProtocol), 
"Wrong appProtocol on common Service")
+       if podsHaveTLSEnabled {
+               Expect(commonService.Spec.Ports[0].AppProtocol).ToNot(BeNil(), 
"AppProtocol on common Service should not be nil")
+               
Expect(*commonService.Spec.Ports[0].AppProtocol).To(Equal("https"), "Wrong 
appProtocol on common Service")
+       } else {
+               Expect(commonService.Spec.Ports[0].AppProtocol).To(BeNil(), 
"AppProtocol on common Service should be nil when not running with TLS")
+       }
 
        if 
solrCloud.Spec.SolrAddressability.External.UsesIndividualNodeServices() {
                nodeNames := solrCloud.GetAllSolrPodNames()
@@ -971,8 +973,12 @@ func expectTLSService(ctx context.Context, solrCloud 
*solrv1beta1.SolrCloud, sel
                        
Expect(service.Spec.Ports[0].Port).To(Equal(int32(servicePort)), "Wrong port on 
node Service")
                        
Expect(service.Spec.Ports[0].TargetPort.StrVal).To(Equal("solr-client"), "Wrong 
podPort name on node Service")
                        
Expect(service.Spec.Ports[0].Protocol).To(Equal(corev1.ProtocolTCP), "Wrong 
protocol on node Service")
-                       
Expect(service.Spec.Ports[0].AppProtocol).ToNot(BeNil(), "AppProtocol on node 
Service should not be nil")
-                       
Expect(*service.Spec.Ports[0].AppProtocol).To(Equal(appProtocol), "Wrong 
appProtocol on node Service")
+                       if podsHaveTLSEnabled {
+                               
Expect(service.Spec.Ports[0].AppProtocol).ToNot(BeNil(), "AppProtocol on node 
Service should not be nil")
+                               
Expect(*service.Spec.Ports[0].AppProtocol).To(Equal("https"), "Wrong 
appProtocol on node Service")
+                       } else {
+                               
Expect(service.Spec.Ports[0].AppProtocol).To(BeNil(), "AppProtocol on node 
Service should be nil when not running with TLS")
+                       }
                }
        } else {
                By("testing the Solr Headless Service")
@@ -981,8 +987,12 @@ func expectTLSService(ctx context.Context, solrCloud 
*solrv1beta1.SolrCloud, sel
                
Expect(headlessService.Spec.Ports[0].Port).To(Equal(int32(podPort)), "Wrong 
port on headless Service")
                
Expect(headlessService.Spec.Ports[0].TargetPort.StrVal).To(Equal("solr-client"),
 "Wrong podPort name on headless Service")
                
Expect(headlessService.Spec.Ports[0].Protocol).To(Equal(corev1.ProtocolTCP), 
"Wrong protocol on headless Service")
-               
Expect(headlessService.Spec.Ports[0].AppProtocol).ToNot(BeNil(), "AppProtocol 
on headless Service should not be nil")
-               
Expect(*headlessService.Spec.Ports[0].AppProtocol).To(Equal(appProtocol), 
"Wrong appProtocol on headless Service")
+               if podsHaveTLSEnabled {
+                       
Expect(headlessService.Spec.Ports[0].AppProtocol).ToNot(BeNil(), "AppProtocol 
on headless Service should not be nil")
+                       
Expect(*headlessService.Spec.Ports[0].AppProtocol).To(Equal("https"), "Wrong 
appProtocol on headless Service")
+               } else {
+                       
Expect(headlessService.Spec.Ports[0].AppProtocol).To(BeNil(), "AppProtocol on 
headless Service should be nil when not running with TLS")
+               }
        }
 }
 
diff --git a/controllers/util/solr_util.go b/controllers/util/solr_util.go
index c6ede52..0c7f098 100644
--- a/controllers/util/solr_util.go
+++ b/controllers/util/solr_util.go
@@ -26,6 +26,7 @@ import (
        "k8s.io/apimachinery/pkg/api/resource"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/apimachinery/pkg/util/intstr"
+       "k8s.io/utils/pointer"
        "sort"
        "strconv"
        "strings"
@@ -880,11 +881,12 @@ func GenerateAdditionalLibXMLPart(solrModules []string, 
additionalLibs []string)
 }
 
 func getAppProtocol(solrCloud *solr.SolrCloud) *string {
-       appProtocol := "http"
+       // Only use https, because for non-tls we need to support both http & 
http2 for Solr
        if solrCloud.Spec.SolrTLS != nil {
-               appProtocol = "https"
+               return pointer.String("https")
+       } else {
+               return nil
        }
-       return &appProtocol
 }
 
 // GenerateCommonService returns a new corev1.Service pointer generated for 
the entire SolrCloud instance
diff --git a/helm/solr-operator/Chart.yaml b/helm/solr-operator/Chart.yaml
index 9524b43..849b501 100644
--- a/helm/solr-operator/Chart.yaml
+++ b/helm/solr-operator/Chart.yaml
@@ -128,6 +128,13 @@ annotations:
           url: https://github.com/apache/solr-operator/issues/603
         - name: Github PR
           url: https://github.com/apache/solr-operator/pull/608
+    - kind: changed
+      description: Remove Service AppProtocol for non-TLS SolrClouds, in order 
to support http and http2
+      links:
+        - name: Github Issue
+          url: https://github.com/apache/solr-operator/issues/640
+        - name: Github PR
+          url: https://github.com/apache/solr-operator/pull/641
   artifacthub.io/images: |
     - name: solr-operator
       image: apache/solr-operator:v0.8.0-prerelease

Reply via email to