|
@@ -18,11 +18,19 @@
|
|
|
|
|
|
package org.apache.hadoop.yarn.server.federation.policies.router;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Random;
|
|
|
+
|
|
|
import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext;
|
|
|
import org.apache.hadoop.yarn.exceptions.YarnException;
|
|
|
import org.apache.hadoop.yarn.server.federation.policies.BaseFederationPoliciesTest;
|
|
|
import org.apache.hadoop.yarn.server.federation.policies.exceptions.FederationPolicyException;
|
|
|
import org.apache.hadoop.yarn.server.federation.store.records.SubClusterId;
|
|
|
+import org.apache.hadoop.yarn.server.federation.store.records.SubClusterIdInfo;
|
|
|
+import org.apache.hadoop.yarn.server.federation.store.records.SubClusterInfo;
|
|
|
+import org.apache.hadoop.yarn.server.federation.utils.FederationPoliciesTestUtil;
|
|
|
import org.apache.hadoop.yarn.util.resource.Resources;
|
|
|
import org.junit.Assert;
|
|
|
import org.junit.Test;
|
|
@@ -40,12 +48,43 @@ public abstract class BaseRouterPoliciesTest
|
|
|
ApplicationSubmissionContext.newInstance(null, null, null, null, null,
|
|
|
false, false, 0, Resources.none(), null, false, null, null);
|
|
|
SubClusterId chosen =
|
|
|
- localPolicy.getHomeSubcluster(applicationSubmissionContext);
|
|
|
+ localPolicy.getHomeSubcluster(applicationSubmissionContext, null);
|
|
|
Assert.assertNotNull(chosen);
|
|
|
}
|
|
|
|
|
|
@Test(expected = FederationPolicyException.class)
|
|
|
public void testNullAppContext() throws YarnException {
|
|
|
- ((FederationRouterPolicy) getPolicy()).getHomeSubcluster(null);
|
|
|
+ ((FederationRouterPolicy) getPolicy()).getHomeSubcluster(null, null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testBlacklistSubcluster() throws YarnException {
|
|
|
+ FederationRouterPolicy localPolicy = (FederationRouterPolicy) getPolicy();
|
|
|
+ ApplicationSubmissionContext applicationSubmissionContext =
|
|
|
+ ApplicationSubmissionContext.newInstance(null, null, null, null, null,
|
|
|
+ false, false, 0, Resources.none(), null, false, null, null);
|
|
|
+ Map<SubClusterId, SubClusterInfo> activeSubClusters =
|
|
|
+ getActiveSubclusters();
|
|
|
+ if (activeSubClusters != null && activeSubClusters.size() > 1
|
|
|
+ && !(localPolicy instanceof RejectRouterPolicy)) {
|
|
|
+ // blacklist all the active subcluster but one.
|
|
|
+ Random random = new Random();
|
|
|
+ List<SubClusterId> blacklistSubclusters =
|
|
|
+ new ArrayList<SubClusterId>(activeSubClusters.keySet());
|
|
|
+ SubClusterId removed = blacklistSubclusters
|
|
|
+ .remove(random.nextInt(blacklistSubclusters.size()));
|
|
|
+ // bias LoadBasedRouterPolicy
|
|
|
+ getPolicyInfo().getRouterPolicyWeights()
|
|
|
+ .put(new SubClusterIdInfo(removed), 1.0f);
|
|
|
+ FederationPoliciesTestUtil.initializePolicyContext(getPolicy(),
|
|
|
+ getPolicyInfo(), getActiveSubclusters());
|
|
|
+
|
|
|
+ SubClusterId chosen = localPolicy.getHomeSubcluster(
|
|
|
+ applicationSubmissionContext, blacklistSubclusters);
|
|
|
+
|
|
|
+ // check that the selected sub-cluster is only one not blacklisted
|
|
|
+ Assert.assertNotNull(chosen);
|
|
|
+ Assert.assertEquals(removed, chosen);
|
|
|
+ }
|
|
|
}
|
|
|
}
|