YARN-6203: Occasional test failure in TestWeightedRandomRouterPolicy (curino)

(cherry picked from commit 121d55bd29ac44289afad9a15e8737397ede298b)
This commit is contained in:
Carlo Curino 2017-04-13 12:09:39 -07:00
parent e1da8f0667
commit c4bbdfeb66

View File

@ -50,8 +50,9 @@ public void setUp() throws Exception {
Map<SubClusterIdInfo, Float> routerWeights = new HashMap<>(); Map<SubClusterIdInfo, Float> routerWeights = new HashMap<>();
Map<SubClusterIdInfo, Float> amrmWeights = new HashMap<>(); Map<SubClusterIdInfo, Float> amrmWeights = new HashMap<>();
// simulate 20 subclusters with a 5% chance of being inactive float numSubClusters = 20;
for (int i = 0; i < 20; i++) { // simulate N subclusters each with a 5% chance of being inactive
for (int i = 0; i < numSubClusters; i++) {
SubClusterIdInfo sc = new SubClusterIdInfo("sc" + i); SubClusterIdInfo sc = new SubClusterIdInfo("sc" + i);
// with 5% omit a subcluster // with 5% omit a subcluster
if (getRand().nextFloat() < 0.95f) { if (getRand().nextFloat() < 0.95f) {
@ -60,8 +61,12 @@ public void setUp() throws Exception {
when(sci.getSubClusterId()).thenReturn(sc.toId()); when(sci.getSubClusterId()).thenReturn(sc.toId());
getActiveSubclusters().put(sc.toId(), sci); getActiveSubclusters().put(sc.toId(), sci);
} }
// 5% chance we omit one of the weights
float weight = getRand().nextFloat(); // 80% of the weight is evenly spread, 20% is randomly generated
float weight =
(0.8f * 1f / numSubClusters) + (0.2f * getRand().nextFloat());
// also 5% chance we omit one of the weights
if (i <= 5 || getRand().nextFloat() > 0.05f) { if (i <= 5 || getRand().nextFloat() > 0.05f) {
routerWeights.put(sc, weight); routerWeights.put(sc, weight);
amrmWeights.put(sc, weight); amrmWeights.put(sc, weight);
@ -89,7 +94,7 @@ public void testClusterChosenWithRightProbability() throws YarnException {
counter.put(id.toId(), new AtomicLong(0)); counter.put(id.toId(), new AtomicLong(0));
} }
float numberOfDraws = 100000; float numberOfDraws = 10000;
for (float i = 0; i < numberOfDraws; i++) { for (float i = 0; i < numberOfDraws; i++) {
SubClusterId chosenId = ((FederationRouterPolicy) getPolicy()) SubClusterId chosenId = ((FederationRouterPolicy) getPolicy())
@ -118,8 +123,7 @@ public void testClusterChosenWithRightProbability() throws YarnException {
Assert.assertTrue( Assert.assertTrue(
"Id " + counterEntry.getKey() + " Actual weight: " + actualWeight "Id " + counterEntry.getKey() + " Actual weight: " + actualWeight
+ " expected weight: " + expectedWeight, + " expected weight: " + expectedWeight,
expectedWeight == 0 || (actualWeight / expectedWeight) < 1.2 Math.abs(actualWeight - expectedWeight) < 0.01);
&& (actualWeight / expectedWeight) > 0.8);
} else { } else {
Assert Assert
.assertTrue( .assertTrue(