| 419 | } |
| 420 | |
| 421 | private void startLbRpc() { |
| 422 | checkState(lbStream == null, "previous lbStream has not been cleared yet"); |
| 423 | LoadBalancerGrpc.LoadBalancerStub stub = LoadBalancerGrpc.newStub(lbCommChannel); |
| 424 | lbStream = new LbStream(stub); |
| 425 | Context prevContext = context.attach(); |
| 426 | try { |
| 427 | lbStream.start(); |
| 428 | } finally { |
| 429 | context.detach(prevContext); |
| 430 | } |
| 431 | stopwatch.reset().start(); |
| 432 | |
| 433 | LoadBalanceRequest initRequest = LoadBalanceRequest.newBuilder() |
| 434 | .setInitialRequest(InitialLoadBalanceRequest.newBuilder() |
| 435 | .setName(serviceName).build()) |
| 436 | .build(); |
| 437 | logger.log( |
| 438 | ChannelLogLevel.DEBUG, |
| 439 | "[grpclb-<{0}>] Sent initial grpclb request {1}", serviceName, initRequest); |
| 440 | try { |
| 441 | lbStream.lbRequestWriter.onNext(initRequest); |
| 442 | } catch (Exception e) { |
| 443 | lbStream.close(e); |
| 444 | } |
| 445 | } |
| 446 | |
| 447 | private void cancelFallbackTimer() { |
| 448 | if (fallbackTimer != null) { |