use of es.bsc.compss.types.resources.description.CloudImageDescription in project compss by bsc-wdc.
the class CreationThread method prepareNewResource.
private CloudMethodWorker prepareNewResource(VM vm) throws ConnectorException {
CloudMethodResourceDescription granted = vm.getDescription();
CloudImageDescription cid = granted.getImage();
Map<String, String> workerProperties = cid.getProperties();
String user = cid.getConfig().getUser();
String password = workerProperties.get(AbstractConnector.PROPERTY_PASSW_NAME);
try {
operations.configureAccess(granted.getName(), user, password);
} catch (ConnectorException e) {
RUNTIME_LOGGER.error(ERROR_CONFIGURE_ACCESS_VM + granted.getName(), e);
RESOURCE_LOGGER.error("ERROR_MSG = [\n\t" + ERROR_CONFIGURE_ACCESS_VM + "\n\tNAME = " + granted.getName() + "\n\tPROVIDER = " + provider + "\n]", e);
throw e;
}
try {
operations.prepareMachine(granted.getName(), cid);
} catch (ConnectorException e) {
RUNTIME_LOGGER.error(ERROR_PREPARING_VM + granted.getName(), e);
RESOURCE_LOGGER.error("ERROR_MSG = [\n\t" + ERROR_PREPARING_VM + granted.getName() + "]", e);
throw e;
}
CloudMethodWorker worker;
MethodConfiguration mc = cid.getConfig();
int limitOfTasks = mc.getLimitOfTasks();
int computingUnits = granted.getTotalCPUComputingUnits();
if (limitOfTasks < 0 && computingUnits < 0) {
mc.setLimitOfTasks(0);
mc.setTotalComputingUnits(0);
} else {
mc.setLimitOfTasks(Math.max(limitOfTasks, computingUnits));
mc.setTotalComputingUnits(Math.max(limitOfTasks, computingUnits));
}
mc.setHost(granted.getName());
mc.setLimitOfGPUTasks(granted.getTotalGPUComputingUnits());
mc.setTotalGPUComputingUnits(granted.getTotalGPUComputingUnits());
mc.setLimitOfFPGATasks(granted.getTotalFPGAComputingUnits());
mc.setTotalFPGAComputingUnits(granted.getTotalFPGAComputingUnits());
mc.setLimitOfOTHERSTasks(granted.getTotalOTHERComputingUnits());
mc.setTotalOTHERComputingUnits(granted.getTotalOTHERComputingUnits());
worker = new CloudMethodWorker(granted.getName(), provider, granted, mc, cid.getSharedDisks());
try {
worker.announceCreation();
} catch (Exception e) {
RUNTIME_LOGGER.error("Machine " + granted.getName() + " shut down because an error announcing creation");
RESOURCE_LOGGER.error("ERROR_MSG = [\n\t" + ERROR_ANNOUNCE_VM + "\n\tNAME = " + granted.getName() + "\n\tPROVIDER = " + provider + "\n]", e);
throw new ConnectorException(e);
}
// Add the new machine to ResourceManager
if (operations.getTerminate()) {
RESOURCE_LOGGER.info("INFO_MSG = [\n\t" + WARN_VM_REFUSED + "\n\tRESOURCE_NAME = " + granted.getName() + "\n]");
try {
worker.announceDestruction();
} catch (Exception e) {
RESOURCE_LOGGER.error("ERROR_MSG = [\n\t" + ERROR_ANNOUNCE_VM_DESTROY + "\n\tVM_NAME = " + granted.getName() + "\n]", e);
}
Semaphore sem = new Semaphore(0);
ShutdownListener sl = new ShutdownListener(sem);
worker.stop(sl);
sl.enable();
try {
sem.acquire();
} catch (Exception e) {
RESOURCE_LOGGER.error(ERROR_WORKER_SHUTDOWN);
}
throw new ConnectorException(ERROR_USELESS_VM);
}
return worker;
}
Aggregations