package org.ow2.choreos.ee.nodes.selector; import org.ow2.choreos.nodes.NodeNotCreatedException; import org.ow2.choreos.nodes.NodePoolManager; import org.ow2.choreos.nodes.datamodel.CloudNode; import org.ow2.choreos.nodes.datamodel.NodeSpec; import org.ow2.choreos.selectors.ObjectCreationException; import org.ow2.choreos.selectors.ObjectFactory; import org.ow2.choreos.services.datamodel.DeployableServiceSpec; import org.ow2.choreos.utils.TimeoutsAndTrials; class NodeFactory implements ObjectFactory<CloudNode, DeployableServiceSpec> { private NodePoolManager npm; public NodeFactory(NodePoolManager npm) { this.npm = npm; } @Override public CloudNode createNewInstance(DeployableServiceSpec spec) throws ObjectCreationException { try { NodeSpec nodeSpec = new NodeSpec(); nodeSpec.setResourceImpact(spec.getResourceImpact()); return this.npm.createNode(nodeSpec); } catch (NodeNotCreatedException e) { throw new ObjectCreationException(); } } @Override public int getTimeoutInSeconds() { int nodeCreationTimeout = TimeoutsAndTrials.get("NODE_CREATION_TIMEOUT"); int nodeCreationTrials = TimeoutsAndTrials.get("NODE_CREATION_TRIALS"); int firstSshTimeout = TimeoutsAndTrials.get("FIRST_CONNECT_SSH_TIMEOUT"); int bootstrapTimeout = TimeoutsAndTrials.get("BOOTSTRAP_TIMEOUT"); int bootstrapTrials = TimeoutsAndTrials.get("BOOTSTRAP_TRIALS"); int oneReqPerSec = 2 * 100; int timeout = nodeCreationTimeout * nodeCreationTrials + firstSshTimeout + bootstrapTimeout * bootstrapTrials + oneReqPerSec; timeout += timeout * 0.3; return timeout; } }