Skip to content

Commit af2c16d

Browse files
authored
api: deprecate Helper.updateSubchannelAddresses() and add equivalent on Subchannel (#5802)
Resolves #5676
1 parent 9b4c958 commit af2c16d

File tree

11 files changed

+66
-11
lines changed

11 files changed

+66
-11
lines changed

api/src/main/java/io/grpc/LoadBalancer.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -963,7 +963,9 @@ public Subchannel createSubchannel(CreateSubchannelArgs args) {
963963
* href="https://github.com/grpc/grpc-java/issues/5015">#5015</a> for the background.
964964
*
965965
* @since 1.4.0
966+
* @deprecated use {@link Subchannel#updateAddresses} instead
966967
*/
968+
@Deprecated
967969
public final void updateSubchannelAddresses(
968970
Subchannel subchannel, EquivalentAddressGroup addrs) {
969971
checkNotNull(addrs, "addrs");
@@ -982,7 +984,9 @@ public final void updateSubchannelAddresses(
982984
* @throws IllegalArgumentException if {@code subchannel} was not returned from {@link
983985
* #createSubchannel} or {@code addrs} is empty
984986
* @since 1.14.0
987+
* @deprecated use {@link Subchannel#updateAddresses} instead
985988
*/
989+
@Deprecated
986990
public void updateSubchannelAddresses(
987991
Subchannel subchannel, List<EquivalentAddressGroup> addrs) {
988992
throw new UnsupportedOperationException();
@@ -1301,6 +1305,19 @@ public ChannelLogger getChannelLogger() {
13011305
throw new UnsupportedOperationException();
13021306
}
13031307

1308+
/**
1309+
* Replaces the existing addresses used with this {@code Subchannel}. If the new and old
1310+
* addresses overlap, the Subchannel can continue using an existing connection.
1311+
*
1312+
* <p>It must be called from the Synchronization Context or will throw.
1313+
*
1314+
* @throws IllegalArgumentException if {@code addrs} is empty
1315+
* @since 1.22.0
1316+
*/
1317+
public void updateAddresses(List<EquivalentAddressGroup> addrs) {
1318+
throw new UnsupportedOperationException();
1319+
}
1320+
13041321
/**
13051322
* (Internal use only) returns an object that represents the underlying subchannel that is used
13061323
* by the Channel for sending RPCs when this {@link Subchannel} is picked. This is an opaque

api/src/test/java/io/grpc/LoadBalancerTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ public void helper_createSubchannelList_throws() {
167167
}
168168
}
169169

170+
@Deprecated
170171
@Test
171172
public void helper_updateSubchannelAddresses_delegates() {
172173
class OverrideUpdateSubchannel extends NoopHelper {
@@ -187,6 +188,7 @@ public void updateSubchannelAddresses(
187188
assertThat(helper.ran).isTrue();
188189
}
189190

191+
@Deprecated
190192
@Test(expected = UnsupportedOperationException.class)
191193
public void helper_updateSubchannelAddressesList_throws() {
192194
new NoopHelper().updateSubchannelAddresses(null, Arrays.asList(eag));

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,6 +1127,7 @@ public void run() {
11271127
syncContext.execute(new LoadBalancerRefreshNameResolution());
11281128
}
11291129

1130+
@Deprecated
11301131
@Override
11311132
public void updateSubchannelAddresses(
11321133
LoadBalancer.Subchannel subchannel, List<EquivalentAddressGroup> addrs) {
@@ -1621,6 +1622,12 @@ public Object getInternalSubchannel() {
16211622
public ChannelLogger getChannelLogger() {
16221623
return subchannelLogger;
16231624
}
1625+
1626+
@Override
1627+
public void updateAddresses(List<EquivalentAddressGroup> addrs) {
1628+
syncContext.throwIfNotInThisSynchronizationContext();
1629+
subchannel.updateAddresses(addrs);
1630+
}
16241631
}
16251632

16261633
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public void onSubchannelState(ConnectivityStateInfo stateInfo) {
6464
helper.updateBalancingState(CONNECTING, new Picker(PickResult.withSubchannel(subchannel)));
6565
subchannel.requestConnection();
6666
} else {
67-
helper.updateSubchannelAddresses(subchannel, servers);
67+
subchannel.updateAddresses(servers);
6868
}
6969
}
7070

core/src/main/java/io/grpc/util/ForwardingLoadBalancerHelper.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public Subchannel createSubchannel(CreateSubchannelArgs args) {
5151
return delegate().createSubchannel(args);
5252
}
5353

54+
@Deprecated
5455
@Override
5556
public void updateSubchannelAddresses(
5657
Subchannel subchannel, List<EquivalentAddressGroup> addrs) {

core/src/main/java/io/grpc/util/ForwardingSubchannel.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@ public Object getInternalSubchannel() {
7474
return delegate().getInternalSubchannel();
7575
}
7676

77+
@Override
78+
public void updateAddresses(List<EquivalentAddressGroup> addrs) {
79+
delegate().updateAddresses(addrs);
80+
}
81+
7782
@Override
7883
public String toString() {
7984
return MoreObjects.toStringHelper(this).add("delegate", delegate()).toString();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ private static void updateSubchannelAddressesSafely(
549549
new Runnable() {
550550
@Override
551551
public void run() {
552-
helper.updateSubchannelAddresses(subchannel, addrs);
552+
subchannel.updateAddresses(Collections.singletonList(addrs));
553553
}
554554
});
555555
}

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,16 @@ public String toString() {
184184
return "test-addr";
185185
}
186186
};
187+
private final SocketAddress socketAddress2 =
188+
new SocketAddress() {
189+
@Override
190+
public String toString() {
191+
return "test-addr";
192+
}
193+
};
187194
private final EquivalentAddressGroup addressGroup = new EquivalentAddressGroup(socketAddress);
195+
private final EquivalentAddressGroup addressGroup2 =
196+
new EquivalentAddressGroup(Arrays.asList(socketAddress, socketAddress2));
188197
private final FakeClock timer = new FakeClock();
189198
private final FakeClock executor = new FakeClock();
190199
private final FakeClock balancerRpcExecutor = new FakeClock();
@@ -1322,6 +1331,11 @@ public void run() {
13221331
.newClientTransport(
13231332
eq(socketAddress), eq(clientTransportOptions), isA(TransportLogger.class));
13241333

1334+
// updateAddresses()
1335+
updateAddressesSafely(helper, sub1, Collections.singletonList(addressGroup2));
1336+
assertThat(((InternalSubchannel) sub1.getInternalSubchannel()).getAddressGroups())
1337+
.isEqualTo(Collections.singletonList(addressGroup2));
1338+
13251339
// shutdown() has a delay
13261340
shutdownSafely(helper, sub1);
13271341
timer.forwardTime(ManagedChannelImpl.SUBCHANNEL_SHUTDOWN_DELAY_SECONDS - 1, TimeUnit.SECONDS);
@@ -4116,6 +4130,17 @@ public void run() {
41164130
});
41174131
}
41184132

4133+
private static void updateAddressesSafely(
4134+
Helper helper, final Subchannel subchannel, final List<EquivalentAddressGroup> addrs) {
4135+
helper.getSynchronizationContext().execute(
4136+
new Runnable() {
4137+
@Override
4138+
public void run() {
4139+
subchannel.updateAddresses(addrs);
4140+
}
4141+
});
4142+
}
4143+
41194144
private static void shutdownSafely(
41204145
final Helper helper, final Subchannel subchannel) {
41214146
helper.getSynchronizationContext().execute(

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,15 +172,15 @@ public void pickAfterResolvedAndUnchanged() throws Exception {
172172
verify(mockSubchannel).requestConnection();
173173
loadBalancer.handleResolvedAddresses(
174174
ResolvedAddresses.newBuilder().setAddresses(servers).setAttributes(affinity).build());
175+
verify(mockSubchannel).updateAddresses(eq(servers));
175176
verifyNoMoreInteractions(mockSubchannel);
176177

177178
verify(mockHelper).createSubchannel(createArgsCaptor.capture());
178179
assertThat(createArgsCaptor.getValue()).isNotNull();
179180
verify(mockHelper)
180181
.updateBalancingState(isA(ConnectivityState.class), isA(SubchannelPicker.class));
181182
// Updating the subchannel addresses is unnecessary, but doesn't hurt anything
182-
verify(mockHelper).updateSubchannelAddresses(
183-
eq(mockSubchannel), ArgumentMatchers.<EquivalentAddressGroup>anyList());
183+
verify(mockSubchannel).updateAddresses(ArgumentMatchers.<EquivalentAddressGroup>anyList());
184184

185185
verifyNoMoreInteractions(mockHelper);
186186
}
@@ -191,7 +191,7 @@ public void pickAfterResolvedAndChanged() throws Exception {
191191
List<EquivalentAddressGroup> newServers =
192192
Lists.newArrayList(new EquivalentAddressGroup(socketAddr));
193193

194-
InOrder inOrder = inOrder(mockHelper);
194+
InOrder inOrder = inOrder(mockHelper, mockSubchannel);
195195

196196
loadBalancer.handleResolvedAddresses(
197197
ResolvedAddresses.newBuilder().setAddresses(servers).setAttributes(affinity).build());
@@ -205,7 +205,7 @@ public void pickAfterResolvedAndChanged() throws Exception {
205205

206206
loadBalancer.handleResolvedAddresses(
207207
ResolvedAddresses.newBuilder().setAddresses(newServers).setAttributes(affinity).build());
208-
inOrder.verify(mockHelper).updateSubchannelAddresses(eq(mockSubchannel), eq(newServers));
208+
inOrder.verify(mockSubchannel).updateAddresses(eq(newServers));
209209

210210
verifyNoMoreInteractions(mockSubchannel);
211211
verifyNoMoreInteractions(mockHelper);

grpclb/src/main/java/io/grpc/grpclb/GrpclbState.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ private void useRoundRobinLists(
438438
} else {
439439
checkState(subchannels.size() == 1, "Unexpected Subchannel count: %s", subchannels);
440440
subchannel = subchannels.values().iterator().next();
441-
helper.updateSubchannelAddresses(subchannel, eagList);
441+
subchannel.updateAddresses(eagList);
442442
}
443443
subchannels = Collections.singletonMap(eagList, subchannel);
444444
newBackendList.add(

0 commit comments

Comments
 (0)