5824: Move client pool to SDK.
[arvados.git] / sdk / go / arvadosclient / pool.go
diff --git a/sdk/go/arvadosclient/pool.go b/sdk/go/arvadosclient/pool.go
new file mode 100644 (file)
index 0000000..1c5893a
--- /dev/null
@@ -0,0 +1,39 @@
+package arvadosclient
+
+import (
+       "sync"
+)
+
+type ClientPool struct {
+       sync.Pool
+       lastErr error
+}
+
+func MakeClientPool() *ClientPool {
+       p := &ClientPool{}
+       p.Pool = sync.Pool{New: func() interface{} {
+               arv, err := MakeArvadosClient()
+               if err != nil {
+                       p.lastErr = err
+                       return nil
+               }
+               return &arv
+       }}
+       return p
+}
+
+func (p *ClientPool) Err() error {
+       return p.lastErr
+}
+
+func (p *ClientPool) Get() *ArvadosClient {
+       c, ok := p.Pool.Get().(*ArvadosClient)
+       if !ok {
+               return nil
+       }
+       return c
+}
+
+func (p *ClientPool) Put(c *ArvadosClient) {
+       p.Pool.Put(c)
+}