mirror of
https://github.com/nadoo/glider.git
synced 2025-02-23 17:35:40 +08:00
forwarder: avoid to disable direct forwarder
This commit is contained in:
parent
a9a1985a4b
commit
2fe9c3990b
@ -21,6 +21,7 @@ func initPools(sizes []int) []sync.Pool {
|
||||
return pools
|
||||
}
|
||||
|
||||
// GetBuffer returns a buffer from pool.
|
||||
func GetBuffer(size int) []byte {
|
||||
i := 0
|
||||
for ; i < len(bufSizes)-1; i++ {
|
||||
@ -31,6 +32,7 @@ func GetBuffer(size int) []byte {
|
||||
return bufPools[i].Get().([]byte)[:size]
|
||||
}
|
||||
|
||||
// PutBuffer puts a buffer into pool.
|
||||
func PutBuffer(p []byte) {
|
||||
l := len(p)
|
||||
for i, n := range bufSizes {
|
||||
|
@ -9,10 +9,12 @@ var writeBufPool = sync.Pool{
|
||||
New: func() interface{} { return &bytes.Buffer{} },
|
||||
}
|
||||
|
||||
// GetWriteBuffer returns a bytes.buffer from pool.
|
||||
func GetWriteBuffer() *bytes.Buffer {
|
||||
return writeBufPool.Get().(*bytes.Buffer)
|
||||
}
|
||||
|
||||
// PutWriteBuffer puts a bytes.buffer into pool.
|
||||
func PutWriteBuffer(buf *bytes.Buffer) {
|
||||
if buf.Cap() > 64<<10 {
|
||||
return
|
||||
|
@ -114,10 +114,10 @@ func (f *Forwarder) Failures() uint32 {
|
||||
// IncFailures increase the failuer count by 1
|
||||
func (f *Forwarder) IncFailures() {
|
||||
failures := atomic.AddUint32(&f.failures, 1)
|
||||
log.F("[forwarder] %s recorded %d failures", f.addr, failures)
|
||||
log.F("[forwarder] %s recorded %d failures, maxfailures: %d", f.addr, failures, f.MaxFailures())
|
||||
|
||||
if failures >= f.MaxFailures() && f.Enabled() {
|
||||
log.F("[forwarder] %s reaches maxfailures.", f.addr)
|
||||
if f.MaxFailures() != 0 && failures >= f.MaxFailures() && f.Enabled() {
|
||||
log.F("[forwarder] %s reaches maxfailures %d", f.addr, f.MaxFailures())
|
||||
f.Disable()
|
||||
}
|
||||
}
|
||||
|
@ -130,12 +130,13 @@ func (p *Proxy) Record(dialer proxy.Dialer, success bool) {
|
||||
OnRecord(dialer, success)
|
||||
}
|
||||
|
||||
// OnRecord records result while using the dialer from proxy.
|
||||
func OnRecord(dialer proxy.Dialer, success bool) {
|
||||
if fwdr, ok := dialer.(*Forwarder); ok {
|
||||
if success {
|
||||
fwdr.Enable()
|
||||
} else {
|
||||
if !success {
|
||||
fwdr.IncFailures()
|
||||
} else {
|
||||
fwdr.Enable()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user