forwarder: avoid to disable direct forwarder

This commit is contained in:
nadoo 2020-05-02 21:49:30 +08:00
parent a9a1985a4b
commit 2fe9c3990b
4 changed files with 11 additions and 6 deletions

View File

@ -21,6 +21,7 @@ func initPools(sizes []int) []sync.Pool {
return pools return pools
} }
// GetBuffer returns a buffer from pool.
func GetBuffer(size int) []byte { func GetBuffer(size int) []byte {
i := 0 i := 0
for ; i < len(bufSizes)-1; i++ { for ; i < len(bufSizes)-1; i++ {
@ -31,6 +32,7 @@ func GetBuffer(size int) []byte {
return bufPools[i].Get().([]byte)[:size] return bufPools[i].Get().([]byte)[:size]
} }
// PutBuffer puts a buffer into pool.
func PutBuffer(p []byte) { func PutBuffer(p []byte) {
l := len(p) l := len(p)
for i, n := range bufSizes { for i, n := range bufSizes {

View File

@ -9,10 +9,12 @@ var writeBufPool = sync.Pool{
New: func() interface{} { return &bytes.Buffer{} }, New: func() interface{} { return &bytes.Buffer{} },
} }
// GetWriteBuffer returns a bytes.buffer from pool.
func GetWriteBuffer() *bytes.Buffer { func GetWriteBuffer() *bytes.Buffer {
return writeBufPool.Get().(*bytes.Buffer) return writeBufPool.Get().(*bytes.Buffer)
} }
// PutWriteBuffer puts a bytes.buffer into pool.
func PutWriteBuffer(buf *bytes.Buffer) { func PutWriteBuffer(buf *bytes.Buffer) {
if buf.Cap() > 64<<10 { if buf.Cap() > 64<<10 {
return return

View File

@ -114,10 +114,10 @@ func (f *Forwarder) Failures() uint32 {
// IncFailures increase the failuer count by 1 // IncFailures increase the failuer count by 1
func (f *Forwarder) IncFailures() { func (f *Forwarder) IncFailures() {
failures := atomic.AddUint32(&f.failures, 1) 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() { if f.MaxFailures() != 0 && failures >= f.MaxFailures() && f.Enabled() {
log.F("[forwarder] %s reaches maxfailures.", f.addr) log.F("[forwarder] %s reaches maxfailures %d", f.addr, f.MaxFailures())
f.Disable() f.Disable()
} }
} }

View File

@ -130,12 +130,13 @@ func (p *Proxy) Record(dialer proxy.Dialer, success bool) {
OnRecord(dialer, success) OnRecord(dialer, success)
} }
// OnRecord records result while using the dialer from proxy.
func OnRecord(dialer proxy.Dialer, success bool) { func OnRecord(dialer proxy.Dialer, success bool) {
if fwdr, ok := dialer.(*Forwarder); ok { if fwdr, ok := dialer.(*Forwarder); ok {
if success { if !success {
fwdr.Enable()
} else {
fwdr.IncFailures() fwdr.IncFailures()
} else {
fwdr.Enable()
} }
} }
} }