hermez-node/coordinator/proverspool.go
coordinator/proverspool.goRaw
1package coordinator
2
3import (
4 "context"
5
6 "github.com/hermeznetwork/hermez-node/common"
7 "github.com/hermeznetwork/hermez-node/log"
8 "github.com/hermeznetwork/hermez-node/prover"
9 "github.com/hermeznetwork/tracerr"
10)
11
12// ProversPool contains the multiple prover clients
13type ProversPool struct {
14 pool chan prover.Client
15}
16
17// NewProversPool creates a new pool of provers.
18func NewProversPool(maxServerProofs int) *ProversPool {
19 return &ProversPool{
20 pool: make(chan prover.Client, maxServerProofs),
21 }
22}
23
24// Add a prover to the pool
25func (p *ProversPool) Add(ctx context.Context, serverProof prover.Client) {
26 select {
27 case p.pool <- serverProof:
28 case <-ctx.Done():
29 }
30}
31
32// Get returns the next available prover
33func (p *ProversPool) Get(ctx context.Context) (prover.Client, error) {
34 select {
35 case <-ctx.Done():
36 log.Info("ServerProofPool.Get done")
37 return nil, tracerr.Wrap(common.ErrDone)
38 case serverProof := <-p.pool:
39 return serverProof, nil
40 }
41}