Allow configuration manager to accept non-prod jobs with SLAPolicy (#87)
* Allow non-production tasks to be accepted when they have SLAPolicy attached to them and the -sla_aware_kill_non_prod is set to true.
diff --git a/src/main/java/org/apache/aurora/scheduler/app/AppModule.java b/src/main/java/org/apache/aurora/scheduler/app/AppModule.java
index edc13d4..184ff49 100644
--- a/src/main/java/org/apache/aurora/scheduler/app/AppModule.java
+++ b/src/main/java/org/apache/aurora/scheduler/app/AppModule.java
@@ -150,7 +150,8 @@
opts.app.allowContainerVolumes,
opts.sla.minRequiredInstances,
opts.sla.maxSlaDuration.as(Time.SECONDS),
- opts.app.allowedJobEnvironments),
+ opts.app.allowedJobEnvironments,
+ opts.sla.slaAwareKillNonProd),
opts.main.driverImpl,
opts);
}
diff --git a/src/main/java/org/apache/aurora/scheduler/configuration/ConfigurationManager.java b/src/main/java/org/apache/aurora/scheduler/configuration/ConfigurationManager.java
index e0f8702..4b2941d 100644
--- a/src/main/java/org/apache/aurora/scheduler/configuration/ConfigurationManager.java
+++ b/src/main/java/org/apache/aurora/scheduler/configuration/ConfigurationManager.java
@@ -103,6 +103,7 @@
private final Pattern allowedJobEnvironments;
private final int minRequiredInstances;
private final long maxSlaDurationSecs;
+ private final boolean slaAwareKillNonProd;
public ConfigurationManagerSettings(
ImmutableSet<Container._Fields> allowedContainerTypes,
@@ -114,7 +115,8 @@
boolean allowContainerVolumes,
int minRequiredInstances,
long maxSlaDurationSecs,
- String allowedJobEnvironment) {
+ String allowedJobEnvironment,
+ boolean slaAwareKillNonProd) {
this.allowedContainerTypes = requireNonNull(allowedContainerTypes);
this.allowDockerParameters = allowDockerParameters;
@@ -126,6 +128,7 @@
this.allowedJobEnvironments = Pattern.compile(requireNonNull(allowedJobEnvironment));
this.minRequiredInstances = minRequiredInstances;
this.maxSlaDurationSecs = maxSlaDurationSecs;
+ this.slaAwareKillNonProd = slaAwareKillNonProd;
}
}
@@ -231,8 +234,8 @@
int instanceCount) throws TaskDescriptionException {
if (config.isSetSlaPolicy()) {
- if (tierManager.getTier(ITaskConfig.build(config)).isRevocable()
- || tierManager.getTier(ITaskConfig.build(config)).isPreemptible()) {
+ if (!(settings.slaAwareKillNonProd
+ || tierManager.getTier(ITaskConfig.build(config)).isProduction())) {
throw new TaskDescriptionException(String.format(
"Tier '%s' does not support SlaPolicy.",
config.getTier()));
diff --git a/src/test/java/org/apache/aurora/scheduler/base/TaskTestUtil.java b/src/test/java/org/apache/aurora/scheduler/base/TaskTestUtil.java
index 39d5c10..c992205 100644
--- a/src/test/java/org/apache/aurora/scheduler/base/TaskTestUtil.java
+++ b/src/test/java/org/apache/aurora/scheduler/base/TaskTestUtil.java
@@ -93,7 +93,8 @@
true,
2,
1800L,
- ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS);
+ ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS,
+ false);
public static final ExecutorID EXECUTOR_ID = ExecutorID.newBuilder()
.setValue("PLACEHOLDER")
.build();
diff --git a/src/test/java/org/apache/aurora/scheduler/configuration/ConfigurationManagerTest.java b/src/test/java/org/apache/aurora/scheduler/configuration/ConfigurationManagerTest.java
index a99fa7a..8709137 100644
--- a/src/test/java/org/apache/aurora/scheduler/configuration/ConfigurationManagerTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/configuration/ConfigurationManagerTest.java
@@ -135,7 +135,8 @@
false,
MIN_REQUIRED_INSTANCES,
MAX_SLA_DURATION_SECS,
- ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS),
+ ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS,
+ false),
TaskTestUtil.TIER_MANAGER,
TaskTestUtil.THRIFT_BACKFILL,
TestExecutorSettings.THERMOS_EXECUTOR);
@@ -150,7 +151,8 @@
true,
MIN_REQUIRED_INSTANCES,
MAX_SLA_DURATION_SECS,
- ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS),
+ ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS,
+ false),
TaskTestUtil.TIER_MANAGER,
TaskTestUtil.THRIFT_BACKFILL,
TestExecutorSettings.THERMOS_EXECUTOR);
@@ -306,7 +308,8 @@
false,
MIN_REQUIRED_INSTANCES,
MAX_SLA_DURATION_SECS,
- ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS),
+ ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS,
+ false),
TaskTestUtil.TIER_MANAGER,
TaskTestUtil.THRIFT_BACKFILL,
TestExecutorSettings.THERMOS_EXECUTOR).validateAndPopulate(ITaskConfig.build(builder), 100);
@@ -332,7 +335,8 @@
false,
MIN_REQUIRED_INSTANCES,
MAX_SLA_DURATION_SECS,
- ".+"),
+ ".+",
+ false),
TaskTestUtil.TIER_MANAGER,
TaskTestUtil.THRIFT_BACKFILL,
TestExecutorSettings.THERMOS_EXECUTOR)
@@ -379,7 +383,8 @@
true,
MIN_REQUIRED_INSTANCES,
MAX_SLA_DURATION_SECS,
- "b.r"),
+ "b.r",
+ false),
TaskTestUtil.TIER_MANAGER,
TaskTestUtil.THRIFT_BACKFILL,
TestExecutorSettings.THERMOS_EXECUTOR)
@@ -387,6 +392,36 @@
}
@Test
+ public void testSlaPolicyNonProdTiersEnabled() throws Exception {
+ ITaskConfig config = ITaskConfig.build(
+ CONFIG_WITH_CONTAINER
+ .newBuilder()
+ .setTier(TaskTestUtil.DEV_TIER_NAME)
+ .setSlaPolicy(SlaPolicy.countSlaPolicy(
+ new CountSlaPolicy()
+ .setCount(MIN_REQUIRED_INSTANCES - 1))));
+
+ new ConfigurationManager(
+ new ConfigurationManagerSettings(
+ ALL_CONTAINER_TYPES,
+ true,
+ ImmutableList.of(new DockerParameter("foo", "bar")),
+ false,
+ true,
+ true,
+ true,
+ MIN_REQUIRED_INSTANCES,
+ MAX_SLA_DURATION_SECS,
+ ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS,
+ true),
+ TaskTestUtil.TIER_MANAGER,
+ TaskTestUtil.THRIFT_BACKFILL,
+ TestExecutorSettings.THERMOS_EXECUTOR).validateAndPopulate(
+ config,
+ MIN_REQUIRED_INSTANCES);
+ }
+
+ @Test
public void testCountSlaPolicyUnsupportedTier() throws Exception {
ITaskConfig config = ITaskConfig.build(
CONFIG_WITH_CONTAINER
diff --git a/src/test/java/org/apache/aurora/scheduler/thrift/ThriftIT.java b/src/test/java/org/apache/aurora/scheduler/thrift/ThriftIT.java
index f0199a4..aa11041 100644
--- a/src/test/java/org/apache/aurora/scheduler/thrift/ThriftIT.java
+++ b/src/test/java/org/apache/aurora/scheduler/thrift/ThriftIT.java
@@ -192,7 +192,8 @@
false,
20,
1800,
- ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS);
+ ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS,
+ false);
createThrift(configurationManagerSettings);