Skip to content

Commit 271622a

Browse files
committed
Fixing a case of standalone transit from failed to suspect to standalone not working on mysql
1 parent a6fe6c9 commit 271622a

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

cluster/srv.go

+9-7
Original file line numberDiff line numberDiff line change
@@ -454,11 +454,11 @@ func (server *ServerMonitor) Ping(wg *sync.WaitGroup) {
454454
// If we reached this stage with a previously failed server, reintroduce
455455
// it as unconnected server.master
456456
if server.PrevState == stateFailed || server.PrevState == stateErrorAuth /*|| server.PrevState == stateSuspect*/ {
457-
server.ClusterGroup.LogPrintf(LvlDbg, "State comparison reinitialized failed server %s as unconnected", server.URL)
458-
if server.ClusterGroup.Conf.ReadOnly && server.HaveWsrep == false && server.ClusterGroup.IsDiscovered() {
457+
server.ClusterGroup.LogPrintf(LvlInfo, "State changed, init failed server %s as unconnected", server.URL)
458+
if server.ClusterGroup.Conf.ReadOnly && !server.HaveWsrep && server.ClusterGroup.IsDiscovered() {
459459
//GetMaster abstract master for galera multi master and master slave
460460
if server.GetCluster().GetMaster() != nil {
461-
if server.ClusterGroup.Status == ConstMonitorActif && server.ClusterGroup.master.Id != server.Id && !server.ClusterGroup.IsInIgnoredReadonly(server) && !server.ClusterGroup.IsInFailover() {
461+
if server.ClusterGroup.Status == ConstMonitorActif && server.GetCluster().GetMaster().Id != server.Id && !server.ClusterGroup.IsInIgnoredReadonly(server) && !server.ClusterGroup.IsInFailover() {
462462
server.ClusterGroup.LogPrintf(LvlInfo, "Setting Read Only on unconnected server %s as active monitor and other master is discovered", server.URL)
463463
server.SetReadOnly()
464464
} else if server.ClusterGroup.Status == ConstMonitorStandby && server.ClusterGroup.Conf.Arbitration && !server.ClusterGroup.IsInIgnoredReadonly(server) && !server.ClusterGroup.IsInFailover() {
@@ -483,9 +483,9 @@ func (server *ServerMonitor) Ping(wg *sync.WaitGroup) {
483483
// Master will never get discovery in topology if it does not get unconnected first it default to suspect
484484
// if server.ClusterGroup.GetTopology() != topoMultiMasterWsrep {
485485
server.SetState(stateUnconn)
486-
server.ClusterGroup.LogPrintf(LvlDbg, "State unconnected set by non-master rule on server %s", server.URL)
486+
server.ClusterGroup.LogPrintf(LvlInfo, "From state %s to unconnected and non leader on server %s", server.PrevState, server.URL)
487487
// }
488-
if server.ClusterGroup.Conf.ReadOnly && server.HaveWsrep == false && server.ClusterGroup.IsDiscovered() && !server.ClusterGroup.IsInIgnoredReadonly(server) && !server.ClusterGroup.IsInFailover() {
488+
if server.ClusterGroup.Conf.ReadOnly && !server.HaveWsrep && server.ClusterGroup.IsDiscovered() && !server.ClusterGroup.IsInIgnoredReadonly(server) && !server.ClusterGroup.IsInFailover() {
489489
server.ClusterGroup.LogPrintf(LvlInfo, "Setting Read Only on unconnected server: %s no master state and replication found", server.URL)
490490
server.SetReadOnly()
491491
}
@@ -494,10 +494,12 @@ func (server *ServerMonitor) Ping(wg *sync.WaitGroup) {
494494
server.ClusterGroup.backendStateChangeProxies()
495495
server.SendAlert()
496496
}
497+
} else if server.GetCluster().GetMaster() != nil && server.GetCluster().GetMaster().Id != server.Id && server.PrevState == stateSuspect && !server.HaveWsrep && server.ClusterGroup.IsDiscovered() && !server.ClusterGroup.IsInFailover() {
498+
// a case of a standalone transite to suspect but never get to standalone back
499+
server.SetState(stateUnconn)
497500
}
498-
499501
} else if server.ClusterGroup.IsActive() && errss == nil && (server.PrevState == stateFailed) {
500-
502+
// Is Slave
501503
server.rejoinSlave(ss)
502504
}
503505

0 commit comments

Comments
 (0)