fix: problem that disable l4proto+ipversion when single node is down

This commit is contained in:
mzz2017
2023-02-08 22:43:28 +08:00
committed by mzz
parent 00b8c6079e
commit f3e3ae2ae7
6 changed files with 40 additions and 20 deletions

View File

@ -111,16 +111,14 @@ func (a *AliveDialerSet) SetAlive(dialer *Dialer, alive bool) {
if index >= 0 {
// This dialer is already alive.
} else {
// Not alive -> alive.
defer a.aliveChangeCallback(true)
// Dialer: not alive -> alive.
a.dialerToIndex[dialer] = len(a.inorderedAliveDialerSet)
a.inorderedAliveDialerSet = append(a.inorderedAliveDialerSet, dialer)
}
} else {
index := a.dialerToIndex[dialer]
if index >= 0 {
// Alive -> not alive.
defer a.aliveChangeCallback(false)
// Dialer: alive -> not alive.
// Remove the dialer from inorderedAliveDialerSet.
if index >= len(a.inorderedAliveDialerSet) {
a.log.Panicf("index:%v >= len(a.inorderedAliveDialerSet):%v", index, len(a.inorderedAliveDialerSet))
@ -158,16 +156,22 @@ func (a *AliveDialerSet) SetAlive(dialer *Dialer, alive bool) {
}
if a.minLatency.dialer != oldBestDialer {
if a.minLatency.dialer != nil {
re := "re-"
if oldBestDialer == nil {
defer a.aliveChangeCallback(true)
re = ""
}
a.log.WithFields(logrus.Fields{
string(a.selectionPolicy): a.minLatency.latency,
"group": a.dialerGroupName,
"l4proto": a.l4proto,
"network": string(a.l4proto) + string(a.ipversion),
"dialer": a.minLatency.dialer.Name(),
}).Infof("Group re-selects dialer")
}).Infof("Group %vselects dialer", re)
} else {
defer a.aliveChangeCallback(false)
a.log.WithFields(logrus.Fields{
"group": a.dialerGroupName,
"l4proto": a.l4proto,
"network": string(a.l4proto) + string(a.ipversion),
}).Infof("Group has no dialer alive")
}
}
@ -177,7 +181,7 @@ func (a *AliveDialerSet) SetAlive(dialer *Dialer, alive bool) {
a.minLatency.dialer = dialer
a.log.WithFields(logrus.Fields{
"group": a.dialerGroupName,
"l4proto": a.l4proto,
"network": string(a.l4proto) + string(a.ipversion),
"dialer": a.minLatency.dialer.Name(),
}).Infof("Group selects dialer")
}

View File

@ -261,6 +261,9 @@ func (d *Dialer) Check(timeout time.Duration,
} else {
// Append timeout if there is any error or unexpected status code.
if err != nil {
if strings.Contains(err.Error(), "network is unreachable") {
err = fmt.Errorf("network is unreachable")
}
d.Log.WithFields(logrus.Fields{
// Add a space to ensure alphabetical order is first.
"network": string(opts.L4proto) + string(opts.IpVersion),

View File

@ -125,7 +125,7 @@ func (g *DialerGroup) Select(l4proto consts.L4ProtoStr, ipversion consts.IpVersi
if d == nil {
// No alive dialer.
g.log.WithFields(logrus.Fields{
"l4proto": l4proto,
"network": string(l4proto) + string(ipversion),
"group": g.Name,
}).Warnf("No alive dialer in DialerGroup, use \"block\".")
return g.block, nil
@ -143,7 +143,7 @@ func (g *DialerGroup) Select(l4proto consts.L4ProtoStr, ipversion consts.IpVersi
if d == nil {
// No alive dialer.
g.log.WithFields(logrus.Fields{
"l4proto": l4proto,
"network": string(l4proto) + string(ipversion),
"group": g.Name,
}).Warnf("No alive dialer in DialerGroup, use \"block\".")
return g.block, nil