Skip to content

Commit ffcc360

Browse files
authored
core: further clean up leftovers in ManagedChannelImpl's LoadBalancer.Helper and Subchannel implementations (#7806)
1 parent 3b03d31 commit ffcc360

File tree

2 files changed

+12
-48
lines changed

2 files changed

+12
-48
lines changed

core/src/main/java/io/grpc/internal/ManagedChannelImpl.java

Lines changed: 10 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ public void uncaughtException(Thread t, Throwable e) {
253253
// Must only be mutated and read from syncContext
254254
private boolean shutdownNowed;
255255
// Must only be mutated from syncContext
256-
private volatile boolean terminating;
256+
private boolean terminating;
257257
// Must be mutated from syncContext
258258
private volatile boolean terminated;
259259
private final CountDownLatch terminatedLatch = new CountDownLatch(1);
@@ -1399,9 +1399,9 @@ public AbstractSubchannel createSubchannel(CreateSubchannelArgs args) {
13991399
@Override
14001400
public void updateBalancingState(
14011401
final ConnectivityState newState, final SubchannelPicker newPicker) {
1402+
syncContext.throwIfNotInThisSynchronizationContext();
14021403
checkNotNull(newState, "newState");
14031404
checkNotNull(newPicker, "newPicker");
1404-
logWarningIfNotInSyncContext("updateBalancingState()");
14051405
final class UpdateBalancingState implements Runnable {
14061406
@Override
14071407
public void run() {
@@ -1424,7 +1424,7 @@ public void run() {
14241424

14251425
@Override
14261426
public void refreshNameResolution() {
1427-
logWarningIfNotInSyncContext("refreshNameResolution()");
1427+
syncContext.throwIfNotInThisSynchronizationContext();
14281428
final class LoadBalancerRefreshNameResolution implements Runnable {
14291429
@Override
14301430
public void run() {
@@ -1814,9 +1814,9 @@ private final class SubchannelImpl extends AbstractSubchannel {
18141814
subchannelLogger = new ChannelLoggerImpl(subchannelTracer, timeProvider);
18151815
}
18161816

1817-
// This can be called either in or outside of syncContext
1818-
// TODO(zhangkun83): merge it back into start() once the caller createSubchannel() is deleted.
1819-
private void internalStart(final SubchannelStateListener listener) {
1817+
@Override
1818+
public void start(final SubchannelStateListener listener) {
1819+
syncContext.throwIfNotInThisSynchronizationContext();
18201820
checkState(!started, "already started");
18211821
checkState(!shutdown, "already shutdown");
18221822
checkState(!terminating, "Channel is being terminated");
@@ -1872,21 +1872,8 @@ void onNotInUse(InternalSubchannel is) {
18721872
.build());
18731873

18741874
this.subchannel = internalSubchannel;
1875-
// TODO(zhangkun83): no need to schedule on syncContext when this whole method is required
1876-
// to be called from syncContext
1877-
syncContext.execute(new Runnable() {
1878-
@Override
1879-
public void run() {
1880-
channelz.addSubchannel(internalSubchannel);
1881-
subchannels.add(internalSubchannel);
1882-
}
1883-
});
1884-
}
1885-
1886-
@Override
1887-
public void start(SubchannelStateListener listener) {
1888-
syncContext.throwIfNotInThisSynchronizationContext();
1889-
internalStart(listener);
1875+
channelz.addSubchannel(internalSubchannel);
1876+
subchannels.add(internalSubchannel);
18901877
}
18911878

18921879
@Override
@@ -1897,18 +1884,6 @@ InternalInstrumented<ChannelStats> getInstrumentedInternalSubchannel() {
18971884

18981885
@Override
18991886
public void shutdown() {
1900-
// TODO(zhangkun83): replace shutdown() with internalShutdown() to turn the warning into an
1901-
// exception.
1902-
logWarningIfNotInSyncContext("Subchannel.shutdown()");
1903-
syncContext.execute(new Runnable() {
1904-
@Override
1905-
public void run() {
1906-
internalShutdown();
1907-
}
1908-
});
1909-
}
1910-
1911-
private void internalShutdown() {
19121887
syncContext.throwIfNotInThisSynchronizationContext();
19131888
if (subchannel == null) {
19141889
// start() was not successful
@@ -1957,14 +1932,14 @@ public void run() {
19571932

19581933
@Override
19591934
public void requestConnection() {
1960-
logWarningIfNotInSyncContext("Subchannel.requestConnection()");
1935+
syncContext.throwIfNotInThisSynchronizationContext();
19611936
checkState(started, "not started");
19621937
subchannel.obtainActiveTransport();
19631938
}
19641939

19651940
@Override
19661941
public List<EquivalentAddressGroup> getAllAddresses() {
1967-
logWarningIfNotInSyncContext("Subchannel.getAllAddresses()");
1942+
syncContext.throwIfNotInThisSynchronizationContext();
19681943
checkState(started, "not started");
19691944
return subchannel.getAddressGroups();
19701945
}
@@ -2238,17 +2213,6 @@ public ConfigOrError parseServiceConfig(Map<String, ?> rawServiceConfig) {
22382213
}
22392214
}
22402215

2241-
private void logWarningIfNotInSyncContext(String method) {
2242-
try {
2243-
syncContext.throwIfNotInThisSynchronizationContext();
2244-
} catch (IllegalStateException e) {
2245-
logger.log(Level.WARNING,
2246-
method + " should be called from SynchronizationContext. "
2247-
+ "This warning will become an exception in a future release. "
2248-
+ "See https://github.com/grpc/grpc-java/issues/5015 for more details", e);
2249-
}
2250-
}
2251-
22522216
/**
22532217
* A ResolutionState indicates the status of last name resolution.
22542218
*/

core/src/test/java/io/grpc/internal/ManagedChannelImplTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -877,8 +877,8 @@ public void noMoreCallbackAfterLoadBalancerShutdown() {
877877
verifyNoMoreInteractions(stateListener1, stateListener2);
878878

879879
// LoadBalancer will normally shutdown all subchannels
880-
subchannel1.shutdown();
881-
subchannel2.shutdown();
880+
shutdownSafely(helper, subchannel1);
881+
shutdownSafely(helper, subchannel2);
882882

883883
// Since subchannels are shutdown, SubchannelStateListeners will only get SHUTDOWN regardless of
884884
// the transport states.

0 commit comments

Comments
 (0)