in myriad-scheduler/src/main/java/org/apache/myriad/scheduler/TaskUtils.java [85:113]
public Iterable<Protos.Resource> getScalarResource(Protos.Offer offer, String name, Double value, Double used) {
String role = cfg.getFrameworkRole();
List<Protos.Resource> resources = new ArrayList<Protos.Resource>();
double resourceDifference = 0; //used to determine the resource difference of value and the resources requested from role *
//Find role by name, must loop through resources
for (Protos.Resource r : offer.getResourcesList()) {
if (r.getName().equals(name) && r.hasRole() && r.getRole().equals(role) && r.hasScalar()) {
//Use Math.max in case used>resourceValue
resourceDifference = Math.max(r.getScalar().getValue() - used, 0.0);
if (resourceDifference > 0) {
resources.add(Protos.Resource.newBuilder().setName(name).setType(Protos.Value.Type.SCALAR)
.setScalar(Protos.Value.Scalar.newBuilder().setValue(Math.min(value, resourceDifference)).build())
.setRole(role).build());
}
break;
} else if (r.getName().equals(name) && r.hasRole() && r.getRole().equals(role)) {
//Should never get here, there must be a miss configured slave
LOGGER.warn("Resource with name: " + name + "expected type to be SCALAR check configuration on: " + offer.getHostname());
}
}
//Assume enough resources are present in default value, if not we shouldn't have gotten to this function.
if (value - resourceDifference > 0) {
resources.add(Protos.Resource.newBuilder().setName(name).setType(Protos.Value.Type.SCALAR)
.setScalar(Protos.Value.Scalar.newBuilder().setValue(value - resourceDifference).build())
.build()); //no role assumes default
}
return resources;
}