@@ -165,31 +165,40 @@ func (cluster *Cluster) newServerMonitor(url string, user string, pass string, c
165
165
server .Id = strconv .FormatUint (crc64 .Checksum ([]byte (server .URL ), crcTable ), 10 )
166
166
server .SetIgnored (cluster .IsInIgnoredHosts (server .URL ))
167
167
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
+
168
177
var err error
169
178
server .IP , err = dbhelper .CheckHostAddr (server .Host )
170
179
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" })
173
181
}
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 )
175
183
176
184
mydsn := func () string {
177
185
dsn := server .User + ":" + server .Pass + "@"
178
186
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
+ }
180
192
} else {
181
- dsn += "unix(" + cluster .conf .Socket + ")/" + params
193
+ dsn += "unix(" + server . ClusterGroup .conf .Socket + ")/" + params
182
194
}
183
195
return dsn
184
196
}
185
197
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 )
188
200
server .DSN = server .DSN + "&tls=tlsconfig"
189
201
}
190
- server .Conn , err = sqlx .Open ("mysql" , server .DSN )
191
-
192
- return server , err
193
202
}
194
203
195
204
func (server * ServerMonitor ) Ping (wg * sync.WaitGroup ) {
@@ -223,6 +232,7 @@ func (server *ServerMonitor) Ping(wg *sync.WaitGroup) {
223
232
224
233
// Handle failure cases here
225
234
if err != nil {
235
+ server .setDSN ()
226
236
server .ClusterGroup .LogPrintf (LvlDbg , "Failure detection handling for server %s" , server .URL )
227
237
if driverErr , ok := err .(* mysql.MySQLError ); ok {
228
238
// access denied
0 commit comments