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(); // downcasting not to change the API ((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; }