in lib/torrent/scheduler/buckets.go [43:92]
func init() {
xs := newBucket("xsmall", 0)
xs.addRange(250*time.Millisecond, time.Second, 250*time.Millisecond)
xs.addRange(time.Second, 20*time.Second, time.Second)
xs.addRange(20*time.Second, time.Minute, 5*time.Second)
xs.addRange(time.Minute, 5*time.Minute, time.Minute)
xs.addRange(5*time.Minute, 30*time.Minute, 5*time.Minute)
_buckets = append(_buckets, xs)
s := newBucket("small", 100*memsize.MB)
s.addRange(time.Second, 30*time.Second, time.Second)
s.addRange(30*time.Second, time.Minute, 5*time.Second)
s.addRange(time.Minute, 5*time.Minute, time.Minute)
s.addRange(5*time.Minute, 30*time.Minute, 5*time.Minute)
_buckets = append(_buckets, s)
m := newBucket("medium", memsize.GB)
m.addRange(2*time.Second, time.Minute, 2*time.Second)
m.addRange(time.Minute, 2*time.Minute, 5*time.Second)
m.addRange(2*time.Minute, 5*time.Minute, 30*time.Second)
m.addRange(5*time.Minute, 10*time.Minute, time.Minute)
m.addRange(10*time.Minute, 30*time.Minute, 5*time.Minute)
_buckets = append(_buckets, m)
l := newBucket("large", 2*memsize.GB)
l.addRange(5*time.Second, 3*time.Minute, 5*time.Second)
l.addRange(3*time.Minute, 5*time.Minute, 30*time.Second)
l.addRange(5*time.Minute, 10*time.Minute, time.Minute)
l.addRange(10*time.Minute, 30*time.Minute, 5*time.Minute)
_buckets = append(_buckets, l)
xl := newBucket("xlarge", 5*memsize.GB)
xl.addRange(10*time.Second, 5*time.Minute, 10*time.Second)
xl.addRange(5*time.Minute, 10*time.Minute, 30*time.Second)
xl.addRange(10*time.Minute, 30*time.Minute, time.Minute)
_buckets = append(_buckets, xl)
xxl := newBucket("xxlarge", 10*memsize.GB)
xxl.addRange(15*time.Second, 10*time.Minute, 15*time.Second)
xxl.addRange(10*time.Minute, 15*time.Minute, 30*time.Second)
xxl.addRange(15*time.Minute, 30*time.Minute, time.Minute)
_buckets = append(_buckets, xxl)
// Sanity check to ensure buckets are sorted.
for i := 0; i < len(_buckets)-1; i++ {
if _buckets[i].min >= _buckets[i+1].min {
panic("buckets are not sorted properly")
}
}
}