func (client *Client) dialPool(tablet *topodatapb.Tablet) (tabletmanagerservicepb.TabletManagerClient, error) { addr := netutil.JoinHostPort(tablet.Hostname, int32(tablet.PortMap["grpc"])) opt, err := grpcutils.ClientSecureDialOption(*cert, *key, *ca, *name) if err != nil { return nil, err } client.mu.Lock() if client.rpcClientMap == nil { client.rpcClientMap = make(map[string]chan *tmc) } c, ok := client.rpcClientMap[addr] if !ok { c = make(chan *tmc, *concurrency) client.rpcClientMap[addr] = c client.mu.Unlock() for i := 0; i < cap(c); i++ { cc, err := grpc.Dial(addr, opt) if err != nil { return nil, err } c <- &tmc{ cc: cc, client: tabletmanagerservicepb.NewTabletManagerClient(cc), } } } else { client.mu.Unlock() } result := <-c c <- result return result.client, nil }
// dial returns a client to use func (client *Client) dial(tablet *topodatapb.Tablet) (*grpc.ClientConn, tabletmanagerservicepb.TabletManagerClient, error) { addr := netutil.JoinHostPort(tablet.Hostname, int32(tablet.PortMap["grpc"])) opt, err := grpcutils.ClientSecureDialOption(*cert, *key, *ca, *name) if err != nil { return nil, nil, err } cc, err := grpc.Dial(addr, opt) if err != nil { return nil, nil, err } return cc, tabletmanagerservicepb.NewTabletManagerClient(cc), nil }
// dial returns a client to use func (client *Client) dial(ctx context.Context, tablet *topo.TabletInfo) (*grpc.ClientConn, pbs.TabletManagerClient, error) { // create the RPC client, using ctx.Deadline if set, or no timeout. var connectTimeout time.Duration deadline, ok := ctx.Deadline() if ok { connectTimeout = deadline.Sub(time.Now()) if connectTimeout < 0 { return nil, nil, timeoutError{fmt.Errorf("timeout connecting to TabletManager on %v", tablet.Alias)} } } var cc *grpc.ClientConn var err error addr := netutil.JoinHostPort(tablet.Hostname, tablet.Portmap["grpc"]) if connectTimeout == 0 { cc, err = grpc.Dial(addr, grpc.WithBlock()) } else { cc, err = grpc.Dial(addr, grpc.WithBlock(), grpc.WithTimeout(connectTimeout)) } if err != nil { return nil, nil, err } return cc, pbs.NewTabletManagerClient(cc), nil }