mirror of
https://github.com/cwinfo/yggdrasil-go.git
synced 2024-11-09 23:20:28 +00:00
when dropping a queue, select one at random based on queue size in bytes
This commit is contained in:
parent
1a65c065d0
commit
e6a47f705d
@ -12,6 +12,7 @@ package yggdrasil
|
||||
// A little annoying to do with constant changes from backpressure
|
||||
|
||||
import (
|
||||
"math/rand"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
@ -624,7 +625,13 @@ func (b *switch_buffers) cleanup(t *switchTable) {
|
||||
const maxSize = 4 * 1048576 // Maximum 4 MB
|
||||
for b.size > maxSize {
|
||||
// Drop a random queue
|
||||
for streamID := range b.bufs {
|
||||
target := rand.Uint64() % b.size
|
||||
var size uint64 // running total
|
||||
for streamID, buf := range b.bufs {
|
||||
size += buf.size
|
||||
if size < target {
|
||||
continue
|
||||
}
|
||||
remove(streamID)
|
||||
break
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user