Skip to content

Commit

Permalink
[bug fix] Take into account PD peer port and PD client port when pdAd…
Browse files Browse the repository at this point in the history
…dresses from TidbCluster manifest used over Discovery service in pd, tidb and tikv startup scripts (#5438)
  • Loading branch information
smineyev81 authored Dec 6, 2023
1 parent 30d7599 commit 0c527c5
Show file tree
Hide file tree
Showing 8 changed files with 42 additions and 12 deletions.
18 changes: 18 additions & 0 deletions pkg/manager/member/startscript/v2/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ package v2

import (
"bytes"
"fmt"
"net/url"
"text/template"
)

Expand Down Expand Up @@ -118,3 +120,19 @@ func renderTemplateFunc(tpl *template.Template, model interface{}) (string, erro
}
return buff.String(), nil
}

func addressesWithSchemeAndPort(addresses []string, scheme string, port int32) []string {
res := make([]string, len(addresses))
for i, a := range addresses {
u, err := url.Parse(a)
if err != nil {
res[i] = fmt.Sprintf("%s%s:%d", scheme, a, port)
} else if u.Hostname() != "" {
res[i] = fmt.Sprintf("%s%s:%d", scheme, u.Hostname(), port)
} else {
res[i] = fmt.Sprintf("%s%s:%d", scheme, u.Path, port)
}

}
return res
}
9 changes: 9 additions & 0 deletions pkg/manager/member/startscript/v2/common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,12 @@ func validateScript(script string) error {
_, err := syntax.NewParser().Parse(strings.NewReader(script), "")
return err
}

