Skip to content

Commit bdb958e

Browse files
committed
Avoid possible deadlock with wait if failover
1 parent de131e3 commit bdb958e

File tree

1 file changed

+37
-36
lines changed

1 file changed

+37
-36
lines changed

cluster/cluster.go

+37-36
Original file line numberDiff line numberDiff line change
@@ -604,46 +604,47 @@ func (cluster *Cluster) Run() {
604604
if !cluster.IsInFailover() {
605605
wg.Add(1)
606606
go cluster.refreshProxies(wg)
607-
}
608-
if cluster.StateMachine.SchemaMonitorEndTime+60 < time.Now().Unix() && !cluster.StateMachine.IsInSchemaMonitor() {
609-
go cluster.MonitorSchema()
610-
}
611-
if cluster.Conf.TestInjectTraffic || cluster.Conf.AutorejoinSlavePositionalHeartbeat || cluster.Conf.MonitorWriteHeartbeat {
612-
cluster.InjectProxiesTraffic()
613-
}
614-
if cluster.StateMachine.GetHeartbeats()%30 == 0 {
615-
go cluster.initOrchetratorNodes()
616-
cluster.MonitorQueryRules()
617-
cluster.MonitorVariablesDiff()
618-
go cluster.ResticFetchRepo()
619-
cluster.IsValidBackup = cluster.HasValidBackup()
620-
go cluster.CheckCredentialRotation()
621-
cluster.CheckCanSaveDynamicConfig()
622-
cluster.CheckIsOverwrite()
623607

624-
} else {
625-
cluster.StateMachine.PreserveState("WARN0093")
626-
cluster.StateMachine.PreserveState("WARN0084")
627-
cluster.StateMachine.PreserveState("WARN0095")
628-
cluster.StateMachine.PreserveState("WARN0101")
629-
cluster.StateMachine.PreserveState("ERR00090")
630-
cluster.StateMachine.PreserveState("WARN0102")
631-
}
632-
if !cluster.CanInitNodes {
633-
cluster.SetState("ERR00082", state.State{ErrType: "WARNING", ErrDesc: fmt.Sprintf(clusterError["ERR00082"], cluster.errorInitNodes), ErrFrom: "OPENSVC"})
634-
}
635-
if !cluster.CanConnectVault {
636-
cluster.SetState("ERR00089", state.State{ErrType: "WARNING", ErrDesc: fmt.Sprintf(clusterError["ERR00089"], cluster.errorConnectVault), ErrFrom: "OPENSVC"})
637-
}
608+
if cluster.StateMachine.SchemaMonitorEndTime+60 < time.Now().Unix() && !cluster.StateMachine.IsInSchemaMonitor() {
609+
go cluster.MonitorSchema()
610+
}
611+
if cluster.Conf.TestInjectTraffic || cluster.Conf.AutorejoinSlavePositionalHeartbeat || cluster.Conf.MonitorWriteHeartbeat {
612+
cluster.InjectProxiesTraffic()
613+
}
614+
if cluster.StateMachine.GetHeartbeats()%30 == 0 {
615+
go cluster.initOrchetratorNodes()
616+
cluster.MonitorQueryRules()
617+
cluster.MonitorVariablesDiff()
618+
go cluster.ResticFetchRepo()
619+
cluster.IsValidBackup = cluster.HasValidBackup()
620+
go cluster.CheckCredentialRotation()
621+
cluster.CheckCanSaveDynamicConfig()
622+
cluster.CheckIsOverwrite()
623+
624+
} else {
625+
cluster.StateMachine.PreserveState("WARN0093")
626+
cluster.StateMachine.PreserveState("WARN0084")
627+
cluster.StateMachine.PreserveState("WARN0095")
628+
cluster.StateMachine.PreserveState("WARN0101")
629+
cluster.StateMachine.PreserveState("ERR00090")
630+
cluster.StateMachine.PreserveState("WARN0102")
631+
}
632+
if !cluster.CanInitNodes {
633+
cluster.SetState("ERR00082", state.State{ErrType: "WARNING", ErrDesc: fmt.Sprintf(clusterError["ERR00082"], cluster.errorInitNodes), ErrFrom: "OPENSVC"})
634+
}
635+
if !cluster.CanConnectVault {
636+
cluster.SetState("ERR00089", state.State{ErrType: "WARNING", ErrDesc: fmt.Sprintf(clusterError["ERR00089"], cluster.errorConnectVault), ErrFrom: "OPENSVC"})
637+
}
638638

639-
if cluster.StateMachine.GetHeartbeats()%36000 == 0 {
640-
cluster.ResticPurgeRepo()
641-
} else {
642-
cluster.StateMachine.PreserveState("WARN0094")
639+
if cluster.StateMachine.GetHeartbeats()%36000 == 0 {
640+
cluster.ResticPurgeRepo()
641+
} else {
642+
cluster.StateMachine.PreserveState("WARN0094")
643+
}
644+
cluster.PrintDelayStat()
643645
}
644-
cluster.PrintDelayStat()
646+
wg.Wait()
645647
}
646-
wg.Wait()
647648
// AddChildServers can't be done before TopologyDiscover but need a refresh aquiring more fresh gtid vs current cluster so elelection win but server is ignored see electFailoverCandidate
648649
err := cluster.AddChildServers()
649650

0 commit comments

Comments
 (0)