mirror of https://github.com/grpc/grpc-java.git
grpclb: refresh name resolution when balancer stream closed. (#5127)
This commit is contained in:
parent
edede01da6
commit
28587b449b
|
|
@ -583,6 +583,8 @@ final class GrpclbState {
|
|||
syncContext.schedule(new LbRpcRetryTask(), delayNanos, TimeUnit.NANOSECONDS,
|
||||
timerService);
|
||||
}
|
||||
|
||||
helper.refreshNameResolution();
|
||||
}
|
||||
|
||||
void close(@Nullable Exception error) {
|
||||
|
|
|
|||
|
|
@ -1467,14 +1467,14 @@ public class GrpclbLoadBalancerTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void grpclbBalancerStreamRetry() throws Exception {
|
||||
public void grpclbBalancerStreamClosedAndRetried() throws Exception {
|
||||
LoadBalanceRequest expectedInitialRequest =
|
||||
LoadBalanceRequest.newBuilder()
|
||||
.setInitialRequest(
|
||||
InitialLoadBalanceRequest.newBuilder().setName(SERVICE_AUTHORITY).build())
|
||||
.build();
|
||||
InOrder inOrder =
|
||||
inOrder(mockLbService, backoffPolicyProvider, backoffPolicy1, backoffPolicy2);
|
||||
inOrder(mockLbService, backoffPolicyProvider, backoffPolicy1, backoffPolicy2, helper);
|
||||
List<EquivalentAddressGroup> grpclbResolutionList = createResolvedServerAddresses(true);
|
||||
Attributes grpclbResolutionAttrs = Attributes.EMPTY;
|
||||
deliverResolvedAddresses(grpclbResolutionList, grpclbResolutionAttrs);
|
||||
|
|
@ -1493,10 +1493,12 @@ public class GrpclbLoadBalancerTest {
|
|||
|
||||
// Balancer closes it immediately (erroneously)
|
||||
lbResponseObserver.onCompleted();
|
||||
|
||||
// Will start backoff sequence 1 (10ns)
|
||||
inOrder.verify(backoffPolicyProvider).get();
|
||||
inOrder.verify(backoffPolicy1).nextBackoffNanos();
|
||||
assertEquals(1, fakeClock.numPendingTasks(LB_RPC_RETRY_TASK_FILTER));
|
||||
inOrder.verify(helper).refreshNameResolution();
|
||||
|
||||
// Fast-forward to a moment before the retry
|
||||
fakeClock.forwardNanos(9);
|
||||
|
|
@ -1516,6 +1518,7 @@ public class GrpclbLoadBalancerTest {
|
|||
verifyNoMoreInteractions(backoffPolicyProvider);
|
||||
inOrder.verify(backoffPolicy1).nextBackoffNanos();
|
||||
assertEquals(1, fakeClock.numPendingTasks(LB_RPC_RETRY_TASK_FILTER));
|
||||
inOrder.verify(helper).refreshNameResolution();
|
||||
|
||||
// Fast-forward to a moment before the retry
|
||||
fakeClock.forwardNanos(100 - 1);
|
||||
|
|
@ -1542,6 +1545,7 @@ public class GrpclbLoadBalancerTest {
|
|||
assertEquals(1, lbRequestObservers.size());
|
||||
lbRequestObserver = lbRequestObservers.poll();
|
||||
verify(lbRequestObserver).onNext(eq(expectedInitialRequest));
|
||||
inOrder.verify(helper).refreshNameResolution();
|
||||
|
||||
// Fail the retry after spending 4ns
|
||||
fakeClock.forwardNanos(4);
|
||||
|
|
@ -1550,6 +1554,7 @@ public class GrpclbLoadBalancerTest {
|
|||
// Will be on the first retry (10ns) of backoff sequence 2.
|
||||
inOrder.verify(backoffPolicy2).nextBackoffNanos();
|
||||
assertEquals(1, fakeClock.numPendingTasks(LB_RPC_RETRY_TASK_FILTER));
|
||||
inOrder.verify(helper).refreshNameResolution();
|
||||
|
||||
// Fast-forward to a moment before the retry, the time spent in the last try is deducted.
|
||||
fakeClock.forwardNanos(10 - 4 - 1);
|
||||
|
|
@ -1566,6 +1571,7 @@ public class GrpclbLoadBalancerTest {
|
|||
verify(backoffPolicyProvider, times(2)).get();
|
||||
verify(backoffPolicy1, times(2)).nextBackoffNanos();
|
||||
verify(backoffPolicy2, times(1)).nextBackoffNanos();
|
||||
verify(helper, times(4)).refreshNameResolution();
|
||||
}
|
||||
|
||||
private void deliverSubchannelState(
|
||||
|
|
|
|||
Loading…
Reference in New Issue