5824: Move client pool to SDK.
[arvados.git] / sdk / go / arvadosclient / pool.go
1 package arvadosclient
2
3 import (
4         "sync"
5 )
6
7 type ClientPool struct {
8         sync.Pool
9         lastErr error
10 }
11
12 func MakeClientPool() *ClientPool {
13         p := &ClientPool{}
14         p.Pool = sync.Pool{New: func() interface{} {
15                 arv, err := MakeArvadosClient()
16                 if err != nil {
17                         p.lastErr = err
18                         return nil
19                 }
20                 return &arv
21         }}
22         return p
23 }
24
25 func (p *ClientPool) Err() error {
26         return p.lastErr
27 }
28
29 func (p *ClientPool) Get() *ArvadosClient {
30         c, ok := p.Pool.Get().(*ArvadosClient)
31         if !ok {
32                 return nil
33         }
34         return c
35 }
36
37 func (p *ClientPool) Put(c *ArvadosClient) {
38         p.Pool.Put(c)
39 }