arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
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}