func main() { defer exit.Recover() flag.Parse() servenv.Init() ts := topo.GetServer() defer topo.CloseServers() resilientSrvTopoServer = vtgate.NewResilientSrvTopoServer(ts, "ResilientSrvTopoServer") healthCheck = discovery.NewHealthCheck(*healthCheckConnTimeout, *healthCheckRetryDelay, *healthCheckTimeout) healthCheck.RegisterStats() tabletTypes := make([]topodatapb.TabletType, 0, 1) if len(*tabletTypesToWait) != 0 { for _, ttStr := range strings.Split(*tabletTypesToWait, ",") { tt, err := topoproto.ParseTabletType(ttStr) if err != nil { log.Errorf("unknown tablet type: %v", ttStr) continue } tabletTypes = append(tabletTypes, tt) } } l2vtg := l2vtgate.Init(healthCheck, ts, resilientSrvTopoServer, *cell, *retryCount, tabletTypes) servenv.OnRun(func() { addStatusParts(l2vtg) }) servenv.RunDefault() }
// TestL2VTGateDiscovery tests the l2vtgate gateway with a gRPC // connection from the gateway to a l2vtgate in-process object. func TestL2VTGateDiscovery(t *testing.T) { flag.Set("tablet_protocol", "grpc") flag.Set("gateway_implementation", "discoverygateway") // Fake services for the tablet, topo server. service, ts, cell := CreateFakeServers(t) // Tablet: listen on a random port. listener, err := net.Listen("tcp", ":0") if err != nil { t.Fatalf("Cannot listen: %v", err) } host := listener.Addr().(*net.TCPAddr).IP.String() port := listener.Addr().(*net.TCPAddr).Port defer listener.Close() // Tablet: create a gRPC server and listen on the port. server := grpc.NewServer() grpcqueryservice.Register(server, service) go server.Serve(listener) defer server.Stop() // L2VTGate: Create the discovery healthcheck, and the gateway. // Wait for the right tablets to be present. hc := discovery.NewHealthCheck(30*time.Second, 10*time.Second, 2*time.Minute) l2vtgate := l2vtgate.Init(hc, ts, ts, "", cell, 2, nil) hc.AddTablet(&topodatapb.Tablet{ Alias: &topodatapb.TabletAlias{ Cell: cell, Uid: 44, }, Keyspace: tabletconntest.TestTarget.Keyspace, Shard: tabletconntest.TestTarget.Shard, Type: tabletconntest.TestTarget.TabletType, Hostname: host, PortMap: map[string]int32{ "grpc": int32(port), }, }, "test_tablet") ctx := context.Background() err = l2vtgate.Gateway().WaitForTablets(ctx, []topodatapb.TabletType{tabletconntest.TestTarget.TabletType}) if err != nil { t.Fatalf("WaitForAllServingTablets failed: %v", err) } // L2VTGate: listen on a random port. listener, err = net.Listen("tcp", ":0") if err != nil { t.Fatalf("Cannot listen: %v", err) } defer listener.Close() // L2VTGate: create a gRPC server and listen on the port. server = grpc.NewServer() grpcqueryservice.Register(server, l2vtgate) go server.Serve(listener) defer server.Stop() // VTGate: create the l2vtgate gateway flag.Set("gateway_implementation", "l2vtgategateway") flag.Set("l2vtgategateway_addrs", fmt.Sprintf("%v|%v|%v", listener.Addr().String(), tabletconntest.TestTarget.Keyspace, tabletconntest.TestTarget.Shard)) lg := gateway.GetCreator()(nil, ts, nil, "", 2) defer lg.Close(ctx) // and run the test suite. TestSuite(t, "l2vtgate-grpc", lg, service) }