add rudp
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
package chain
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/go-gost/gost/pkg/bypass"
|
||||
@ -86,8 +86,7 @@ func (g *NodeGroup) Next() *Node {
|
||||
|
||||
type FailMarker struct {
|
||||
failTime int64
|
||||
failCount uint32
|
||||
mux sync.RWMutex
|
||||
failCount int64
|
||||
}
|
||||
|
||||
func (m *FailMarker) FailTime() int64 {
|
||||
@ -95,21 +94,15 @@ func (m *FailMarker) FailTime() int64 {
|
||||
return 0
|
||||
}
|
||||
|
||||
m.mux.RLock()
|
||||
defer m.mux.RUnlock()
|
||||
|
||||
return m.failTime
|
||||
return atomic.LoadInt64(&m.failCount)
|
||||
}
|
||||
|
||||
func (m *FailMarker) FailCount() uint32 {
|
||||
func (m *FailMarker) FailCount() int64 {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
|
||||
m.mux.RLock()
|
||||
defer m.mux.RUnlock()
|
||||
|
||||
return m.failCount
|
||||
return atomic.LoadInt64(&m.failCount)
|
||||
}
|
||||
|
||||
func (m *FailMarker) Mark() {
|
||||
@ -117,11 +110,8 @@ func (m *FailMarker) Mark() {
|
||||
return
|
||||
}
|
||||
|
||||
m.mux.Lock()
|
||||
defer m.mux.Unlock()
|
||||
|
||||
m.failTime = time.Now().Unix()
|
||||
m.failCount++
|
||||
atomic.AddInt64(&m.failCount, 1)
|
||||
atomic.StoreInt64(&m.failTime, time.Now().Unix())
|
||||
}
|
||||
|
||||
func (m *FailMarker) Reset() {
|
||||
@ -129,9 +119,5 @@ func (m *FailMarker) Reset() {
|
||||
return
|
||||
}
|
||||
|
||||
m.mux.Lock()
|
||||
defer m.mux.Unlock()
|
||||
|
||||
m.failTime = 0
|
||||
m.failCount = 0
|
||||
atomic.StoreInt64(&m.failCount, 0)
|
||||
}
|
||||
|
@ -11,7 +11,6 @@ import (
|
||||
|
||||
// default options for FailFilter
|
||||
const (
|
||||
DefaultMaxFails = 1
|
||||
DefaultFailTimeout = 30 * time.Second
|
||||
)
|
||||
|
||||
@ -128,20 +127,17 @@ func FailFilter(maxFails int, timeout time.Duration) Filter {
|
||||
// Filter filters dead nodes.
|
||||
func (f *failFilter) Filter(nodes ...*Node) []*Node {
|
||||
maxFails := f.maxFails
|
||||
if maxFails == 0 {
|
||||
maxFails = DefaultMaxFails
|
||||
}
|
||||
failTimeout := f.failTimeout
|
||||
if failTimeout == 0 {
|
||||
failTimeout = DefaultFailTimeout
|
||||
}
|
||||
|
||||
if len(nodes) <= 1 || maxFails < 0 {
|
||||
if len(nodes) <= 1 || maxFails <= 0 {
|
||||
return nodes
|
||||
}
|
||||
var nl []*Node
|
||||
for _, node := range nodes {
|
||||
if node.Marker().FailCount() < uint32(maxFails) ||
|
||||
if node.Marker().FailCount() < int64(maxFails) ||
|
||||
time.Since(time.Unix(node.Marker().FailTime(), 0)) >= failTimeout {
|
||||
nl = append(nl, node)
|
||||
}
|
||||
|
Reference in New Issue
Block a user