You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

pool.go 1.0 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package agent
  2. import (
  3. "fmt"
  4. sync "sync"
  5. )
  6. type PoolConfig struct {
  7. }
  8. type PoolClient struct {
  9. *Client
  10. owner *Pool
  11. }
  12. func (c *PoolClient) Close() {
  13. c.owner.Release(c)
  14. }
  15. type Pool struct {
  16. grpcCfg *PoolConfig
  17. shareds map[string]*PoolClient
  18. lock sync.Mutex
  19. }
  20. func NewPool(grpcCfg *PoolConfig) *Pool {
  21. return &Pool{
  22. grpcCfg: grpcCfg,
  23. shareds: make(map[string]*PoolClient),
  24. }
  25. }
  26. // 获取一个GRPC客户端。由于事先不能知道所有agent的GRPC配置信息,所以只能让调用者把建立连接所需的配置都传递进来,
  27. // Pool来决定要不要新建客户端。
  28. func (p *Pool) Acquire(ip string, port int) (*PoolClient, error) {
  29. addr := fmt.Sprintf("%s:%d", ip, port)
  30. p.lock.Lock()
  31. defer p.lock.Unlock()
  32. cli, ok := p.shareds[addr]
  33. if !ok {
  34. c, err := NewClient(addr)
  35. if err != nil {
  36. return nil, err
  37. }
  38. cli = &PoolClient{
  39. Client: c,
  40. owner: p,
  41. }
  42. p.shareds[addr] = cli
  43. }
  44. return cli, nil
  45. }
  46. func (p *Pool) Release(cli *PoolClient) {
  47. // TODO 释放长时间未使用的client
  48. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。