mirror of
https://github.com/nadoo/glider.git
synced 2025-02-23 17:35:40 +08:00
strategy: do not check forwarders whose priority less than current value
This commit is contained in:
parent
b5b7f2998b
commit
e0c07146dc
@ -19,7 +19,7 @@ type Forwarder struct {
|
||||
latency int
|
||||
}
|
||||
|
||||
// ForwarderFromURL returns a new forwarder
|
||||
// ForwarderFromURL parses `forward=` command line and returns a new forwarder
|
||||
func ForwarderFromURL(s string) (f *Forwarder, err error) {
|
||||
ss := strings.Split(s, "#")
|
||||
var d Dialer
|
||||
@ -38,7 +38,7 @@ func ForwarderFromURL(s string) (f *Forwarder, err error) {
|
||||
return f, err
|
||||
}
|
||||
|
||||
// NewForwarder .
|
||||
// NewForwarder returns a new forwarder
|
||||
func NewForwarder(dialer Dialer) *Forwarder {
|
||||
return &Forwarder{Dialer: dialer, addr: dialer.Addr()}
|
||||
}
|
||||
@ -83,18 +83,18 @@ func (f *Forwarder) Failures() uint32 {
|
||||
return atomic.LoadUint32(&f.failures)
|
||||
}
|
||||
|
||||
// Enable .
|
||||
// Enable the forwarder
|
||||
func (f *Forwarder) Enable() {
|
||||
atomic.StoreUint32(&f.disabled, 0)
|
||||
atomic.StoreUint32(&f.failures, 0)
|
||||
}
|
||||
|
||||
// Disable .
|
||||
// Disable the forwarder
|
||||
func (f *Forwarder) Disable() {
|
||||
atomic.StoreUint32(&f.disabled, 1)
|
||||
}
|
||||
|
||||
// Enabled .
|
||||
// Enabled returns the status of forwarder
|
||||
func (f *Forwarder) Enabled() bool {
|
||||
return !isTrue(atomic.LoadUint32(&f.disabled))
|
||||
}
|
||||
|
@ -77,7 +77,12 @@ type rrDialer struct {
|
||||
// newRRDialer returns a new rrDialer
|
||||
func newRRDialer(fs []*proxy.Forwarder, website string, interval int) *rrDialer {
|
||||
rr := &rrDialer{fwdrs: fs}
|
||||
|
||||
rr.website = website
|
||||
if strings.IndexByte(rr.website, ':') == -1 {
|
||||
rr.website += ":80"
|
||||
}
|
||||
|
||||
rr.interval = interval
|
||||
|
||||
sort.Sort(rr.fwdrs)
|
||||
@ -143,16 +148,18 @@ func (rr *rrDialer) checkDialer(idx int) {
|
||||
retry := 1
|
||||
buf := make([]byte, 4)
|
||||
|
||||
if strings.IndexByte(rr.website, ':') == -1 {
|
||||
rr.website = rr.website + ":80"
|
||||
}
|
||||
|
||||
d := rr.fwdrs[idx]
|
||||
|
||||
for {
|
||||
time.Sleep(time.Duration(rr.interval) * time.Second * time.Duration(retry>>1))
|
||||
retry <<= 1
|
||||
|
||||
time.Sleep(time.Duration(rr.interval) * time.Second * time.Duration(retry>>1))
|
||||
|
||||
// check forwarders whose priority not less than current priority only
|
||||
if d.Priority < rr.priority {
|
||||
continue
|
||||
}
|
||||
|
||||
retry <<= 1
|
||||
if retry > 16 {
|
||||
retry = 16
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user