diff --git a/configuration.md b/configuration.md
index ab66d78..24f9bfa 100644
--- a/configuration.md
+++ b/configuration.md
@@ -133,6 +133,14 @@ default values.
Mesos reservations. Consult the Mesos documentation for details.
+
+ mapred.mesos.role.strict
+ false
+
+ Force the framework to only ever accept resource offers that are of the
+ role configured in "mapred.mesos.role".
+
+
diff --git a/src/main/java/org/apache/hadoop/mapred/ResourcePolicy.java b/src/main/java/org/apache/hadoop/mapred/ResourcePolicy.java
index e6b10ea..c2d4aff 100644
--- a/src/main/java/org/apache/hadoop/mapred/ResourcePolicy.java
+++ b/src/main/java/org/apache/hadoop/mapred/ResourcePolicy.java
@@ -260,6 +260,20 @@ public void resourceOffers(SchedulerDriver schedulerDriver,
}
}
+ // Verify the resource roles are what we need
+ if (scheduler.conf.getBoolean("mapred.mesos.role.strict", false)) {
+ String expectedRole = scheduler.conf.get("mapred.mesos.role", "*");
+ if (!cpuRole.equals(expectedRole) ||
+ !memRole.equals(expectedRole) ||
+ !diskRole.equals(expectedRole) ||
+ !portsRole.equals(expectedRole)) {
+ LOG.info("Declining offer with invalid role " + expectedRole);
+
+ schedulerDriver.declineOffer(offer.getId());
+ continue;
+ }
+ }
+
final boolean sufficient = computeSlots();
double taskCpus = (mapSlots + reduceSlots) * slotCpus + containerCpus;