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
|
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 {
|
||||||
|
@ -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
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user