From 8adcf67e5d866f0c87966e44c9c69d19d28f30b9 Mon Sep 17 00:00:00 2001 From: Nikolaus Huber <nikolaus.huber@uni-wuerzburg.de> Date: Sun, 22 Sep 2013 12:52:59 +0000 Subject: [PATCH] Fix: BlueYonder specific DataRepo git-svn-id: https://se1.informatik.uni-wuerzburg.de/usvn/svn/code/code/DMM/trunk@13143 9e42b895-fcda-4063-8a3b-11be15eb1bbd --- .../adaptation/AdaptationControl.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/AdaptationControl.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/AdaptationControl.java index 7e0fb53f..78e5b181 100644 --- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/AdaptationControl.java +++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/AdaptationControl.java @@ -15,17 +15,25 @@ import edu.kit.ipd.descartes.adaptation.analysis.IModelAnalyzer; import edu.kit.ipd.descartes.adaptation.evaluation.performance.IEvaluator; import edu.kit.ipd.descartes.adaptation.evaluation.performance.WeightingFunctionEvaluator; import edu.kit.ipd.descartes.adaptation.event.EventTypeEnum; +import edu.kit.ipd.descartes.adaptation.model.adaptation.dmm.BlueYonderExperimentTracker; import edu.kit.ipd.descartes.adaptation.model.adaptation.dmm.DmmModelActionHandler; +import edu.kit.ipd.descartes.adaptation.model.adaptation.dmm.TacticsHistory; import edu.kit.ipd.descartes.adaptation.model.adaptation.dmm.util.ObjectivesHelper; import edu.kit.ipd.descartes.adaptation.analysis.pcm.PcmModelAnalyzer; import edu.kit.ipd.descartes.adaptation.model.repository.dmm.AdaptationProcessModelLoader; import edu.kit.ipd.descartes.adaptation.model.repository.perfdatarepo.IPerformanceDataRepositoryHandler; +import edu.kit.ipd.descartes.adaptation.model.repository.perfdatarepo.ObservationRepositoryHelper; +import edu.kit.ipd.descartes.adaptation.model.repository.perfdatarepo.PerfDataRepoConverter; +import edu.kit.ipd.descartes.adaptation.model.repository.perfdatarepo.PerformanceDataRepositoryHandler; import edu.kit.ipd.descartes.adaptation.model.repository.perfdatarepo.PerformanceDataRepositoryHandlerFactory; import edu.kit.ipd.descartes.mm.adaptation.AdaptationProcess; import edu.kit.ipd.descartes.mm.adaptation.Event; import edu.kit.ipd.descartes.mm.adaptation.Strategy; import edu.kit.ipd.descartes.mm.adaptation.WeightedTactic; import edu.kit.ipd.descartes.perfdatarepo.Impact; +import edu.kit.ipd.descartes.perfdatarepo.Result; +import edu.kit.ipd.descartes.ql.models.repository.Observation; +import edu.kit.ipd.descartes.ql.models.repository.ObservationRepository; public class AdaptationControl { @@ -94,7 +102,7 @@ public class AdaptationControl { // set handlers dmmModelActionHandler = new DmmModelActionHandler(); executor = new TacticExecutor(dmmModelActionHandler); - modelAnalyzer = new PcmModelAnalyzer(); + modelAnalyzer = new PcmModelAnalyzer(perfDataRepoHandler); evaluator = new WeightingFunctionEvaluator(); } catch (IOException e) { logger.error("Error while initializinig controller.", e); @@ -147,7 +155,17 @@ public class AdaptationControl { */ public boolean isObjectiveFulfilled() { logger.debug("Checking if objective <<" + cause.getTriggers().getObjective().getName() + ">> is fulfilled..."); - boolean flag = ObjectivesHelper.isObjectiveFulfilled(cause, perfDataRepoHandler.getCurrentSystemState()); + Result currentSystemState = perfDataRepoHandler.getCurrentSystemState(); + // TODO: Blue Yonder specific, introduce abstraction layer + WeightedTactic latestTactic = TacticsHistory.getInstance().getLatestAppliedTactic(); + if (latestTactic != null && !(perfDataRepoHandler instanceof PerformanceDataRepositoryHandler)) { + String expName = BlueYonderExperimentTracker.getInstance() + .getExperimentNameForDistributedDataCenter(AdaptationProcessModelLoader.getDistributedDataCenter()); + logger.debug("Searching for result of " + expName); + Observation o = ObservationRepositoryHelper.getResultEndingWith(expName, (ObservationRepository) perfDataRepoHandler.getRepository()); + currentSystemState = PerfDataRepoConverter.convertResult(o); + } + boolean flag = ObjectivesHelper.isObjectiveFulfilled(cause, currentSystemState); if (flag) logger.info("Problem that caused event " + cause.getName() + " has been solved, Objective is fulfilled."); else @@ -170,12 +188,11 @@ public class AdaptationControl { * repository. */ public void analyzeModel() { - modelAnalyzer.analyze(); WeightedTactic tactic = TacticsHistory.getInstance().getLatestAppliedTactic(); if (TacticsHistory.getInstance().wasLatestTacticSuccessful()) { - // TODO Call model analysis - Impact latestImpact = perfDataRepoHandler.getLatestImpact(tactic); + modelAnalyzer.analyze(); + Impact latestImpact = modelAnalyzer.getLatestImpact(); if (latestImpact != null) tactic.setLastImpact(latestImpact); } else { -- GitLab