File tree Expand file tree Collapse file tree 2 files changed +16
-4
lines changed
main/java/io/grpc/internal
test/java/io/grpc/internal Expand file tree Collapse file tree 2 files changed +16
-4
lines changed Original file line number Diff line number Diff line change 3131import java .util .ArrayList ;
3232import java .util .Collections ;
3333import java .util .List ;
34+ import java .util .Random ;
3435import java .util .concurrent .atomic .AtomicBoolean ;
3536import javax .annotation .Nullable ;
3637
@@ -65,7 +66,8 @@ public boolean acceptResolvedAddresses(ResolvedAddresses resolvedAddresses) {
6566 = (PickFirstLoadBalancerConfig ) resolvedAddresses .getLoadBalancingPolicyConfig ();
6667 if (config .shuffleAddressList != null && config .shuffleAddressList ) {
6768 servers = new ArrayList <EquivalentAddressGroup >(servers );
68- Collections .shuffle (servers );
69+ Collections .shuffle (servers ,
70+ config .randomSeed != null ? new Random (config .randomSeed ) : new Random ());
6971 }
7072 }
7173
@@ -219,8 +221,16 @@ public static final class PickFirstLoadBalancerConfig {
219221 @ Nullable
220222 public final Boolean shuffleAddressList ;
221223
224+ // For testing purposes only, not meant to be parsed from a real config.
225+ @ Nullable final Long randomSeed ;
226+
222227 public PickFirstLoadBalancerConfig (@ Nullable Boolean shuffleAddressList ) {
228+ this (shuffleAddressList , null );
229+ }
230+
231+ PickFirstLoadBalancerConfig (@ Nullable Boolean shuffleAddressList , @ Nullable Long randomSeed ) {
223232 this .shuffleAddressList = shuffleAddressList ;
233+ this .randomSeed = randomSeed ;
224234 }
225235 }
226236}
Original file line number Diff line number Diff line change @@ -145,14 +145,16 @@ public void pickAfterResolved() throws Exception {
145145 public void pickAfterResolved_shuffle () throws Exception {
146146 loadBalancer .acceptResolvedAddresses (
147147 ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (affinity )
148- .setLoadBalancingPolicyConfig (new PickFirstLoadBalancerConfig (true )).build ());
148+ .setLoadBalancingPolicyConfig (new PickFirstLoadBalancerConfig (true , 123L )).build ());
149149
150150 verify (mockHelper ).createSubchannel (createArgsCaptor .capture ());
151151 CreateSubchannelArgs args = createArgsCaptor .getValue ();
152152 // We should still see the same set of addresses.
153153 assertThat (args .getAddresses ()).containsExactlyElementsIn (servers );
154- // If the two lists are equal they have maintained order, we don't want that.
155- assertThat (args .getAddresses ()).isNotEqualTo (servers );
154+ // Because we use a fixed seed, the addresses should always be shuffled in this order.
155+ assertThat (args .getAddresses ().get (0 )).isEqualTo (servers .get (1 ));
156+ assertThat (args .getAddresses ().get (1 )).isEqualTo (servers .get (0 ));
157+ assertThat (args .getAddresses ().get (2 )).isEqualTo (servers .get (2 ));
156158 verify (mockHelper ).updateBalancingState (eq (CONNECTING ), pickerCaptor .capture ());
157159 verify (mockSubchannel ).requestConnection ();
158160
You can’t perform that action at this time.
0 commit comments