use of es.bsc.compss.types.CloudProvider in project compss by bsc-wdc.
the class CloudManager method registerCloudProvider.
/**
* Adds a new Provider to the management
*
* @param providerName
* @param limitOfVMs
* @param runtimeConnectorClass
* @param connectorJarPath
* @param connectorMainClass
* @param connectorProperties
*
* @return
* @throws es.bsc.compss.connectors.ConnectorException
*/
public CloudProvider registerCloudProvider(String providerName, Integer limitOfVMs, String runtimeConnectorClass, String connectorJarPath, String connectorMainClass, Map<String, String> connectorProperties) throws ConnectorException {
CloudProvider cp = new CloudProvider(providerName, limitOfVMs, runtimeConnectorClass, connectorJarPath, connectorMainClass, connectorProperties);
useCloud = true;
providers.put(cp.getName(), cp);
return cp;
}
use of es.bsc.compss.types.CloudProvider in project compss by bsc-wdc.
the class ExternalAdaptationManager method cloudCreation.
private void cloudCreation(String providerName, String typeName, String imageName) {
if (providerName != null && typeName != null && imageName != null) {
CloudProvider cp = ResourceManager.getCloudProvider(providerName);
if (cp != null) {
CloudImageDescription imageDescription = cp.getImage(imageName);
CloudInstanceTypeDescription typeDescription = cp.getInstanceType(typeName);
CloudMethodResourceDescription cmrd = new CloudMethodResourceDescription(typeDescription, imageDescription);
ResourceCreationRequest rcr = cp.requestResourceCreation(cmrd);
if (rcr != null) {
RUNTIME_LOGGER.info(LOG_PREFIX + "Submited external request for creating (" + typeName + ", " + imageName + ") in " + providerName);
rcr.print(RESOURCES_LOGGER, DEBUG);
writePipe(resultPipe, ACK);
} else {
RUNTIME_LOGGER.error(LOG_PREFIX + "ERROR: Creating resource (" + typeName + ", " + imageName + ") in " + providerName);
writePipe(resultPipe, "ERROR: Error creating resource(" + typeName + ", " + imageName + ") in " + providerName);
}
} else {
RUNTIME_LOGGER.error(LOG_PREFIX + "ERROR: Provider " + providerName + " not found.");
writePipe(resultPipe, "ERROR: Provider " + providerName + " not found");
}
} else {
RUNTIME_LOGGER.error(LOG_PREFIX + "ERROR: One of the parameters is incorrect (" + typeName + ", " + imageName + "," + providerName + ")");
writePipe(resultPipe, "ERROR: One of the parameters is incorrect (" + typeName + ", " + imageName + "," + providerName + ")");
}
}
use of es.bsc.compss.types.CloudProvider in project compss by bsc-wdc.
the class ResourceLoader method loadCloudProvider.
private static boolean loadCloudProvider(CloudProviderType cp_project, es.bsc.compss.types.resources.jaxb.CloudProviderType cp_resources) {
String cpName = cp_project.getName();
String runtimeConnector = System.getProperty(COMPSsConstants.CONN);
String connectorJarPath = "";
String connectorMainClass = "";
Map<String, String> properties = new HashMap<>();
/* Add Endpoint information from resources.xml */
EndpointType endpoint = cp_resources.getEndpoint();
connectorJarPath = resources.getConnectorJarPath(endpoint);
connectorMainClass = resources.getConnectorMainClass(endpoint);
/* Add properties information ****************** */
properties.put(AbstractConnector.PROP_SERVER, resources.getServer(endpoint));
properties.put(AbstractConnector.PROP_PORT, resources.getPort(endpoint));
List<Object> objList = cp_project.getImagesOrInstanceTypesOrLimitOfVMs();
if (objList != null) {
for (Object obj : objList) {
if (obj instanceof CloudPropertiesType) {
CloudPropertiesType cloud_props = (CloudPropertiesType) obj;
for (CloudPropertyType prop : cloud_props.getProperty()) {
// TODO CloudProperties have context, name, value. Consider context (it is ignored now)
properties.put(prop.getName(), prop.getValue());
}
}
}
}
// Add application name property for some connectors (i.e. docker, vmm)
String appName = System.getProperty(COMPSsConstants.APP_NAME);
appName = appName.toLowerCase();
appName = appName.replace('.', '-');
properties.put(AbstractConnector.PROP_APP_NAME, appName);
/* Add images/instances information ******************** */
int limitOfVMs = -1;
// Seconds
int maxCreationTime = -1;
LinkedList<CloudImageDescription> images = new LinkedList<>();
LinkedList<CloudInstanceTypeDescription> instanceTypes = new LinkedList<>();
objList = cp_project.getImagesOrInstanceTypesOrLimitOfVMs();
if (objList != null) {
for (Object obj : objList) {
if (obj instanceof ImagesType) {
// Load images
ImagesType imageList = (ImagesType) obj;
for (ImageType im_project : imageList.getImage()) {
// Try to create image
es.bsc.compss.types.resources.jaxb.ImageType im_resources = resources.getImage(cp_resources, im_project.getName());
CloudImageDescription cid = createImage(im_project, im_resources, properties);
// Add to images list
if (cid != null) {
images.add(cid);
// Update max creation time
int localCT = cid.getCreationTime();
if (localCT > maxCreationTime) {
maxCreationTime = localCT;
}
}
}
} else if (obj instanceof InstanceTypesType) {
// Load images
InstanceTypesType instancesList = (InstanceTypesType) obj;
for (InstanceTypeType instance_project : instancesList.getInstanceType()) {
// Try to create instance
String instanceName = instance_project.getName();
es.bsc.compss.types.resources.jaxb.InstanceTypeType instance_resources = resources.getInstance(cp_resources, instanceName);
if (instance_resources != null) {
CloudInstanceTypeDescription cmrd = createInstance(instance_resources);
// Add to instance list
if (cmrd != null) {
instanceTypes.add(cmrd);
}
} else {
ErrorManager.warn("Instance " + instanceName + " not defined in resources.xml. Skipping");
}
}
} else if (obj instanceof Integer) {
// Limit Of VMs
limitOfVMs = (Integer) obj;
}
}
}
if (maxCreationTime > 0) {
properties.put(AbstractConnector.PROP_MAX_VM_CREATION_TIME, Integer.toString(maxCreationTime));
}
// Add Cloud Provider to CloudManager *****************************************/
CloudProvider provider;
try {
provider = ResourceManager.registerCloudProvider(cpName, limitOfVMs, runtimeConnector, connectorJarPath, connectorMainClass, properties);
} catch (Exception e) {
ErrorManager.warn("Exception loading CloudProvider " + cpName, e);
return false;
}
for (CloudImageDescription cid : images) {
provider.addCloudImage(cid);
}
for (CloudInstanceTypeDescription instance : instanceTypes) {
provider.addInstanceType(instance);
}
/* If we reach this point CP is loaded **************************************** */
return true;
}
use of es.bsc.compss.types.CloudProvider in project compss by bsc-wdc.
the class ResourceManager method increasedCloudWorker.
/**
* Increases the capabilities of a given cloud worker
*
* @param origin
* @param worker
* @param extension
*/
public static void increasedCloudWorker(ResourceCreationRequest origin, CloudMethodWorker worker, CloudMethodResourceDescription extension) {
synchronized (pool) {
CloudProvider cloudProvider = origin.getProvider();
cloudProvider.confirmedCreation(origin, worker, extension);
int[] maxTaskCount = worker.getSimultaneousTasks();
for (int coreId = 0; coreId < maxTaskCount.length; coreId++) {
poolCoreMaxConcurrentTasks[coreId] -= maxTaskCount[coreId];
}
worker.increaseFeatures(extension);
maxTaskCount = worker.getSimultaneousTasks();
for (int coreId = 0; coreId < maxTaskCount.length; coreId++) {
poolCoreMaxConcurrentTasks[coreId] += maxTaskCount[coreId];
}
pool.defineCriticalSet();
}
ResourceUpdate<MethodResourceDescription> ru = new PerformedIncrease<>(extension);
resourceUser.updatedResource(worker, ru);
// Log modified resource
RESOURCES_LOGGER.info("TIMESTAMP = " + String.valueOf(System.currentTimeMillis()));
RESOURCES_LOGGER.info("INFO_MSG = [Resource modified. Name = " + worker.getName() + "]");
RUNTIME_LOGGER.info("Resource modified. Name = " + worker.getName());
}
use of es.bsc.compss.types.CloudProvider in project compss by bsc-wdc.
the class ResourceManager method terminateCloudResource.
public static void terminateCloudResource(CloudMethodWorker worker, CloudMethodResourceDescription reduction) {
if (worker.getDescription().getTypeComposition().isEmpty()) {
pool.delete(worker);
RESOURCES_LOGGER.info("TIMESTAMP = " + String.valueOf(System.currentTimeMillis()));
RESOURCES_LOGGER.info("INFO_MSG = [Resource removed from the pool. Name = " + worker.getName() + "]");
RUNTIME_LOGGER.info("Resource removed from the pool. Name = " + worker.getName());
}
CloudProvider cp = worker.getProvider();
cp.requestResourceReduction(worker, reduction);
}
Aggregations