func TestAddressesWithSchemeAndPort(t *testing.T) {
g := gomega.NewGomegaWithT(t)

result := addressesWithSchemeAndPort([]string{"example.com", "http://test.com:7777", "https://blah.com"}, "https://", 8080)

expected := []string{"https://example.com:8080", "https://test.com:8080", "https://blah.com:8080"}
g.Expect(result).Should(gomega.Equal(expected))
}
3 changes: 2 additions & 1 deletion pkg/manager/member/startscript/v2/pd_start_script.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ func RenderPDStartScript(tc *v1alpha1.TidbCluster) (string, error) {
preferPDAddressesOverDiscovery := slices.Contains(
tc.Spec.StartScriptV2FeatureFlags, v1alpha1.StartScriptV2FeatureFlagPreferPDAddressesOverDiscovery)
if preferPDAddressesOverDiscovery {
m.PDAddresses = strings.Join(tc.Spec.PDAddresses, ",")
pdAddressesWithSchemeAndPort := addressesWithSchemeAndPort(tc.Spec.PDAddresses, tc.Scheme()+"://", v1alpha1.DefaultPDPeerPort)
m.PDAddresses = strings.Join(pdAddressesWithSchemeAndPort, ",")
}

m.DataDir = filepath.Join(constants.PDDataVolumeMountPath, tc.Spec.PD.DataSubDir)
Expand Down
6 changes: 3 additions & 3 deletions pkg/manager/member/startscript/v2/pd_start_script_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ exec /pd-server ${ARGS}
{
name: "with PDAddresses but without preferPDAddressesOverDiscovery",
modifyTC: func(tc *v1alpha1.TidbCluster) {
tc.Spec.PDAddresses = []string{"${PD_DOMAIN}:2380", "another.pd:2380"}
tc.Spec.PDAddresses = []string{"${PD_DOMAIN}", "another.pd"}
},
expectScript: `#!/bin/sh
Expand Down Expand Up @@ -201,7 +201,7 @@ exec /pd-server ${ARGS}
{
name: "with PDAddresses and preferPDAddressesOverDiscovery",
modifyTC: func(tc *v1alpha1.TidbCluster) {
tc.Spec.PDAddresses = []string{"${PD_DOMAIN}:2380", "another.pd:2380"}
tc.Spec.PDAddresses = []string{"${PD_DOMAIN}", "another.pd"}
tc.Spec.StartScriptV2FeatureFlags = []v1alpha1.StartScriptV2FeatureFlag{
v1alpha1.StartScriptV2FeatureFlagPreferPDAddressesOverDiscovery,
}
Expand Down Expand Up @@ -265,7 +265,7 @@ ARGS="--data-dir=/var/lib/pd \
--advertise-client-urls=http://${PD_DOMAIN}:2379 \
--config=/etc/pd/pd.toml"
ARGS="${ARGS} --join=${PD_DOMAIN}:2380,another.pd:2380"
ARGS="${ARGS} --join=http://${PD_DOMAIN}:2380,http://another.pd:2380"
echo "starting pd-server ..."
sleep $((RANDOM % 10))
Expand Down
3 changes: 2 additions & 1 deletion pkg/manager/member/startscript/v2/tidb_start_script.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ func RenderTiDBStartScript(tc *v1alpha1.TidbCluster) (string, error) {
preferPDAddressesOverDiscovery := slices.Contains(
tc.Spec.StartScriptV2FeatureFlags, v1alpha1.StartScriptV2FeatureFlagPreferPDAddressesOverDiscovery)
if preferPDAddressesOverDiscovery {
m.PDAddresses = strings.Join(tc.Spec.PDAddresses, ",")
pdAddressesWithSchemeAndPort := addressesWithSchemeAndPort(tc.Spec.PDAddresses, "", v1alpha1.DefaultPDClientPort)
m.PDAddresses = strings.Join(pdAddressesWithSchemeAndPort, ",")
}
if len(m.PDAddresses) == 0 {
if tc.AcrossK8s() {
Expand Down
6 changes: 3 additions & 3 deletions pkg/manager/member/startscript/v2/tidb_start_script_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ exec /tidb-server ${ARGS}
{
name: "with PDAddresses but without PreferPDAddressesOverDiscovery",
modifyTC: func(tc *v1alpha1.TidbCluster) {
tc.Spec.PDAddresses = []string{"${PD_DOMAIN}:2380", "another.pd:2380"}
tc.Spec.PDAddresses = []string{"${PD_DOMAIN}", "another.pd"}
},
expectScript: `#!/bin/sh
Expand Down Expand Up @@ -120,7 +120,7 @@ exec /tidb-server ${ARGS}
{
name: "with PDAddresses and PreferPDAddressesOverDiscovery",
modifyTC: func(tc *v1alpha1.TidbCluster) {
tc.Spec.PDAddresses = []string{"${PD_DOMAIN}:2380", "another.pd:2380"}
tc.Spec.PDAddresses = []string{"${PD_DOMAIN}", "another.pd"}
tc.Spec.StartScriptV2FeatureFlags = []v1alpha1.StartScriptV2FeatureFlag{
v1alpha1.StartScriptV2FeatureFlagPreferPDAddressesOverDiscovery,
}
Expand Down Expand Up @@ -149,7 +149,7 @@ TIDB_POD_NAME=${POD_NAME:-$HOSTNAME}
ARGS="--store=tikv \
--advertise-address=${TIDB_POD_NAME}.start-script-test-tidb-peer.start-script-test-ns.svc \
--host=0.0.0.0 \
--path=${PD_DOMAIN}:2380,another.pd:2380 \
--path=${PD_DOMAIN}:2379,another.pd:2379 \
--config=/etc/tidb/tidb.toml"
SLOW_LOG_FILE=${SLOW_LOG_FILE:-""}
Expand Down
3 changes: 2 additions & 1 deletion pkg/manager/member/startscript/v2/tikv_start_script.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ func RenderTiKVStartScript(tc *v1alpha1.TidbCluster) (string, error) {
preferPDAddressesOverDiscovery := slices.Contains(
tc.Spec.StartScriptV2FeatureFlags, v1alpha1.StartScriptV2FeatureFlagPreferPDAddressesOverDiscovery)
if preferPDAddressesOverDiscovery {
m.PDAddresses = strings.Join(tc.Spec.PDAddresses, ",")
pdAddressesWithSchemeAndPort := addressesWithSchemeAndPort(tc.Spec.PDAddresses, "", v1alpha1.DefaultPDClientPort)
m.PDAddresses = strings.Join(pdAddressesWithSchemeAndPort, ",")
}
if len(m.PDAddresses) == 0 {
if tc.AcrossK8s() {
Expand Down
6 changes: 3 additions & 3 deletions pkg/manager/member/startscript/v2/tikv_start_script_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ exec /tikv-server ${ARGS}
{
name: "with PDAddresses but without PDAddressesOverDiscovery",
modifyTC: func(tc *v1alpha1.TidbCluster) {
tc.Spec.PDAddresses = []string{"${PD_DOMAIN}:2380", "another.pd:2380"}
tc.Spec.PDAddresses = []string{"${PD_DOMAIN}", "another.pd"}
},
expectScript: `#!/bin/sh
Expand Down Expand Up @@ -122,7 +122,7 @@ exec /tikv-server ${ARGS}
{
name: "with PDAddresses and PDAddressesOverDiscovery",
modifyTC: func(tc *v1alpha1.TidbCluster) {
tc.Spec.PDAddresses = []string{"${PD_DOMAIN}:2380", "another.pd:2380"}
tc.Spec.PDAddresses = []string{"${PD_DOMAIN}", "another.pd"}
tc.Spec.StartScriptV2FeatureFlags = []v1alpha1.StartScriptV2FeatureFlag{
v1alpha1.StartScriptV2FeatureFlagPreferPDAddressesOverDiscovery,
}
Expand All @@ -148,7 +148,7 @@ fi
TIKV_POD_NAME=${POD_NAME:-$HOSTNAME}
ARGS="--pd=${PD_DOMAIN}:2380,another.pd:2380 \
ARGS="--pd=${PD_DOMAIN}:2379,another.pd:2379 \
--advertise-addr=${TIKV_POD_NAME}.start-script-test-tikv-peer.start-script-test-ns.svc:20160 \
--addr=0.0.0.0:20160 \
--status-addr=0.0.0.0:20180 \
Expand Down

0 comments on commit 0c527c5

Please sign in to comment.