private EvaluatorManager getNewEvaluatorManagerInstanceForResource(
final ResourceEvent resourceEvent) {
NodeDescriptor nodeDescriptor = this.resourceCatalog.getNode(resourceEvent.getNodeId());
if (nodeDescriptor == null) {
final String nodeId = resourceEvent.getNodeId();
LOG.log(Level.WARNING, "Node {} is not in our catalog, adding it", nodeId);
final String[] hostNameAndPort = nodeId.split(":");
Validate.isTrue(hostNameAndPort.length == 2);
final NodeDescriptorEvent nodeDescriptorEvent = NodeDescriptorEventImpl.newBuilder().setIdentifier(nodeId)
.setHostName(hostNameAndPort[0]).setPort(Integer.parseInt(hostNameAndPort[1]))
.setMemorySize(resourceEvent.getResourceMemory())
.setRackName(resourceEvent.getRackName().get()).build();
((ResourceCatalogImpl) resourceCatalog).handle(nodeDescriptorEvent);
nodeDescriptor = this.resourceCatalog.getNode(nodeId);
}
final EvaluatorDescriptorImpl evaluatorDescriptor = new EvaluatorDescriptorImpl(nodeDescriptor,
resourceEvent.getResourceMemory(), resourceEvent.getVirtualCores().get(),
processFactory.newEvaluatorProcess(), resourceEvent.getRuntimeName());
LOG.log(Level.FINEST, "Resource allocation: new evaluator id[{0}]", resourceEvent.getIdentifier());
final EvaluatorManager evaluatorManager =
getNewEvaluatorManagerInstance(resourceEvent.getIdentifier(), evaluatorDescriptor);
return evaluatorManager;
}