Skip to content

Commit 71a37d7

Browse files
author
Peng Zhou
committed
fix bugs for pathbased routing
1 parent bd08a14 commit 71a37d7

File tree

1 file changed

+33
-29
lines changed

1 file changed

+33
-29
lines changed

pkg/k8sutil/haProxyHelper.go

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ type HAProxyTemplate struct {
2323
ClusterName string
2424
SslCert string
2525
sslEnabledServer bool
26+
IsPathBased bool
2627
}
2728

2829
type HAProxyConfig struct {
@@ -32,17 +33,17 @@ type HAProxyConfig struct {
3233
}
3334

3435
type FrontEndConfig struct {
35-
FrontendName string
36-
PathBasedRouting bool
37-
Port int
38-
TargetPort int
39-
Path string
40-
BackendName string
36+
FrontendName string
37+
IsPathBased bool
38+
Port int
39+
TargetPort int
40+
Path string
41+
BackendName string
4142
}
4243

4344
type BackendConfig struct {
44-
IsPathBased bool
4545
BackendName string
46+
IsPathBased bool
4647
GroupName string
4748
Port int
4849
TargetPort int
@@ -67,11 +68,9 @@ func generateHAProxyConfig(cr *marklogicv1.MarklogicCluster) *HAProxyConfig {
6768
}
6869
}
6970
appServers := group.HAProxy.AppServers
70-
var groupPathBased bool
71+
groupPathBased := *cr.Spec.HAProxy.PathBasedRouting
7172
if group.HAProxy.PathBasedRouting != nil {
7273
groupPathBased = *group.HAProxy.PathBasedRouting
73-
} else {
74-
groupPathBased = *cr.Spec.HAProxy.PathBasedRouting
7574
}
7675
if len(appServers) == 0 {
7776
appServers = defaultAppServer
@@ -82,15 +81,15 @@ func generateHAProxyConfig(cr *marklogicv1.MarklogicCluster) *HAProxyConfig {
8281
targetPort = int(appServer.Port)
8382
}
8483
var key string
85-
if groupPathBased {
84+
if !groupPathBased {
8685
if int(appServer.Port) == targetPort {
8786
key = fmt.Sprintf("%d", appServer.Port)
8887
} else {
8988
key = fmt.Sprintf("%d-%d", appServer.Port, targetPort)
9089
}
9190
} else {
9291
pathWithoutSlashes := strings.ReplaceAll(appServer.Path, "/", "")
93-
key = fmt.Sprintf("%d-%s-path", appServer.Port, pathWithoutSlashes)
92+
key = fmt.Sprintf("%d-%s-path", appServer.TargetPort, pathWithoutSlashes)
9493
}
9594

9695
backendName := "marklogic-" + key + "-backend"
@@ -99,11 +98,11 @@ func generateHAProxyConfig(cr *marklogicv1.MarklogicCluster) *HAProxyConfig {
9998
frontendName := "marklogic-" + key + "-frontend"
10099
if _, exists := frontendMap[key]; !exists {
101100
frontend := FrontEndConfig{
102-
FrontendName: frontendName,
103-
PathBasedRouting: *cr.Spec.HAProxy.PathBasedRouting,
104-
Port: int(appServer.Port),
105-
TargetPort: targetPort,
106-
BackendName: backendName,
101+
FrontendName: frontendName,
102+
IsPathBased: groupPathBased,
103+
Port: int(appServer.Port),
104+
TargetPort: targetPort,
105+
BackendName: backendName,
107106
}
108107
frontendMap[key] = frontend
109108
}
@@ -148,13 +147,20 @@ frontend marklogic-pathbased-frontend
148147
}
149148
result = parseTemplateToString(frontEndDef, data)
150149
for _, backends := range config.BackendConfigMap {
151-
data = &HAProxyTemplate{
152-
PortNumber: int(backends[0].Port),
153-
TargetPortNumber: int(backends[0].TargetPort),
154-
Path: backends[0].Path,
155-
BackendName: backends[0].BackendName,
150+
for _, babackend := range backends {
151+
if !babackend.IsPathBased {
152+
continue
153+
}
154+
data = &HAProxyTemplate{
155+
PortNumber: int(babackend.Port),
156+
TargetPortNumber: int(babackend.TargetPort),
157+
Path: babackend.Path,
158+
IsPathBased: babackend.IsPathBased,
159+
BackendName: babackend.BackendName,
160+
}
161+
result += getFrontendForPathbased(data)
162+
156163
}
157-
result += getFrontendForPathbased(data)
158164
}
159165
}
160166
// front end configuration for non-path based routing
@@ -180,7 +186,6 @@ frontend {{ .FrontendName }}
180186
// generates backend config for HAProxy depending on pathBasedRouting flag and appServers
181187
func generateBackendConfig(cr *marklogicv1.MarklogicCluster, config *HAProxyConfig) string {
182188
backendConfigs := config.BackendConfigMap
183-
pathBasedRouting := cr.Spec.HAProxy.PathBasedRouting
184189
var result string
185190

186191
backendTemplate := `
@@ -195,11 +200,6 @@ backend {{ .BackendName }}
195200
stick match req.cook(HostId)
196201
stick match req.cook(SessionId)
197202
default-server check`
198-
199-
if *pathBasedRouting {
200-
backendTemplate += `
201-
http-request replace-path {{.Path}}(/)?(.*) /\2`
202-
}
203203
for _, backends := range backendConfigs {
204204
data := &HAProxyTemplate{
205205
BackendName: backends[0].BackendName,
@@ -210,6 +210,10 @@ backend {{ .BackendName }}
210210
for _, backend := range backends {
211211
name := backend.GroupName
212212
groupReplicas := backend.Replicas
213+
if backend.IsPathBased {
214+
backendTemplate += `
215+
http-request replace-path {{.Path}}(/)?(.*) /\2`
216+
}
213217
for i := 0; i < groupReplicas; i++ {
214218
data := &HAProxyTemplate{
215219
PortNumber: backend.TargetPort,

0 commit comments

Comments
 (0)