6363import java .util .List ;
6464import java .util .Map ;
6565import java .util .Queue ;
66+ import java .util .Random ;
6667import java .util .concurrent .ConcurrentHashMap ;
6768import java .util .concurrent .ConcurrentLinkedQueue ;
6869import java .util .concurrent .CyclicBarrier ;
@@ -173,7 +174,8 @@ public Void answer(InvocationOnMock invocation) throws Throwable {
173174 return subchannel ;
174175 }
175176 });
176- wrr = new WeightedRoundRobinLoadBalancer (helper , fakeClock .getDeadlineTicker ());
177+ Random random = new Random ();
178+ wrr = new WeightedRoundRobinLoadBalancer (helper , fakeClock .getDeadlineTicker (), random );
177179 }
178180
179181 @ Test
@@ -262,7 +264,6 @@ weightedSubchannel2.new OrcaReportListener(weightedConfig.errorUtilizationPenalt
262264 0.9 , 0 , 0.1 , 1 , 0 , new HashMap <>(), new HashMap <>()));
263265 assertThat (fakeClock .forwardTime (11 , TimeUnit .SECONDS )).isEqualTo (1 );
264266 PickResult pickResult = weightedPicker .pickSubchannel (mockArgs );
265- assertThat (pickResult .getSubchannel ()).isEqualTo (weightedSubchannel1 );
266267 assertThat (pickResult .getStreamTracerFactory ()).isNotNull (); // verify per-request listener
267268 assertThat (oobCalls .isEmpty ()).isTrue ();
268269
@@ -276,7 +277,6 @@ weightedSubchannel2.new OrcaReportListener(weightedConfig.errorUtilizationPenalt
276277 eq (ConnectivityState .READY ), pickerCaptor2 .capture ());
277278 weightedPicker = (WeightedRoundRobinPicker ) pickerCaptor2 .getAllValues ().get (2 );
278279 pickResult = weightedPicker .pickSubchannel (mockArgs );
279- assertThat (pickResult .getSubchannel ()).isEqualTo (weightedSubchannel1 );
280280 assertThat (pickResult .getStreamTracerFactory ()).isNull ();
281281 OrcaLoadReportRequest golden = OrcaLoadReportRequest .newBuilder ().setReportInterval (
282282 Duration .newBuilder ().setSeconds (20 ).setNanos (30000000 ).build ()).build ();
@@ -871,14 +871,16 @@ public void wrrConfig_BooleanValueNonNull() {
871871 @ Test (expected = IllegalArgumentException .class )
872872 public void emptyWeights () {
873873 float [] weights = {};
874- StaticStrideScheduler sss = new StaticStrideScheduler (weights );
874+ Random random = new Random ();
875+ StaticStrideScheduler sss = new StaticStrideScheduler (weights , random );
875876 sss .pick ();
876877 }
877878
878879 @ Test
879880 public void testPicksEqualsWeights () {
880881 float [] weights = {1.0f , 2.0f , 3.0f };
881- StaticStrideScheduler sss = new StaticStrideScheduler (weights );
882+ Random random = new Random ();
883+ StaticStrideScheduler sss = new StaticStrideScheduler (weights , random );
882884 int [] expectedPicks = new int [] {1 , 2 , 3 };
883885 int [] picks = new int [3 ];
884886 for (int i = 0 ; i < 6 ; i ++) {
@@ -890,7 +892,8 @@ public void testPicksEqualsWeights() {
890892 @ Test
891893 public void testContainsZeroWeightUseMean () {
892894 float [] weights = {3.0f , 0.0f , 1.0f };
893- StaticStrideScheduler sss = new StaticStrideScheduler (weights );
895+ Random random = new Random ();
896+ StaticStrideScheduler sss = new StaticStrideScheduler (weights , random );
894897 int [] expectedPicks = new int [] {3 , 2 , 1 };
895898 int [] picks = new int [3 ];
896899 for (int i = 0 ; i < 6 ; i ++) {
@@ -902,7 +905,8 @@ public void testContainsZeroWeightUseMean() {
902905 @ Test
903906 public void testContainsNegativeWeightUseMean () {
904907 float [] weights = {3.0f , -1.0f , 1.0f };
905- StaticStrideScheduler sss = new StaticStrideScheduler (weights );
908+ Random random = new Random ();
909+ StaticStrideScheduler sss = new StaticStrideScheduler (weights , random );
906910 int [] expectedPicks = new int [] {3 , 2 , 1 };
907911 int [] picks = new int [3 ];
908912 for (int i = 0 ; i < 6 ; i ++) {
@@ -914,7 +918,8 @@ public void testContainsNegativeWeightUseMean() {
914918 @ Test
915919 public void testAllSameWeights () {
916920 float [] weights = {1.0f , 1.0f , 1.0f };
917- StaticStrideScheduler sss = new StaticStrideScheduler (weights );
921+ Random random = new Random ();
922+ StaticStrideScheduler sss = new StaticStrideScheduler (weights , random );
918923 int [] expectedPicks = new int [] {2 , 2 , 2 };
919924 int [] picks = new int [3 ];
920925 for (int i = 0 ; i < 6 ; i ++) {
@@ -926,7 +931,8 @@ public void testAllSameWeights() {
926931 @ Test
927932 public void testAllZeroWeightsUseOne () {
928933 float [] weights = {0.0f , 0.0f , 0.0f };
929- StaticStrideScheduler sss = new StaticStrideScheduler (weights );
934+ Random random = new Random ();
935+ StaticStrideScheduler sss = new StaticStrideScheduler (weights , random );
930936 int [] expectedPicks = new int [] {2 , 2 , 2 };
931937 int [] picks = new int [3 ];
932938 for (int i = 0 ; i < 6 ; i ++) {
@@ -938,7 +944,8 @@ public void testAllZeroWeightsUseOne() {
938944 @ Test
939945 public void testAllInvalidWeightsUseOne () {
940946 float [] weights = {-3.1f , -0.0f , 0.0f };
941- StaticStrideScheduler sss = new StaticStrideScheduler (weights );
947+ Random random = new Random ();
948+ StaticStrideScheduler sss = new StaticStrideScheduler (weights , random );
942949 int [] expectedPicks = new int [] {2 , 2 , 2 };
943950 int [] picks = new int [3 ];
944951 for (int i = 0 ; i < 6 ; i ++) {
@@ -951,7 +958,8 @@ public void testAllInvalidWeightsUseOne() {
951958 public void testLargestPickedEveryGeneration () {
952959 float [] weights = {1.0f , 2.0f , 3.0f };
953960 int mean = 2 ;
954- StaticStrideScheduler sss = new StaticStrideScheduler (weights );
961+ Random random = new Random ();
962+ StaticStrideScheduler sss = new StaticStrideScheduler (weights , random );
955963 int largestWeightPickCount = 0 ;
956964 int kMaxWeight = 65535 ;
957965 for (int i = 0 ; i < mean * kMaxWeight ; i ++) {
@@ -965,7 +973,8 @@ public void testLargestPickedEveryGeneration() {
965973 @ Test
966974 public void testStaticStrideSchedulerGivenExample1 () {
967975 float [] weights = {10.0f , 20.0f , 30.0f };
968- StaticStrideScheduler sss = new StaticStrideScheduler (weights );
976+ Random random = new Random ();
977+ StaticStrideScheduler sss = new StaticStrideScheduler (weights , random );
969978 double totalWeight = 60 ;
970979 Map <Integer , Integer > pickCount = new HashMap <>();
971980 for (int i = 0 ; i < 1000 ; i ++) {
@@ -981,7 +990,8 @@ public void testStaticStrideSchedulerGivenExample1() {
981990 @ Test
982991 public void testStaticStrideSchedulerGivenExample2 () {
983992 float [] weights = {2.0f , 3.0f , 6.0f };
984- StaticStrideScheduler sss = new StaticStrideScheduler (weights );
993+ Random random = new Random ();
994+ StaticStrideScheduler sss = new StaticStrideScheduler (weights , random );
985995 double totalWeight = 11 ;
986996 Map <Integer , Integer > pickCount = new HashMap <>();
987997 for (int i = 0 ; i < 1000 ; i ++) {
@@ -997,7 +1007,8 @@ public void testStaticStrideSchedulerGivenExample2() {
9971007 @ Test
9981008 public void testStaticStrideSchedulerNonIntegers1 () {
9991009 float [] weights = {2.0f , (float ) (10.0 / 3.0 ), 1.0f };
1000- StaticStrideScheduler sss = new StaticStrideScheduler (weights );
1010+ Random random = new Random ();
1011+ StaticStrideScheduler sss = new StaticStrideScheduler (weights , random );
10011012 double totalWeight = 2 + 10.0 / 3.0 + 1.0 ;
10021013 Map <Integer , Integer > pickCount = new HashMap <>();
10031014 for (int i = 0 ; i < 1000 ; i ++) {
@@ -1013,7 +1024,8 @@ public void testStaticStrideSchedulerNonIntegers1() {
10131024 @ Test
10141025 public void testStaticStrideSchedulerNonIntegers2 () {
10151026 float [] weights = {0.5f , 0.3f , 1.0f };
1016- StaticStrideScheduler sss = new StaticStrideScheduler (weights );
1027+ Random random = new Random ();
1028+ StaticStrideScheduler sss = new StaticStrideScheduler (weights , random );
10171029 double totalWeight = 1.8 ;
10181030 Map <Integer , Integer > pickCount = new HashMap <>();
10191031 for (int i = 0 ; i < 1000 ; i ++) {
@@ -1029,7 +1041,8 @@ public void testStaticStrideSchedulerNonIntegers2() {
10291041 @ Test
10301042 public void testTwoWeights () {
10311043 float [] weights = {1.0f , 2.0f };
1032- StaticStrideScheduler sss = new StaticStrideScheduler (weights );
1044+ Random random = new Random ();
1045+ StaticStrideScheduler sss = new StaticStrideScheduler (weights , random );
10331046 double totalWeight = 3 ;
10341047 Map <Integer , Integer > pickCount = new HashMap <>();
10351048 for (int i = 0 ; i < 1000 ; i ++) {
@@ -1045,7 +1058,8 @@ public void testTwoWeights() {
10451058 @ Test
10461059 public void testManyWeights1 () {
10471060 float [] weights = {1.0f , 2.0f , 3.0f , 4.0f , 5.0f };
1048- StaticStrideScheduler sss = new StaticStrideScheduler (weights );
1061+ Random random = new Random ();
1062+ StaticStrideScheduler sss = new StaticStrideScheduler (weights , random );
10491063 double totalWeight = 15 ;
10501064 Map <Integer , Integer > pickCount = new HashMap <>();
10511065 for (int i = 0 ; i < 1000 ; i ++) {
@@ -1060,8 +1074,9 @@ public void testManyWeights1() {
10601074
10611075 @ Test
10621076 public void testManyComplexWeights2 () {
1063- float [] weights = {1.2f , 2.4f , 222.56f , 0f , 15.0f , 226342.0f , 5123.0f , 0.0001f };
1064- StaticStrideScheduler sss = new StaticStrideScheduler (weights );
1077+ float [] weights = {1.2f , 2.4f , 222.56f , 1.1f , 15.0f , 226342.0f , 5123.0f , 532.2f };
1078+ Random random = new Random ();
1079+ StaticStrideScheduler sss = new StaticStrideScheduler (weights , random );
10651080 double totalWeight = 1.2 + 2.4 + 222.56 + 15.0 + 226342.0 + 5123.0 + 0.0001 ;
10661081 Map <Integer , Integer > pickCount = new HashMap <>();
10671082 for (int i = 0 ; i < 1000 ; i ++) {
@@ -1070,7 +1085,7 @@ public void testManyComplexWeights2() {
10701085 }
10711086 for (int i = 0 ; i < 8 ; i ++) {
10721087 assertThat (Math .abs (pickCount .getOrDefault (i , 0 ) / 10000.0 - weights [i ] / totalWeight ) )
1073- .isAtMost (5 );
1088+ .isAtMost (2 );
10741089 }
10751090 }
10761091
0 commit comments