Description
When working normally, the remote balancer health-checks backends and only send healthy backends to the client, thus no need for client-side health-checking. In fallback mode, client-side health-checking is needed.
@ejona86 @markdroth @menghanl and I had a discussion today. The simplest solution for Java is to wrap GrpclbLoadBalancer with the health-checking LoadBalancer, thus it always enable client-side health-checking (if service config enables it). It's considered acceptable both normal mode and fallback mode have it enabled indiscriminately.
However, GRPCLB with pick_first child policy won't work well with health-checking. Health-checking returning unhealthy would fail RPCs, but the pick_first policy will not try the next backend, because InternalSubchannel still considers the connection READY. Fortunately, our only user of GRPCLB w/ pick_first won't turn on health-checking.