From 84a9e71ad5239899f56236c34a4125853fb74733 Mon Sep 17 00:00:00 2001 From: erbel <johannes.erbel@cs.uni-goettingen.de> Date: Sun, 7 Mar 2021 17:48:14 +0100 Subject: [PATCH] Add upscaler for spark --- .../java/de/ugoe/cs/rwm/mocci/DownScaler.java | 36 ++++++++++++++----- src/main/java/de/ugoe/cs/rwm/mocci/MAPE.java | 20 +++++------ .../cs/rwm/mocci/RegistryAndLoggerSetup.java | 32 ++++++++++++----- .../java/de/ugoe/cs/rwm/mocci/UpScaler.java | 9 ++--- 4 files changed, 62 insertions(+), 35 deletions(-) diff --git a/src/main/java/de/ugoe/cs/rwm/mocci/DownScaler.java b/src/main/java/de/ugoe/cs/rwm/mocci/DownScaler.java index 0303043..b06c2a3 100644 --- a/src/main/java/de/ugoe/cs/rwm/mocci/DownScaler.java +++ b/src/main/java/de/ugoe/cs/rwm/mocci/DownScaler.java @@ -42,25 +42,29 @@ public class DownScaler extends AbsScaler { } public Resource downScaleNodes() { + CachedResourceSet.getCache().clear(); runtimeModel = ModelUtility.loadOCCIintoEMFResource(conn.loadRuntimeModel(runtimePath)); + Configuration config = ((Configuration) runtimeModel.getContents().get(0)); boolean downScale = false; for (org.eclipse.cmf.occi.core.Resource res : config.getResources()) { if (res instanceof Compute) { Compute comp = (Compute) res; - if (comp.getTitle().contains("hadoop-worker-additional")) { + if (comp.getTitle().contains("worker")) { Monitorableproperty monProp = getAttachedCPUMonProp(comp); if (monProp != null && monProp.getMonitoringResult() != null) { if (monProp.getMonitoringResult().equals("None")) { - System.out.println(" VM with None CPU utilization found: " + comp.getId()); - addConnectedLinksAndComponents(comp); - resourcesToDelete.add(comp); - System.out.println( - " Delete Entities Around: " + comp.getTitle() + " (" + comp.getId() + ")"); - downScale = true; - break; + if (atLeastTwoWorkers(config)) { + System.out.println(" VM with None CPU utilization found: " + comp.getId()); + addConnectedLinksAndComponents(comp); + resourcesToDelete.add(comp); + System.out.println( + " Delete Entities Around: " + comp.getTitle() + " (" + comp.getId() + ")"); + downScale = true; + break; + } } } } @@ -87,6 +91,22 @@ public class DownScaler extends AbsScaler { } + private boolean atLeastTwoWorkers(Configuration config) { + int count = 0; + for (org.eclipse.cmf.occi.core.Resource res : config.getResources()) { + if (res instanceof Compute) { + if (res.getTitle().contains("worker")) { + count++; + } + } + } + if (count >= 2) { + return true; + } + return false; + + } + private Monitorableproperty getAttachedCPUMonProp(Compute comp) { for (Link link : comp.getRlinks()) { if (link instanceof Monitorableproperty) { diff --git a/src/main/java/de/ugoe/cs/rwm/mocci/MAPE.java b/src/main/java/de/ugoe/cs/rwm/mocci/MAPE.java index 03431ed..b07b59a 100644 --- a/src/main/java/de/ugoe/cs/rwm/mocci/MAPE.java +++ b/src/main/java/de/ugoe/cs/rwm/mocci/MAPE.java @@ -15,7 +15,6 @@ import java.nio.file.Path; import java.nio.file.Paths; import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.epsilon.eol.exceptions.EolRuntimeException; import org.json.JSONArray; import org.modmacao.occi.platform.Component; @@ -46,8 +45,7 @@ public class MAPE { /** * Making javadoc happy. * - * @param args - * Making javadoc happy. + * @param args Making javadoc happy. */ public static void main(String[] args) { System.out.println("Starting MAPE loop"); @@ -98,7 +96,7 @@ public class MAPE { switch (analysis) { case "upScale": System.out.println("Plan: upScale!"); - UpScaler upscaler = new UpScaler(conn, RUNTIMEPATH); + UpScalerSpark upscaler = new UpScalerSpark(conn, RUNTIMEPATH); return upscaler.upScaleNodes(); case "downScale": System.out.println("Plan: downScale!"); @@ -106,9 +104,13 @@ public class MAPE { return downscaler.downScaleNodes(); } return null; + } public static void execute(Resource runtimeModel) { + if (runtimeModel == null) { + System.out.println("Execute: Skipped as no scaling planned"); + } System.out.println("Execute: Deploying adjusted Model"); Path occiPath = RUNTIMEPATH; @@ -116,14 +118,8 @@ public class MAPE { trans2.setTransformationProperties(RegistryAndLoggerSetup.manNWRuntimeId, RegistryAndLoggerSetup.sshKey, RegistryAndLoggerSetup.userData, RegistryAndLoggerSetup.manNWid); - try { - trans2.transform(runtimeModel, occiPath); - } catch (EolRuntimeException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - runtimeModel = ModelUtility.loadOCCIintoEMFResource(occiPath); + // trans2.transform(runtimeModel, occiPath); + // runtimeModel = ModelUtility.loadOCCIintoEMFResource(occiPath); MartDeployer deployer; if (conn instanceof MartConnector) { diff --git a/src/main/java/de/ugoe/cs/rwm/mocci/RegistryAndLoggerSetup.java b/src/main/java/de/ugoe/cs/rwm/mocci/RegistryAndLoggerSetup.java index f4fc1f7..4b1adc9 100644 --- a/src/main/java/de/ugoe/cs/rwm/mocci/RegistryAndLoggerSetup.java +++ b/src/main/java/de/ugoe/cs/rwm/mocci/RegistryAndLoggerSetup.java @@ -16,6 +16,7 @@ import org.apache.log4j.Logger; import org.eclipse.cmf.occi.core.OCCIPackage; import org.eclipse.cmf.occi.core.util.OcciRegistry; import org.eclipse.cmf.occi.crtp.CrtpPackage; +import org.eclipse.cmf.occi.docker.DockerPackage; import org.eclipse.cmf.occi.infrastructure.InfrastructurePackage; import org.modmacao.ansibleconfiguration.AnsibleconfigurationPackage; import org.modmacao.occi.platform.PlatformPackage; @@ -29,6 +30,7 @@ import de.ugoe.cs.rwm.docci.deprovisioner.Deprovisioner; import de.ugoe.cs.rwm.docci.executor.Executor; import de.ugoe.cs.rwm.docci.provisioner.Provisioner; import de.ugoe.cs.rwm.docci.retriever.ModelRetriever; +import de.ugoe.cs.rwm.domain.workload.WorkloadPackage; import de.ugoe.cs.rwm.tocci.Transformator; import modmacao.ModmacaoPackage; import monitoring.MonitoringPackage; @@ -48,7 +50,7 @@ public class RegistryAndLoggerSetup { } private static void loggerSetup() { - Logger.getLogger(Transformator.class.getName()).setLevel(Level.OFF); + Logger.getLogger(Transformator.class.getName()).setLevel(Level.INFO); Logger.getLogger(Connector.class.getName()).setLevel(Level.OFF); Logger.getLogger(ModelRetriever.class.getName()).setLevel(Level.OFF); Logger.getLogger(Comparator.class.getName()).setLevel(Level.OFF); @@ -60,7 +62,6 @@ public class RegistryAndLoggerSetup { } private static void registrySetup() { - InfrastructurePackage.eINSTANCE.eClass(); OCCIPackage.eINSTANCE.eClass(); ModmacaoPackage.eINSTANCE.eClass(); @@ -72,20 +73,25 @@ public class RegistryAndLoggerSetup { MonitoringPackage.eINSTANCE.eClass(); PlatformPackage.eINSTANCE.eClass(); CrtpPackage.eINSTANCE.eClass(); + WorkloadPackage.eINSTANCE.eClass(); + DockerPackage.eINSTANCE.eClass(); + + OcciRegistry.getInstance().registerExtension("http://schemas.ugoe.cs.rwm/domain/workload#", + OCCIPackage.class.getClassLoader().getResource("model/workload.occie").toString()); OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/occi/platform#", - PlatformPackage.class.getClassLoader().getResource("model/platform.occie").toString()); + OCCIPackage.class.getClassLoader().getResource("model/platform.occie").toString()); OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/modmacao#", - ModmacaoPackage.class.getClassLoader().getResource("model/modmacao.occie").toString()); + OCCIPackage.class.getClassLoader().getResource("model/modmacao.occie").toString()); OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/openstack/runtime#", - OpenstackruntimePackage.class.getClassLoader().getResource("model/openstackruntime.occie").toString()); + OCCIPackage.class.getClassLoader().getResource("model/openstackruntime.occie").toString()); OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/openstack/swe#", - OssweruntimePackage.class.getClassLoader().getResource("model/openstackruntime.occie").toString()); + OCCIPackage.class.getClassLoader().getResource("model/openstackruntime.occie").toString()); OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/placement#", - PlacementPackage.class.getClassLoader().getResource("model/placement.occie").toString()); + OCCIPackage.class.getClassLoader().getResource("model/placement.occie").toString()); OcciRegistry.getInstance().registerExtension("http://schemas.ogf.org/occi/infrastructure#", - InfrastructurePackage.class.getClassLoader().getResource("model/Infrastructure.occie").toString()); + OCCIPackage.class.getClassLoader().getResource("model/Infrastructure.occie").toString()); OcciRegistry.getInstance().registerExtension("http://schemas.ogf.org/occi/core#", OCCIPackage.class.getClassLoader().getResource("model/Core.occie").toString()); OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/openstack/swe#", @@ -93,10 +99,18 @@ public class RegistryAndLoggerSetup { OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/occi/ansible#", OCCIPackage.class.getClassLoader().getResource("model/ansibleconfiguration.occie").toString()); OcciRegistry.getInstance().registerExtension("http://schemas.ugoe.cs.rwm/monitoring#", - MonitoringPackage.class.getClassLoader().getResource("model/monitoring.occie").toString()); + OCCIPackage.class.getClassLoader().getResource("model/monitoring.occie").toString()); OcciRegistry.getInstance().registerExtension("http://schemas.ogf.org/occi/infrastructure/compute/template/1.1#", OCCIPackage.class.getClassLoader().getResource("model/crtp.occie").toString()); + OcciRegistry.getInstance().registerExtension("http://occiware.org/occi/docker#", + OCCIPackage.class.getClassLoader().getResource("model/docker.occie").toString()); + + for (String ext : OcciRegistry.getInstance().getRegisteredExtensions()) { + System.out.println(ext); + } + + System.out.println(OcciRegistry.getInstance().getFileURI("http://schemas.ugoe.cs.rwm/domain/workload#")); // Registry.INSTANCE.getExtensionToFactoryMap().put("*", new // OCCIResourceFactoryImpl()); diff --git a/src/main/java/de/ugoe/cs/rwm/mocci/UpScaler.java b/src/main/java/de/ugoe/cs/rwm/mocci/UpScaler.java index ff915e8..2297525 100644 --- a/src/main/java/de/ugoe/cs/rwm/mocci/UpScaler.java +++ b/src/main/java/de/ugoe/cs/rwm/mocci/UpScaler.java @@ -17,6 +17,7 @@ import org.eclipse.cmf.occi.core.AttributeState; import org.eclipse.cmf.occi.core.Configuration; import org.eclipse.cmf.occi.core.Mixin; import org.eclipse.cmf.occi.core.MixinBase; +import org.eclipse.cmf.occi.docker.DockerFactory; import org.eclipse.cmf.occi.infrastructure.Compute; import org.eclipse.cmf.occi.infrastructure.ComputeStatus; import org.eclipse.cmf.occi.infrastructure.Ipnetworkinterface; @@ -28,12 +29,7 @@ import org.modmacao.placement.Placementlink; import de.ugoe.cs.rwm.docci.ModelUtility; import de.ugoe.cs.rwm.docci.connector.Connector; -import monitoring.Datagatherer; -import monitoring.Dataprocessor; -import monitoring.Monitorableproperty; -import monitoring.Occiresultprovider; -import monitoring.Resultprovider; -import monitoring.Sensor; +import monitoring.*; import ossweruntime.Ubuntu_xenialxerus; public class UpScaler extends AbsScaler { @@ -64,6 +60,7 @@ public class UpScaler extends AbsScaler { System.out.println(" Adding Compute Node to Model"); Compute comp = iFactory.createCompute(); comp.setOcciComputeState(ComputeStatus.ACTIVE); + comp.setKind(DockerFactory.eINSTANCE.createContainer().getKind()); AttributeState state = factory.createAttributeState(); state.setName("occi.compute.state"); -- GitLab