cubefs
37 строк · 667.0 Байт
1package hystrix
2
3type executorPool struct {
4Name string
5Metrics *poolMetrics
6Max int
7Tickets chan *struct{}
8}
9
10func newExecutorPool(name string) *executorPool {
11p := &executorPool{}
12p.Name = name
13p.Metrics = newPoolMetrics(name)
14p.Max = getSettings(name).MaxConcurrentRequests
15
16p.Tickets = make(chan *struct{}, p.Max)
17for i := 0; i < p.Max; i++ {
18p.Tickets <- &struct{}{}
19}
20
21return p
22}
23
24func (p *executorPool) Return(ticket *struct{}) {
25if ticket == nil {
26return
27}
28
29p.Metrics.Updates <- poolMetricsUpdate{
30activeCount: p.ActiveCount(),
31}
32p.Tickets <- ticket
33}
34
35func (p *executorPool) ActiveCount() int {
36return p.Max - len(p.Tickets)
37}
38