Skip to content

Commit 5d7bdc3

Browse files
committed
Service can not start when no cluster is discovered in configs #538
1 parent 653a117 commit 5d7bdc3

File tree

3 files changed

+75
-64
lines changed

3 files changed

+75
-64
lines changed

cluster/cluster_key.go

+6
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,13 @@ func (cluster *Cluster) createKeys() error {
189189
BasicConstraintsValid: true,
190190
IsCA: false,
191191
}
192+
if len(cluster.Servers) == 0 {
193+
return errors.New("No servers list")
194+
}
192195
for _, h := range cluster.Servers {
196+
if h == nil {
197+
return errors.New("No servers list")
198+
}
193199
leafTemplate.DNSNames = append(leafTemplate.DNSNames, h.Host)
194200
}
195201
derBytes, err = x509.CreateCertificate(rand.Reader, &leafTemplate, &rootTemplate, &leafKey.PublicKey, rootKey)

cluster/srv_has.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,13 @@ func (server *ServerMonitor) IsSemiSyncMaster() bool {
2323
}
2424

2525
func (server *ServerMonitor) IsSemiSyncReplica() bool {
26-
return server.Status["RPL_SEMI_SYNC_SLAVE_STATUS"] == "ON" || server.Status["RPL_SEMI_SYNC_REPLICA_STATUS"] == "ON"
26+
if server.DBVersion.IsMariaDB() || (server.DBVersion.IsMySQLOrPercona() && server.DBVersion.Lower("8.0")) {
27+
return server.Status["RPL_SEMI_SYNC_SLAVE_STATUS"] == "ON" || server.Status["RPL_SEMI_SYNC_REPLICA_STATUS"] == "ON"
28+
}
29+
if server.DBVersion.IsMySQLOrPercona() && server.DBVersion.GreaterEqual("8.0") {
30+
return server.Status["RPL_SEMI_SYNC_SOURCE_STATUS"] == "ON" || server.Status["RPL_SEMI_SYNC_SOURCE_STATUS"] == "ON"
31+
}
32+
return false
2733
}
2834

