Skip to content

Commit cd9835c

Browse files
committed
Save in-progress changes.
1 parent 896395e commit cd9835c

File tree

3 files changed

+23
-25
lines changed

3 files changed

+23
-25
lines changed

rls/src/main/java/io/grpc/rls/CachingRlsLbClient.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ final class CachingRlsLbClient {
134134
private final ChannelLogger logger;
135135
private final ChildPolicyWrapper fallbackChildPolicyWrapper;
136136
private ConnectivityState lastRlsServerConnectivityState;
137+
private boolean wasInTransientFailure;
137138

138139
static {
139140
MetricInstrumentRegistry metricInstrumentRegistry
@@ -228,8 +229,7 @@ private CachingRlsLbClient(Builder builder) {
228229
refCountedChildPolicyWrapperFactory =
229230
new RefCountedChildPolicyWrapperFactory(
230231
lbPolicyConfig.getLoadBalancingPolicy(), childLbResolvedAddressFactory,
231-
childLbHelperProvider,
232-
new BackoffRefreshListener());
232+
childLbHelperProvider);
233233
// TODO(creamsoup) wait until lb is ready
234234
String defaultTarget = lbPolicyConfig.getRouteLookupConfig().defaultTarget();
235235
if (defaultTarget != null && !defaultTarget.isEmpty()) {
@@ -261,12 +261,20 @@ public void accept(BatchRecorder recorder) {
261261
}
262262

263263
private void rlsServerConnectionStateChanged() {
264-
ConnectivityState currentState = rlsChannel.getState(false);
265-
if (lastRlsServerConnectivityState == ConnectivityState.TRANSIENT_FAILURE
266-
&& currentState == ConnectivityState.READY) {
267-
264+
lastRlsServerConnectivityState = rlsChannel.getState(false);
265+
if (wasInTransientFailure && lastRlsServerConnectivityState == ConnectivityState.READY) {
266+
wasInTransientFailure = false;
267+
synchronized (lock) {
268+
for (CacheEntry value : linkedHashLruCache.values()) {
269+
if (value instanceof BackoffCacheEntry) {
270+
refreshBackoffEntry((BackoffCacheEntry) value);
271+
}
272+
}
273+
}
274+
} else if (!wasInTransientFailure && lastRlsServerConnectivityState == ConnectivityState.TRANSIENT_FAILURE) {
275+
wasInTransientFailure = true;
268276
}
269-
lastRlsServerConnectivityState = currentState;
277+
rlsChannel.notifyWhenStateChanged(lastRlsServerConnectivityState, () -> rlsServerConnectionStateChanged());
270278
}
271279

272280
void init() {
@@ -469,7 +477,8 @@ private void refreshBackoffEntry(BackoffCacheEntry entry) {
469477
logger.log(ChannelLogLevel.DEBUG,
470478
"[RLS Entry {0}] Calling RLS for transition to pending", entry.request);
471479
linkedHashLruCache.invalidate(entry.request);
472-
asyncRlsCall(entry.request, entry.backoffPolicy);
480+
// Cache updated. updateBalancingState() to reattempt picks
481+
helper.triggerPendingRpcProcessing();
473482
}
474483
}
475484

rls/src/main/java/io/grpc/rls/LbPolicyConfiguration.java

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -210,20 +210,17 @@ static final class RefCountedChildPolicyWrapperFactory {
210210
new HashMap<>();
211211

212212
private final ChildLoadBalancerHelperProvider childLbHelperProvider;
213-
private final ChildLbStatusListener childLbStatusListener;
214213
private final ChildLoadBalancingPolicy childPolicy;
215214
private ResolvedAddressFactory childLbResolvedAddressFactory;
216215

217216
public RefCountedChildPolicyWrapperFactory(
218217
ChildLoadBalancingPolicy childPolicy,
219218
ResolvedAddressFactory childLbResolvedAddressFactory,
220-
ChildLoadBalancerHelperProvider childLbHelperProvider,
221-
ChildLbStatusListener childLbStatusListener) {
219+
ChildLoadBalancerHelperProvider childLbHelperProvider) {
222220
this.childPolicy = checkNotNull(childPolicy, "childPolicy");
223221
this.childLbResolvedAddressFactory =
224222
checkNotNull(childLbResolvedAddressFactory, "childLbResolvedAddressFactory");
225223
this.childLbHelperProvider = checkNotNull(childLbHelperProvider, "childLbHelperProvider");
226-
this.childLbStatusListener = checkNotNull(childLbStatusListener, "childLbStatusListener");
227224
}
228225

229226
void init() {
@@ -248,8 +245,7 @@ ChildPolicyWrapper createOrGet(String target) {
248245
RefCountedChildPolicyWrapper pooledChildPolicyWrapper = childPolicyMap.get(target);
249246
if (pooledChildPolicyWrapper == null) {
250247
ChildPolicyWrapper childPolicyWrapper = new ChildPolicyWrapper(
251-
target, childPolicy, childLbResolvedAddressFactory, childLbHelperProvider,
252-
childLbStatusListener);
248+
target, childPolicy, childLbResolvedAddressFactory, childLbHelperProvider);
253249
pooledChildPolicyWrapper = RefCountedChildPolicyWrapper.of(childPolicyWrapper);
254250
childPolicyMap.put(target, pooledChildPolicyWrapper);
255251
return pooledChildPolicyWrapper.getObject();
@@ -299,11 +295,9 @@ public ChildPolicyWrapper(
299295
String target,
300296
ChildLoadBalancingPolicy childPolicy,
301297
final ResolvedAddressFactory childLbResolvedAddressFactory,
302-
ChildLoadBalancerHelperProvider childLbHelperProvider,
303-
ChildLbStatusListener childLbStatusListener) {
298+
ChildLoadBalancerHelperProvider childLbHelperProvider) {
304299
this.target = target;
305-
this.helper =
306-
new ChildPolicyReportingHelper(childLbHelperProvider, childLbStatusListener);
300+
this.helper = new ChildPolicyReportingHelper(childLbHelperProvider);
307301
LoadBalancerProvider lbProvider = childPolicy.getEffectiveLbProvider();
308302
final ConfigOrError lbConfig =
309303
lbProvider
@@ -386,14 +380,11 @@ public String toString() {
386380
final class ChildPolicyReportingHelper extends ForwardingLoadBalancerHelper {
387381

388382
private final ChildLoadBalancerHelper delegate;
389-
private final ChildLbStatusListener listener;
390383

391384
ChildPolicyReportingHelper(
392-
ChildLoadBalancerHelperProvider childHelperProvider,
393-
ChildLbStatusListener listener) {
385+
ChildLoadBalancerHelperProvider childHelperProvider) {
394386
checkNotNull(childHelperProvider, "childHelperProvider");
395387
this.delegate = childHelperProvider.forTarget(getTarget());
396-
this.listener = checkNotNull(listener, "listener");
397388
}
398389

399390
@Override
@@ -406,7 +397,6 @@ public void updateBalancingState(ConnectivityState newState, SubchannelPicker ne
406397
picker = newPicker;
407398
state = newState;
408399
super.updateBalancingState(newState, newPicker);
409-
listener.onStatusChanged(newState);
410400
}
411401
}
412402
}

rls/src/test/java/io/grpc/rls/LbPolicyConfigurationTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,7 @@ public ResolvedAddresses create(Object childLbConfig) {
7878
ImmutableMap.<String, Object>of("foo", "bar"),
7979
lbProvider),
8080
resolvedAddressFactory,
81-
new ChildLoadBalancerHelperProvider(helper, subchannelStateManager, picker),
82-
childLbStatusListener);
81+
new ChildLoadBalancerHelperProvider(helper, subchannelStateManager, picker));
8382

8483
@Before
8584
public void setUp() {

0 commit comments

Comments
 (0)