mirror of
https://github.com/nadoo/glider.git
synced 2025-02-23 17:35:40 +08:00
parent
1789d97f00
commit
1204cf30fd
@ -41,7 +41,7 @@ type Proxy struct {
|
|||||||
index uint32
|
index uint32
|
||||||
priority uint32
|
priority uint32
|
||||||
|
|
||||||
nextForwarder func(addr string) *Forwarder
|
next func(addr string) *Forwarder
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewProxy returns a new strategy proxy.
|
// NewProxy returns a new strategy proxy.
|
||||||
@ -78,19 +78,19 @@ func newProxy(fwdrs []*Forwarder, c *Config) *Proxy {
|
|||||||
|
|
||||||
switch c.Strategy {
|
switch c.Strategy {
|
||||||
case "rr":
|
case "rr":
|
||||||
d.nextForwarder = d.scheduleRR
|
d.next = d.scheduleRR
|
||||||
log.F("[strategy] forward to remote servers in round robin mode.")
|
log.F("[strategy] forward to remote servers in round robin mode.")
|
||||||
case "ha":
|
case "ha":
|
||||||
d.nextForwarder = d.scheduleHA
|
d.next = d.scheduleHA
|
||||||
log.F("[strategy] forward to remote servers in high availability mode.")
|
log.F("[strategy] forward to remote servers in high availability mode.")
|
||||||
case "lha":
|
case "lha":
|
||||||
d.nextForwarder = d.scheduleLHA
|
d.next = d.scheduleLHA
|
||||||
log.F("[strategy] forward to remote servers in latency based high availability mode.")
|
log.F("[strategy] forward to remote servers in latency based high availability mode.")
|
||||||
case "dh":
|
case "dh":
|
||||||
d.nextForwarder = d.scheduleDH
|
d.next = d.scheduleDH
|
||||||
log.F("[strategy] forward to remote servers in destination hashing mode.")
|
log.F("[strategy] forward to remote servers in destination hashing mode.")
|
||||||
default:
|
default:
|
||||||
d.nextForwarder = d.scheduleRR
|
d.next = d.scheduleRR
|
||||||
log.F("[strategy] not supported forward mode '%s', use round robin mode.", c.Strategy)
|
log.F("[strategy] not supported forward mode '%s', use round robin mode.", c.Strategy)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,7 +118,19 @@ func (p *Proxy) NextDialer(dstAddr string) proxy.Dialer {
|
|||||||
p.mu.RLock()
|
p.mu.RLock()
|
||||||
defer p.mu.RUnlock()
|
defer p.mu.RUnlock()
|
||||||
|
|
||||||
return p.nextForwarder(dstAddr)
|
return p.NextForwarder(dstAddr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NextDialer returns the next dialer.
|
||||||
|
func (p *Proxy) NextForwarder(dstAddr string) *Forwarder {
|
||||||
|
p.mu.RLock()
|
||||||
|
defer p.mu.RUnlock()
|
||||||
|
|
||||||
|
if len(p.available) == 0 {
|
||||||
|
return p.fwdrs[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
return p.next(dstAddr)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Priority returns the active priority of dialer.
|
// Priority returns the active priority of dialer.
|
||||||
@ -146,8 +158,7 @@ func (p *Proxy) initAvailable() {
|
|||||||
if len(p.available) == 0 {
|
if len(p.available) == 0 {
|
||||||
// no available forwarders, set priority to 0 to check all forwarders in check func
|
// no available forwarders, set priority to 0 to check all forwarders in check func
|
||||||
p.SetPriority(0)
|
p.SetPriority(0)
|
||||||
log.F("[strategy] no available forwarders, just use: %s, please check your settings or network", p.fwdrs[0].Addr())
|
log.F("[strategy] no available forwarders, just use: %s, please check your config file or network settings", p.fwdrs[0].Addr())
|
||||||
p.available = append(p.available, p.fwdrs[0])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,9 +184,9 @@ func (p *Proxy) onStatusChanged(fwdr *Forwarder) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(p.available) == 0 {
|
// if len(p.available) == 0 {
|
||||||
p.initAvailable()
|
// p.initAvailable()
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check implements the Checker interface.
|
// Check implements the Checker interface.
|
||||||
|
Loading…
Reference in New Issue
Block a user