2935
func (server *ServerMonitor) HasSemiSync() bool {

server/server.go

+62-63
Original file line numberDiff line numberDiff line change
@@ -1068,7 +1068,7 @@ func (repman *ReplicationManager) InitConfig(conf config.Config) {
10681068
if strClusters == "" {
10691069
// Discovering the clusters from all merged conf files build clusterDiscovery map
10701070
strClusters = repman.DiscoverClusters(fistRead)
1071-
log.WithField("clusters", strClusters).Debug("New clusters discovered")
1071+
log.WithField("clusters", strClusters).Infof("Clusters discovered: %s", strClusters)
10721072
}
10731073

10741074
cfgGroupIndex = 0
@@ -1092,82 +1092,81 @@ func (repman *ReplicationManager) InitConfig(conf config.Config) {
10921092
// backupvipersave := viper.GetViper()
10931093

10941094
//if clusters have been discovered
1095-
if strClusters != "" {
1096-
//set cluster list
1097-
repman.ClusterList = strings.Split(strClusters, ",")
1098-
repman.ImmuableFlagMaps["default"] = ImmuableMap
1099-
conf.ImmuableFlagMap = ImmuableMap
1100-
//load config file from git hub
1101-
conf.DecryptSecretsFromConfig()
1102-
1103-
if conf.GitUrl != "" && conf.GitAccesToken != "" && !conf.Cloud18 {
1104-
var tok string
1105-
1106-
if conf.IsVaultUsed() && conf.IsPath(conf.GitAccesToken) {
1107-
conn, err := conf.GetVaultConnection()
1108-
if err != nil {
1109-
log.Printf("Error vault connection %v", err)
1110-
}
1111-
tok, err = conf.GetVaultCredentials(conn, conf.GitAccesToken, "git-acces-token")
1112-
if err != nil {
1113-
log.Printf("Error get vault git-acces-token value %v", err)
1114-
tok = conf.GetDecryptedValue("git-acces-token")
1115-
} else {
1116-
var Secrets config.Secret
1117-
Secrets.Value = tok
1118-
conf.Secrets["git-acces-token"] = Secrets
1119-
}
1095+
if strClusters == "" {
11201096

1121-
} else {
1122-
tok = conf.GetDecryptedValue("git-acces-token")
1123-
}
1097+
//add default to the clusterlist if no cluster discover
1098+
log.WithField("cluster", "Default").Debug("No clusters dicoverd add Default Cluster")
11241099

1125-
conf.CloneConfigFromGit(conf.GitUrl, conf.GitUsername, tok, conf.WorkingDir)
1126-
}
1100+
strClusters += "Default"
1101+
1102+
}
1103+
1104+
//set cluster list
1105+
repman.ClusterList = strings.Split(strClusters, ",")
1106+
repman.ImmuableFlagMaps["default"] = ImmuableMap
1107+
conf.ImmuableFlagMap = ImmuableMap
1108+
//load config file from git hub
1109+
conf.DecryptSecretsFromConfig()
1110+
1111+
if conf.GitUrl != "" && conf.GitAccesToken != "" && !conf.Cloud18 {
1112+
var tok string
11271113

1128-
if conf.Cloud18GitUser != "" && conf.Cloud18GitPassword != "" && conf.Cloud18 {
1129-
acces_tok := githelper.GetGitLabTokenBasicAuth(conf.Cloud18GitUser, conf.GetDecryptedValue("cloud18-gitlab-password"), conf.LogGit)
1130-
personal_access_token, _ := githelper.GetGitLabTokenOAuth(acces_tok, conf.LogGit)
1131-
if personal_access_token != "" {
1114+
if conf.IsVaultUsed() && conf.IsPath(conf.GitAccesToken) {
1115+
conn, err := conf.GetVaultConnection()
1116+
if err != nil {
1117+
log.Printf("Error vault connection %v", err)
1118+
}
1119+
tok, err = conf.GetVaultCredentials(conn, conf.GitAccesToken, "git-acces-token")
1120+
if err != nil {
1121+
log.Printf("Error get vault git-acces-token value %v", err)
1122+
tok = conf.GetDecryptedValue("git-acces-token")
1123+
} else {
11321124
var Secrets config.Secret
1133-
Secrets.Value = personal_access_token
1125+
Secrets.Value = tok
11341126
conf.Secrets["git-acces-token"] = Secrets
1135-
conf.GitUrl = conf.OAuthProvider + "/" + conf.Cloud18Domain + "/" + conf.Cloud18SubDomain + "-" + conf.Cloud18SubDomainZone + ".git"
1136-
conf.GitUsername = conf.Cloud18GitUser
1137-
conf.GitAccesToken = personal_access_token
1138-
conf.ImmuableFlagMap["git-url"] = conf.GitUrl
1139-
conf.ImmuableFlagMap["git-username"] = conf.GitUsername
1140-
conf.ImmuableFlagMap["git-acces-token"] = personal_access_token
1141-
conf.CloneConfigFromGit(conf.GitUrl, conf.GitUsername, conf.GitAccesToken, conf.WorkingDir)
1142-
conf.PushConfigToGit(conf.GitUrl, conf.GitAccesToken, conf.GitUsername, conf.WorkingDir, []string{})
1143-
//conf.GitAddReadMe(conf.GitUrl, conf.GitAccesToken, conf.GitUsername, conf.WorkingDir)
1144-
1145-
} else if conf.LogGit {
1146-
log.WithField("group", repman.ClusterList[cfgGroupIndex]).Infof("Could not get personal access token from gitlab")
11471127
}
11481128

1129+
} else {
1130+
tok = conf.GetDecryptedValue("git-acces-token")
11491131
}
11501132

1151-
//add config from cluster to the config map
1152-
for _, cluster := range repman.ClusterList {
1153-
//vipersave := backupvipersave
1154-
confs[cluster] = repman.GetClusterConfig(fistRead, ImmuableMap, DynamicMap, cluster, conf)
1155-
cfgGroupIndex++
1156-
1133+
conf.CloneConfigFromGit(conf.GitUrl, conf.GitUsername, tok, conf.WorkingDir)
1134+
}
1135+
1136+
if conf.Cloud18GitUser != "" && conf.Cloud18GitPassword != "" && conf.Cloud18 {
1137+
acces_tok := githelper.GetGitLabTokenBasicAuth(conf.Cloud18GitUser, conf.GetDecryptedValue("cloud18-gitlab-password"), conf.LogGit)
1138+
personal_access_token, _ := githelper.GetGitLabTokenOAuth(acces_tok, conf.LogGit)
1139+
if personal_access_token != "" {
1140+
var Secrets config.Secret
1141+
Secrets.Value = personal_access_token
1142+
conf.Secrets["git-acces-token"] = Secrets
1143+
conf.GitUrl = conf.OAuthProvider + "/" + conf.Cloud18Domain + "/" + conf.Cloud18SubDomain + "-" + conf.Cloud18SubDomainZone + ".git"
1144+
conf.GitUsername = conf.Cloud18GitUser
1145+
conf.GitAccesToken = personal_access_token
1146+
conf.ImmuableFlagMap["git-url"] = conf.GitUrl
1147+
conf.ImmuableFlagMap["git-username"] = conf.GitUsername
1148+
conf.ImmuableFlagMap["git-acces-token"] = personal_access_token
1149+
conf.CloneConfigFromGit(conf.GitUrl, conf.GitUsername, conf.GitAccesToken, conf.WorkingDir)
1150+
conf.PushConfigToGit(conf.GitUrl, conf.GitAccesToken, conf.GitUsername, conf.WorkingDir, []string{})
1151+
//conf.GitAddReadMe(conf.GitUrl, conf.GitAccesToken, conf.GitUsername, conf.WorkingDir)
1152+
1153+
} else if conf.LogGit {
1154+
log.WithField("group", repman.ClusterList[cfgGroupIndex]).Infof("Could not get personal access token from gitlab")
11571155
}
11581156

1159-
cfgGroupIndex--
1160-
log.WithField("cluster", repman.ClusterList[cfgGroupIndex]).Debug("Default Cluster set")
1161-
1162-
} else {
1163-
//add default to the clusterlist if no cluster discover
1164-
repman.ClusterList = append(repman.ClusterList, "Default")
1165-
log.WithField("cluster", repman.ClusterList[cfgGroupIndex]).Debug("Default Cluster set")
1157+
}
11661158

1167-
confs["Default"] = conf
1159+
//add config from cluster to the config map
1160+
for _, cluster := range repman.ClusterList {
1161+
//vipersave := backupvipersave
1162+
confs[cluster] = repman.GetClusterConfig(fistRead, ImmuableMap, DynamicMap, cluster, conf)
1163+
cfgGroupIndex++
11681164

11691165
}
11701166

1167+
cfgGroupIndex--
1168+
log.WithField("cluster", repman.ClusterList[cfgGroupIndex]).Debug("Default Cluster set")
1169+
11711170
//fmt.Printf("%+v\n", fistRead.AllSettings())
11721171
repman.Confs = confs
11731172
repman.Conf = conf
@@ -1703,11 +1702,11 @@ func (repman *ReplicationManager) StartCluster(clusterName string) (*cluster.Clu
17031702
myClusterConf.ImmuableFlagMap = repman.ImmuableFlagMaps[clusterName]
17041703
myClusterConf.DynamicFlagMap = repman.DynamicFlagMaps[clusterName]
17051704
myClusterConf.DefaultFlagMap = repman.DefaultFlagMap
1705+
log.Infof("Starting cluster: %s workingdir %s", clusterName, myClusterConf.WorkingDir)
17061706

17071707
repman.VersionConfs[clusterName].ConfInit = myClusterConf
17081708
//log.Infof("Default config for %s workingdir:\n %v", clusterName, myClusterConf.DefaultFlagMap)
17091709

1710-
log.Infof("Starting cluster: %s workingdir %s", clusterName, myClusterConf.WorkingDir)
17111710
repman.currentCluster.Init(repman.VersionConfs[clusterName], clusterName, &repman.tlog, &repman.Logs, repman.termlength, repman.UUID, repman.Version, repman.Hostname)
17121711
repman.Clusters[clusterName] = repman.currentCluster
17131712
repman.currentCluster.SetCertificate(repman.OpenSVC)

0 commit comments

Comments
 (0)