Skip to content

Commit dcccdfc

Browse files
committed
Backport database connection to pref IP reverse DNS is set on constructor or connection failure
1 parent 6c87cf3 commit dcccdfc

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

cluster/error.go

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ var clusterError = map[string]string{
6767
"ERR00057": "Database duplicate users not allowed in proxysql %s",
6868
"ERR00058": "Sphinx connection error: %s",
6969
"ERR00059": "Ignored server %s not found in configured server list",
70+
"ERR00062": "DNS resolution for host %s error %s",
7071
"WARN0023": "Failover number of master pings failure has been reached",
7172
"WARN0045": "Provision task is in queue",
7273
"WARN0046": "Provision task is working",

cluster/srv.go

+20-10
Original file line numberDiff line numberDiff line change
@@ -165,31 +165,40 @@ func (cluster *Cluster) newServerMonitor(url string, user string, pass string, c
165165
server.Id = strconv.FormatUint(crc64.Checksum([]byte(server.URL), crcTable), 10)
166166
server.SetIgnored(cluster.IsInIgnoredHosts(server.URL))
167167
server.SetPrefered(cluster.IsInPreferedHosts(server.URL))
168+
server.setDSN()
169+
var err error
170+
server.Conn, err = sqlx.Open("mysql", server.DSN)
171+
172+
return server, err
173+
}
174+
175+
func (server *ServerMonitor) setDSN() {
176+
168177
var err error
169178
server.IP, err = dbhelper.CheckHostAddr(server.Host)
170179
if err != nil {
171-
errmsg := fmt.Errorf("ERROR: DNS resolution error for host %s", server.Host)
172-
return server, errmsg
180+
server.ClusterGroup.SetState("ERR00062", state.State{ErrType: LvlWarn, ErrDesc: fmt.Sprintf(clusterError["ERR00062"], server.Host, err.Error()), ErrFrom: "SRV"})
173181
}
174-
params := fmt.Sprintf("?timeout=%ds&readTimeout=%ds", cluster.conf.Timeout, cluster.conf.ReadTimeout)
182+
params := fmt.Sprintf("?timeout=%ds&readTimeout=%ds", server.ClusterGroup.conf.Timeout, server.ClusterGroup.conf.ReadTimeout)
175183

176184
mydsn := func() string {
177185
dsn := server.User + ":" + server.Pass + "@"
178186
if server.Host != "" {
179-
dsn += "tcp(" + server.Host + ":" + server.Port + ")/" + params
187+
if server.IP != "" {
188+
dsn += "tcp(" + server.IP + ":" + server.Port + ")/" + params
189+
} else {
190+
dsn += "tcp(" + server.Host + ":" + server.Port + ")/" + params
191+
}
180192
} else {
181-
dsn += "unix(" + cluster.conf.Socket + ")/" + params
193+
dsn += "unix(" + server.ClusterGroup.conf.Socket + ")/" + params
182194
}
183195
return dsn
184196
}
185197
server.DSN = mydsn()
186-
if cluster.haveDBTLSCert {
187-
mysql.RegisterTLSConfig("tlsconfig", cluster.tlsconf)
198+
if server.ClusterGroup.haveDBTLSCert {
199+
mysql.RegisterTLSConfig("tlsconfig", server.ClusterGroup.tlsconf)
188200
server.DSN = server.DSN + "&tls=tlsconfig"
189201
}
190-
server.Conn, err = sqlx.Open("mysql", server.DSN)
191-
192-
return server, err
193202
}
194203

195204
func (server *ServerMonitor) Ping(wg *sync.WaitGroup) {
@@ -223,6 +232,7 @@ func (server *ServerMonitor) Ping(wg *sync.WaitGroup) {
223232

224233
// Handle failure cases here
225234
if err != nil {
235+
server.setDSN()
226236
server.ClusterGroup.LogPrintf(LvlDbg, "Failure detection handling for server %s", server.URL)
227237
if driverErr, ok := err.(*mysql.MySQLError); ok {
228238
// access denied

0 commit comments

Comments
 (0)