/// <summary> /// Attempts to create a node on the specified machine using the specified provider. /// </summary> /// <param name="nodeProvider">The provider used to create the node.</param> /// <param name="nodeConfiguration">The <see cref="NodeConfiguration"/> to use.</param> /// <param name="numberOfNodesToCreate">Number of nodes to be reused ot created.</param> /// <returns>List of created nodes.</returns> private IList <NodeInfo> AttemptCreateNode(INodeProvider nodeProvider, NodeConfiguration nodeConfiguration, int numberOfNodesToCreate) { // If no provider was passed in, we obviously can't create a node. if (nodeProvider == null) { ErrorUtilities.ThrowInternalError("No node provider provided."); return(new List <NodeInfo>()); } // Are there any free slots on this provider? if (nodeProvider.AvailableNodes == 0) { return(new List <NodeInfo>()); } // Assign a global ID to the node we are about to create. int fromNodeId; if (nodeProvider is NodeProviderInProc) { fromNodeId = _inprocNodeId; } else { // Reserve node numbers for all needed nodes. fromNodeId = Interlocked.Add(ref _nextNodeId, numberOfNodesToCreate) - numberOfNodesToCreate; } // Create the node and add it to our mapping. IList <NodeInfo> nodes = nodeProvider.CreateNodes(fromNodeId, this, AcquiredNodeConfigurationFactory, numberOfNodesToCreate); foreach (NodeInfo node in nodes) { _nodeIdToProvider.Add(node.NodeId, nodeProvider); } return(nodes); NodeConfiguration AcquiredNodeConfigurationFactory(NodeInfo nodeInfo) { var config = nodeConfiguration.Clone(); config.NodeId = nodeInfo.NodeId; return(config); } }
private int AttemptCreateNode(INodeProvider nodeProvider, NodeConfiguration nodeConfiguration) { // If no provider was passed in, we obviously can't create a node. if (nodeProvider == null) { ErrorUtilities.ThrowInternalError("No node provider provided."); return(InvalidNodeId); } // Are there any free slots on this provider? if (nodeProvider.AvailableNodes == 0) { return(InvalidNodeId); } // Assign a global ID to the node we are about to create. int nodeId; if (nodeProvider is NodeProviderInProc) { nodeId = _inprocNodeId; } else { nodeId = _nextNodeId; _nextNodeId++; } NodeConfiguration configToSend = nodeConfiguration.Clone(); configToSend.NodeId = nodeId; // Create the node and add it to our mapping. bool createdNode = nodeProvider.CreateNode(nodeId, this, configToSend); if (!createdNode) { return(InvalidNodeId); } _nodeIdToProvider.Add(nodeId, nodeProvider); return(nodeId); }
/// <summary> /// Attempts to create a node on the specified machine using the specified provider. /// </summary> /// <param name="nodeProvider">The provider used to create the node.</param> /// <returns>The id of the node created.</returns> private int AttemptCreateNode(INodeProvider nodeProvider, NodeConfiguration nodeConfiguration) { // If no provider was passed in, we obviously can't create a node. if (null == nodeProvider) { ErrorUtilities.ThrowInternalError("No node provider provided."); return InvalidNodeId; } // Are there any free slots on this provider? if (nodeProvider.AvailableNodes == 0) { return InvalidNodeId; } // Assign a global ID to the node we are about to create. int nodeId = InvalidNodeId; if (nodeProvider is NodeProviderInProc) { nodeId = _inprocNodeId; } else { nodeId = _nextNodeId; _nextNodeId++; } NodeConfiguration configToSend = nodeConfiguration.Clone(); configToSend.NodeId = nodeId; // Create the node and add it to our mapping. bool createdNode = nodeProvider.CreateNode(nodeId, this, configToSend); if (!createdNode) { return InvalidNodeId; } _nodeIdToProvider.Add(nodeId, nodeProvider); return nodeId; }