From b593f8fd14d20d1f700c897ad0f674b873c29611 Mon Sep 17 00:00:00 2001 From: jialinsun Date: Fri, 6 Sep 2013 11:17:08 +0800 Subject: [PATCH 1/2] web gui modify and bug fix --- .../WEB-INF/freemarker/index.ftl | 48 ++- .../WEB-INF/freemarker/matrix.ftl | 11 +- .../WEB-INF/freemarker/metrics.ftl | 2 +- .../WEB-INF/freemarker/timeline-metrics.ftl | 14 +- .../resources/cosbench.css | 8 +- .../controller/web/IndexPageController.java | 1 + .../controller/web/MatrixPageController.java | 19 +- .../controller/loader/CSVSnapshotLoader.java | 20 +- .../loader/CSVWorkloadFileLoader.java | 66 ++-- .../cosbench/controller/loader/Loaders.java | 18 - .../loader/SimpleWorkloadLoader.java | 30 +- .../controller/model/WorkloadContext.java | 2 +- .../repository/RAMWorkloadRepository.java | 11 +- .../repository/WorkloadRepository.java | 2 + .../service/COSBControllerService.java | 331 +++++++++--------- .../cosbench/exporter/CSVMatrixExporter.java | 2 +- .../exporter/CSVWorkloadExporter.java | 3 + .../cosbench/service/ControllerService.java | 2 + 18 files changed, 346 insertions(+), 244 deletions(-) diff --git a/dev/cosbench-controller-web/WEB-INF/freemarker/index.ftl b/dev/cosbench-controller-web/WEB-INF/freemarker/index.ftl index 5f6399d0..a820a24a 100644 --- a/dev/cosbench-controller-web/WEB-INF/freemarker/index.ftl +++ b/dev/cosbench-controller-web/WEB-INF/freemarker/index.ftl @@ -37,7 +37,7 @@ } function findChecked(name) { var a = document.getElementsByName(name); - var value = ""; + var value = ''; for ( var i = 0; i < a.length; i++) { if (a[i].checked) { value += a[i].value; @@ -63,7 +63,12 @@ } } function resubmitWorkloads() { - var ids = findChecked('HistoryWorkload'); + var hids = findChecked('HistoryWorkload'); + var aids = findChecked('ArchivedWorkload'); + var ids = ''; + if(hids.length > 0) + ids = hids + '_'; + ids += aids; document.getElementById('resubmitIds').value = ids; document.getElementById('resubmitForm').submit(); } @@ -151,9 +156,10 @@

submit new workloads

config workloads

-

Historical Workloads

+
-

view performance matrix

+

Historical Workloads

+

view performance matrix

@@ -180,8 +186,38 @@
- <#if (hInfos?size < 10) > -

There are ${hInfos?size} Historical workloads.

+ +

Archived Workloads

+

view performance matrix

+ + + + + + + + + + + <#list archInfos as aInfo > + + + + + + + + + + +
IDNameDurationOp-InfoStateLink
${aInfo.id}${aInfo.workload.name}<#if aInfo.startDate?? >${aInfo.startDate?datetime}<#else>N/A - ${aInfo.stopDate?time} + <#list aInfo.allOperations as op > + ${op}<#if op_has_next>, + + ${aInfo.state?lower_case}view details
+ + <#if (hInfos?size + archInfos?size < 10) > +

There are ${hInfos?size + archInfos?size} Historical and Archived workloads.

diff --git a/dev/cosbench-controller-web/WEB-INF/freemarker/matrix.ftl b/dev/cosbench-controller-web/WEB-INF/freemarker/matrix.ftl index 606e3493..42b70448 100644 --- a/dev/cosbench-controller-web/WEB-INF/freemarker/matrix.ftl +++ b/dev/cosbench-controller-web/WEB-INF/freemarker/matrix.ftl @@ -18,7 +18,8 @@

Performance Matrix

Filters

- + + Operations: checked="true" /> Read @@ -251,7 +252,7 @@ <#if mInfo.totalSampleCount == 0 > N/A <#else> - <#assign sRatio = mInfo.sampleCount / mInfo.totalSampleCount > + <#assign sRatio = mInfo.ratio > ${sRatio?string("0.##%")} @@ -279,9 +280,9 @@

- show RT only - show T only - show BW only + show RT only + show T only + show BW only

go back to index

<#-- end of content --> diff --git a/dev/cosbench-controller-web/WEB-INF/freemarker/metrics.ftl b/dev/cosbench-controller-web/WEB-INF/freemarker/metrics.ftl index d8ad92c0..2f24ff02 100644 --- a/dev/cosbench-controller-web/WEB-INF/freemarker/metrics.ftl +++ b/dev/cosbench-controller-web/WEB-INF/freemarker/metrics.ftl @@ -88,7 +88,7 @@ - <#if mInfo.ratio == 0.0 > + <#if mInfo.totalSampleCount == 0 > N/A <#else> <#assign sRatio = mInfo.ratio > diff --git a/dev/cosbench-controller-web/WEB-INF/freemarker/timeline-metrics.ftl b/dev/cosbench-controller-web/WEB-INF/freemarker/timeline-metrics.ftl index 42ce3049..a0931948 100644 --- a/dev/cosbench-controller-web/WEB-INF/freemarker/timeline-metrics.ftl +++ b/dev/cosbench-controller-web/WEB-INF/freemarker/timeline-metrics.ftl @@ -13,22 +13,22 @@ <#assign allMetrics = ssInfo.report.allMetrics > <#list allMetrics as mInfo > - ${mInfo.sampleType} + ${mInfo.opName} <#list allMetrics as mInfo > - ${mInfo.sampleType} + ${mInfo.opName} <#list allMetrics as mInfo > - ${mInfo.sampleType} + ${mInfo.opName} <#list allMetrics as mInfo > - ${mInfo.sampleType} + ${mInfo.opName} <#list allMetrics as mInfo > - ${mInfo.sampleType} + ${mInfo.opName} <#list allMetrics as mInfo > - ${mInfo.sampleType} + ${mInfo.opName} <#break> @@ -127,7 +127,7 @@ <#list allMetrics as mInfo > - <#if mInfo.ratio == 0.0 > + <#if mInfo.totalSampleCount == 0 > N/A <#else> <#assign sRatio = mInfo.ratio > diff --git a/dev/cosbench-controller-web/resources/cosbench.css b/dev/cosbench-controller-web/resources/cosbench.css index 64184a89..894572f9 100644 --- a/dev/cosbench-controller-web/resources/cosbench.css +++ b/dev/cosbench-controller-web/resources/cosbench.css @@ -32,7 +32,7 @@ a:visited { } .content { - width: 1000px; + width: 1100px; margin-left: auto; margin-right: auto; } @@ -177,10 +177,16 @@ a:visited { background: #F4F4F4; } +.info-table tr.nohover:hover td{ + background-color: #FFFFFF; +} + .info-table tr:hover td { background-color: #CCD9E9; } + + /* --------------------------------------- * Text Styles * --------------------------------------- */ diff --git a/dev/cosbench-controller-web/src/com/intel/cosbench/controller/web/IndexPageController.java b/dev/cosbench-controller-web/src/com/intel/cosbench/controller/web/IndexPageController.java index 2122779a..e03d2d54 100644 --- a/dev/cosbench-controller-web/src/com/intel/cosbench/controller/web/IndexPageController.java +++ b/dev/cosbench-controller-web/src/com/intel/cosbench/controller/web/IndexPageController.java @@ -75,6 +75,7 @@ protected ModelAndView process(HttpServletRequest req, result.addObject("cInfo", controller.getControllerInfo()); result.addObject("aInfos", controller.getActiveWorkloads()); result.addObject("hInfos", controller.getHistoryWorkloads()); + result.addObject("archInfos", controller.getArchivedWorkloads()); return result; } } diff --git a/dev/cosbench-controller-web/src/com/intel/cosbench/controller/web/MatrixPageController.java b/dev/cosbench-controller-web/src/com/intel/cosbench/controller/web/MatrixPageController.java index 56c90be0..ad739606 100644 --- a/dev/cosbench-controller-web/src/com/intel/cosbench/controller/web/MatrixPageController.java +++ b/dev/cosbench-controller-web/src/com/intel/cosbench/controller/web/MatrixPageController.java @@ -17,10 +17,13 @@ package com.intel.cosbench.controller.web; +import java.io.IOException; + import javax.servlet.http.*; import org.springframework.web.servlet.ModelAndView; +import com.intel.cosbench.model.WorkloadInfo; import com.intel.cosbench.service.ControllerService; import com.intel.cosbench.web.AbstractController; @@ -56,7 +59,21 @@ protected ModelAndView process(HttpServletRequest req, if (others != null && others.length > 0) for (String other : others) result.addObject(other, true); - result.addObject("hInfos", controller.getHistoryWorkloads()); + if(req.getParameter("type").equals("histo")) + result.addObject("hInfos", controller.getHistoryWorkloads()); + else if (req.getParameter("type").equals("arch")) { + for (WorkloadInfo info : controller.getArchivedWorkloads()) { + if (info.getReport().getAllMetrics().length==0) { + try { + controller.getWorkloadLoader().loadWorkloadPageInfo(info); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + result.addObject("hInfos", controller.getArchivedWorkloads()); + } + result.addObject("type", req.getParameter("type")); return result; } diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/CSVSnapshotLoader.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/CSVSnapshotLoader.java index 7fc7cff6..d5cf5a61 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/CSVSnapshotLoader.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/CSVSnapshotLoader.java @@ -104,11 +104,25 @@ private List loadMetrics(String[] columns) { metric.setAvgResTime(getDoubleValue(columns[i + opNum * 2 + 1])); metric.setThroughput(getDoubleValue(columns[i + opNum * 3 + 1])); metric.setBandwidth(getDoubleValue(columns[i + opNum * 4 + 1])); - metric.setRatio(columns[i + opNum * 5 + 1].equalsIgnoreCase("N/A") ? 0D - : Double.valueOf(columns[i + opNum * 5 + 1].substring(0, - columns[i + opNum * 5 + 1].length() - 1)) / 100.0); +// metric.setRatio(columns[i + opNum * 5 + 1].equalsIgnoreCase("N/A") ? 0D +// : Double.valueOf(columns[i + opNum * 5 + 1].substring(0, +// columns[i + opNum * 5 + 1].length() - 1)) / 100.0); + setRatio(columns[i + opNum * 5 + 1], metric); metrics.add(metric); } return metrics; } + + private void setRatio(String column, Metrics metrics) { + if (!column.equalsIgnoreCase("N/A")) { + metrics.setRatio(Double.valueOf(column.substring(0, + column.length() - 1)) / 100.0); + metrics.setTotalSampleCount(metrics.getSampleCount() + / metrics.getRatio() > Integer.MAX_VALUE ? Integer.MAX_VALUE + : (int) (metrics.getSampleCount() / metrics.getRatio())); + } else { + metrics.setRatio(0D); + metrics.setTotalSampleCount(0); + } + } } diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/CSVWorkloadFileLoader.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/CSVWorkloadFileLoader.java index ff9eaf37..064b0dd1 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/CSVWorkloadFileLoader.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/CSVWorkloadFileLoader.java @@ -57,7 +57,7 @@ protected void readWorkload() throws IOException { stageId = "s" + index++; sameStage = false; } - if (columns[14].equalsIgnoreCase("completed")) { + if (columns[15].equalsIgnoreCase("completed")) { Metrics metrics = loadMetrics(columns); if (!sameStage) { Report report = new Report(); @@ -68,13 +68,13 @@ protected void readWorkload() throws IOException { workloadContext.getReport().addMetrics(metrics); } for (StageState state : StageState.values()) { - if (columns[14] + if (columns[15] .equalsIgnoreCase(state.toString().toLowerCase())) { workloadContext.getStageInfo(stageId).setState(state, true); break; } } - int pos = 14; + int pos = 15; while (!sameStage && ++pos <= columns.length - 1) { String str[] = columns[pos].split("@"); String stateName = str[0].trim(); @@ -89,7 +89,7 @@ protected void readWorkload() throws IOException { } } } - + private Metrics loadMetrics(String[] columns) { Metrics metrics = new Metrics(); int n = columns[1].lastIndexOf("-"); @@ -97,48 +97,60 @@ private Metrics loadMetrics(String[] columns) { if (n > 0) { metrics.setOpName(columns[1].substring(0, n)); metrics.setSampleType(columns[1].substring(n + 1)); - }else{ + } else { metrics.setOpName(columns[1]); metrics.setSampleType(columns[1]); } - metrics.setSampleCount(Integer.valueOf(columns[2])); - metrics.setByteCount(Integer.valueOf(columns[3])); - metrics.setAvgResTime(columns[4].equalsIgnoreCase("N/A") ? 0 - : Double.valueOf(columns[4])); + metrics.setOpType(columns[2]); + metrics.setSampleCount(Integer.valueOf(columns[3])); + metrics.setByteCount(Integer.valueOf(columns[4])); + metrics.setAvgResTime(columns[5].equalsIgnoreCase("N/A") ? 0 : Double + .valueOf(columns[5])); metrics.setLatency(loadHistogram(columns)); - metrics.setThroughput(Double.valueOf(columns[11])); - metrics.setBandwidth(Double.valueOf(columns[12])); - metrics.setRatio((columns[13].equalsIgnoreCase("N/A") ? 0 - : Double.valueOf(columns[13].substring(0, - columns[13].length() - 1)) / 100.0)); + metrics.setThroughput(Double.valueOf(columns[12])); + metrics.setBandwidth(Double.valueOf(columns[13])); + setRatio(columns[14], metrics); return metrics; } - + + private void setRatio(String column, Metrics metrics) { + if (!column.equalsIgnoreCase("N/A")) { + metrics.setRatio(Double.valueOf(column.substring(0, + column.length() - 1)) / 100.0); + metrics.setTotalSampleCount(metrics.getSampleCount() + / metrics.getRatio() > Integer.MAX_VALUE ? Integer.MAX_VALUE + : (int) (metrics.getSampleCount() / metrics.getRatio())); + } else { + metrics.setRatio(0D); + metrics.setTotalSampleCount(0); + } + } + private Histogram loadHistogram(String[] columns) { Histogram histogram = new Histogram(); long[] l_60 = new long[2]; - l_60[1] = columns[5].equalsIgnoreCase("N/A") ? 0L : Long - .valueOf(columns[5]); + l_60[1] = columns[6].equalsIgnoreCase("N/A") ? 0L : Long + .valueOf(columns[6]); histogram.set_60(l_60); long[] l_80 = new long[2]; - l_80[1] = columns[6].equalsIgnoreCase("N/A") ? 0L : Long - .valueOf(columns[6]); + l_80[1] = columns[7].equalsIgnoreCase("N/A") ? 0L : Long + .valueOf(columns[7]); histogram.set_80(l_80); long[] l_90 = new long[2]; - l_90[1] = columns[7].equalsIgnoreCase("N/A") ? 0L : Long - .valueOf(columns[7]); + l_90[1] = columns[8].equalsIgnoreCase("N/A") ? 0L : Long + .valueOf(columns[8]); histogram.set_90(l_90); long[] l_95 = new long[2]; - l_95[1] = columns[8].equalsIgnoreCase("N/A") ? 0L : Long - .valueOf(columns[8]); + l_95[1] = columns[9].equalsIgnoreCase("N/A") ? 0L : Long + .valueOf(columns[9]); histogram.set_95(l_95); long[] l_99 = new long[2]; - l_99[1] = columns[9].equalsIgnoreCase("N/A") ? 0L : Long - .valueOf(columns[9]); + l_99[1] = columns[10].equalsIgnoreCase("N/A") ? 0L : Long + .valueOf(columns[10]); histogram.set_99(l_99); long[] l_100 = new long[2]; - l_100[1] = columns[10].equalsIgnoreCase("N/A") ? 0L : Long - .valueOf(columns[10]); + l_100[1] = columns[11].equalsIgnoreCase("N/A") ? 0L : Long + .valueOf(columns[11]); histogram.set_100(l_100); return histogram; } diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/Loaders.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/Loaders.java index d9b8b53a..4d412ffd 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/Loaders.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/Loaders.java @@ -49,23 +49,5 @@ public static SnapshotLoader newSnapshotLoader(BufferedReader reader, stageId); return loader; } -// -// public static LatencyLoader newLatencyExporter(WorkloadInfo workload) { -// AbstractLatencyExporter exporter = new CSVLatencyExporter(); -// exporter.setWorkload(workload); -// return exporter; -// } -// -// public static LogLoader newLogExporter(WorkloadInfo workload) { -// SimpleLogExporter exporter = new SimpleLogExporter(); -// exporter.setWorkload(workload); -// return exporter; -// } -// -// public static MatrixLoader newMatrixExporter(WorkloadInfo workload) { -// AbstractMatrixExporter exporter = new CSVMatrixExporter(); -// exporter.setWorkload(workload); -// return exporter; -// } } diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/SimpleWorkloadLoader.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/SimpleWorkloadLoader.java index 778464fe..e832691b 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/SimpleWorkloadLoader.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/loader/SimpleWorkloadLoader.java @@ -63,16 +63,21 @@ public void loadWorkloadPageInfo(WorkloadInfo workloadContext) private void loadWorkloadConfig(WorkloadInfo workloadContext) throws FileNotFoundException { + XmlConfig config = getWorkloadConfg(workloadContext); + WorkloadResolver resolver = CastorConfigTools.getWorkloadResolver(); + workloadContext.setWorkload(resolver.toWorkload(config)); + createStages(workloadContext); + } + public static XmlConfig getWorkloadConfg(WorkloadInfo workloadContext) + throws FileNotFoundException { File file = new File( new File(ROOT_DIR, getRunDirName(workloadContext)), "workload-config.xml"); if (!file.exists()) - return; + return null; XmlConfig config = new XmlConfig(new FileInputStream(file)); - WorkloadResolver resolver = CastorConfigTools.getWorkloadResolver(); - workloadContext.setWorkload(resolver.toWorkload(config)); - createStages(workloadContext); + return config; } private void createStages(WorkloadInfo workloadContext) { @@ -111,13 +116,13 @@ private void loadWorkloadFile(WorkloadInfo workloadContext) workloadContext); loader.load(); } - - private static String getStageFileName(StageInfo info) { - String name = info.getId(); - name += "-" + info.getStage().getName(); - return name; - } - + + private static String getStageFileName(StageInfo info) { + String name = info.getId(); + name += "-" + info.getStage().getName(); + return name; + } + @Override public void loadStagePageInfo(WorkloadInfo workloadContext, String stageId) throws IOException { @@ -128,7 +133,8 @@ public void loadStagePageInfo(WorkloadInfo workloadContext, String stageId) if (!file.exists()) return; BufferedReader reader = new BufferedReader(new FileReader(file)); - SnapshotLoader loader = Loaders.newSnapshotLoader(reader, workloadContext, stageId); + SnapshotLoader loader = Loaders.newSnapshotLoader(reader, + workloadContext, stageId); loader.load(); } diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java index 6bc5a851..23d0ccd1 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java @@ -274,7 +274,7 @@ public void addListener(WorkloadListener listener) { public void disposeRuntime() { for (StageContext stage : stageRegistry) stage.disposeRuntime(); -// config = null; + config = null; future = null; currentStage = null; listeners = null; diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/RAMWorkloadRepository.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/RAMWorkloadRepository.java index c5ef9a21..ad0254ab 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/RAMWorkloadRepository.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/RAMWorkloadRepository.java @@ -104,7 +104,16 @@ public synchronized WorkloadContext[] getActiveWorkloads() { public synchronized WorkloadContext[] getInactiveWorkloads() { List result = new ArrayList(); for (WorkloadContext workload : workloads.values()) - if (WorkloadState.isStopped(workload.getState())) + if (WorkloadState.isStopped(workload.getState()) && !workload.getArchived()) + result.add(workload); + return result.toArray(new WorkloadContext[result.size()]); + } + + @Override + public synchronized WorkloadContext[] getArchivedWorkloads() { + List result = new ArrayList(); + for (WorkloadContext workload : workloads.values()) + if (workload.getArchived()) result.add(workload); return result.toArray(new WorkloadContext[result.size()]); } diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadRepository.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadRepository.java index 079de63f..8c574397 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadRepository.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadRepository.java @@ -33,6 +33,8 @@ public interface WorkloadRepository { public WorkloadContext[] getInactiveWorkloads(); + public WorkloadContext[] getArchivedWorkloads(); + public int getMaxCapacity(); } diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/service/COSBControllerService.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/service/COSBControllerService.java index 42ae66f7..5050e275 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/service/COSBControllerService.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/service/COSBControllerService.java @@ -13,7 +13,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -*/ + */ package com.intel.cosbench.controller.service; @@ -43,44 +43,43 @@ */ class COSBControllerService implements ControllerService, WorkloadListener { - private static final Logger LOGGER = LogFactory.getSystemLogger(); + private static final Logger LOGGER = LogFactory.getSystemLogger(); + + private AtomicInteger count; /* workload id generator */ - private AtomicInteger count; /* workload id generator */ - - private AtomicInteger order; + private AtomicInteger order; - private ControllerContext context; - private Map processors; + private ControllerContext context; + private Map processors; private OrderThreadPoolExecutor executor; - private WorkloadArchiver archiver = new SimpleWorkloadArchiver(); - private WorkloadLoader loader = new SimpleWorkloadLoader(); - private WorkloadRepository memRepo = new RAMWorkloadRepository(); + private WorkloadArchiver archiver = new SimpleWorkloadArchiver(); + private WorkloadLoader loader = new SimpleWorkloadLoader(); + private WorkloadRepository memRepo = new RAMWorkloadRepository(); - public COSBControllerService() { - /* empty */ - } + public COSBControllerService() { + /* empty */ + } - public void setContext(ControllerContext context) { - this.context = context; - } + public void setContext(ControllerContext context) { + this.context = context; + } public void init() { - count = new AtomicInteger(archiver.getTotalWorkloads()); - order = new AtomicInteger(0); - processors = new HashMap(); - processors = Collections.synchronizedMap(processors); - int concurrency = context.getConcurrency(); + count = new AtomicInteger(archiver.getTotalWorkloads()); + order = new AtomicInteger(0); + processors = new HashMap(); + processors = Collections.synchronizedMap(processors); + int concurrency = context.getConcurrency(); executor = new OrderThreadPoolExecutor(concurrency, concurrency, 0L, TimeUnit.MILLISECONDS, new PriorityBlockingQueue( - memRepo.getMaxCapacity(), - new OrderFutureComparator())); + memRepo.getMaxCapacity(), new OrderFutureComparator())); try { loadArchivedWorkload(); } catch (IOException e) { e.printStackTrace(); } - } - + } + public void loadArchivedWorkload() throws IOException { List workloadContexts = loader.loadWorkloadRun(); if (workloadContexts == null) @@ -88,78 +87,84 @@ public void loadArchivedWorkload() throws IOException { for (WorkloadInfo workloadContext : workloadContexts) memRepo.saveWorkload((WorkloadContext) workloadContext); } - - @Override - public String submit(XmlConfig config) { - LOGGER.debug("[ CT ] - submitting workload ... "); - WorkloadContext workload = createWorkloadContext(config); - WorkloadProcessor processor = createProcessor(workload); - workload.addListener(this); - processors.put(workload.getId(), processor); - memRepo.saveWorkload(workload); - LOGGER.debug("[ CT ] - workload {} submitted", workload.getId()); - return workload.getId(); - } - - @Override - public String resubmit(String id) throws IOException{ - memRepo.getWorkload(id).getConfig().getContent().reset(); - return submit(memRepo.getWorkload(id).getConfig()); - } - - private WorkloadContext createWorkloadContext(XmlConfig config) { - WorkloadContext context = new WorkloadContext(); - context.setId(generateWorkloadId()); - context.setOrder(generateOrder()); - context.setSubmitDate(new Date()); - context.setConfig(config); - context.setState(WorkloadState.QUEUING); - return context; - } - - public WorkloadLoader getWorkloadLoader() { - return loader; - } - - private String generateWorkloadId() { - return "w" + count.incrementAndGet(); - } - - private int generateOrder() { - return order.incrementAndGet(); - } - - private WorkloadProcessor createProcessor(WorkloadContext workload) { - WorkloadProcessor processor = new WorkloadProcessor(); - processor.setControllerContext(context); - processor.setWorkloadContext(workload); - processor.init(); - return processor; - } - - @Override - public void fire(String id) { - final WorkloadProcessor processor = processors.get(id); - if (processor == null) - throw new IllegalStateException(); - LOGGER.debug("[ CT ] - starting workload {} ...", id); - /* for strong consistency: a lock should be employed here */ + @Override + public String submit(XmlConfig config) { + LOGGER.debug("[ CT ] - submitting workload ... "); + WorkloadContext workload = createWorkloadContext(config); + WorkloadProcessor processor = createProcessor(workload); + workload.addListener(this); + processors.put(workload.getId(), processor); + memRepo.saveWorkload(workload); + LOGGER.debug("[ CT ] - workload {} submitted", workload.getId()); + return workload.getId(); + } + + @Override + public String resubmit(String id) throws IOException { + XmlConfig config = SimpleWorkloadLoader.getWorkloadConfg(memRepo + .getWorkload(id)); + if (config != null) + return submit(config); + LOGGER.debug( + "[ CT ] - workload {} resubmitted failed, has no workload config", + id); + return null; + } + + private WorkloadContext createWorkloadContext(XmlConfig config) { + WorkloadContext context = new WorkloadContext(); + context.setId(generateWorkloadId()); + context.setOrder(generateOrder()); + context.setSubmitDate(new Date()); + context.setConfig(config); + context.setState(WorkloadState.QUEUING); + return context; + } + + public WorkloadLoader getWorkloadLoader() { + return loader; + } + + private String generateWorkloadId() { + return "w" + count.incrementAndGet(); + } + + private int generateOrder() { + return order.incrementAndGet(); + } + + private WorkloadProcessor createProcessor(WorkloadContext workload) { + WorkloadProcessor processor = new WorkloadProcessor(); + processor.setControllerContext(context); + processor.setWorkloadContext(workload); + processor.init(); + return processor; + } + + @Override + public void fire(String id) { + final WorkloadProcessor processor = processors.get(id); + if (processor == null) + throw new IllegalStateException(); + LOGGER.debug("[ CT ] - starting workload {} ...", id); + /* for strong consistency: a lock should be employed here */ if (processor.getWorkloadContext().getFuture() != null) throw new IllegalStateException(); ControllerThread ctrlThrd = new ControllerThread(processor); Future future = executor.submit(ctrlThrd); - processor.getWorkloadContext().setFuture(future); - yieldExecution(200); // give workload processor a chance - LOGGER.debug("[ CT ] - workload {} started", id); - } - + processor.getWorkloadContext().setFuture(future); + yieldExecution(200); // give workload processor a chance + LOGGER.debug("[ CT ] - workload {} started", id); + } + @Override public boolean changeOrder(String id, String neighbourWId, boolean up) { if (StringUtils.isEmpty(neighbourWId)) { return changeOrder(id, up); } - if(neighbourWId.equals(String.valueOf(0)))//multiple checked workload id + if (neighbourWId.equals(String.valueOf(0)))// multiple checked workload + // id return false; int order = processors.get(id).getWorkloadContext().getOrder(); int neighOrder = processors.get(neighbourWId).getWorkloadContext() @@ -177,8 +182,7 @@ public boolean changeOrder(String id, String neighbourWId, boolean up) { Map orderWorkloadMap = new HashMap(); for (WorkloadContext workload : getActiveWorkloads()) { if ((workload.getOrder() >= order && workload.getOrder() <= neighOrder) - || (workload.getOrder() <= order && workload - .getOrder() >= neighOrder)) { + || (workload.getOrder() <= order && workload.getOrder() >= neighOrder)) { orders.add(workload.getOrder()); orderWorkloadMap.put(String.valueOf(workload.getOrder()), workload.getId()); @@ -186,15 +190,17 @@ public boolean changeOrder(String id, String neighbourWId, boolean up) { } Integer[] orderArray = orders.toArray(new Integer[orders.size()]); Arrays.sort(orderArray); - + if (up) { for (int i = orderArray.length - 2; i >= 0; i--) { - processors.get(orderWorkloadMap.get(String.valueOf(orderArray[i]))) + processors + .get(orderWorkloadMap.get(String.valueOf(orderArray[i]))) .getWorkloadContext().setOrder(orderArray[i + 1]); } } else { - for (int i = 1; i orders = new ArrayList(); - for(WorkloadContext workload:getActiveWorkloads()){ + for (WorkloadContext workload : getActiveWorkloads()) { orders.add(workload.getOrder()); } Integer[] orderArray = orders.toArray(new Integer[orders.size()]); @@ -229,7 +235,7 @@ public boolean changeOrder(String id, boolean up) { break; } } - }else{ + } else { for (int i = 0; i < orderArray.length; i++) { if (orderArray[i] > order) { neighbourOrder = orderArray[i]; @@ -238,12 +244,13 @@ public boolean changeOrder(String id, boolean up) { } } String neighbourWId = String.valueOf(0); - for(WorkloadContext workload:getActiveWorkloads()){ + for (WorkloadContext workload : getActiveWorkloads()) { if (workload.getOrder() == neighbourOrder) { neighbourWId = workload.getId(); } } - if (neighbourWId.equals(String.valueOf(0)))//can't find neighbour workload + if (neighbourWId.equals(String.valueOf(0)))// can't find neighbour + // workload return false; if (processors.get(neighbourWId).getWorkloadContext().getState() != WorkloadState.QUEUING) { LOGGER.debug( @@ -268,68 +275,72 @@ public boolean changeOrder(String id, boolean up) { return true; } - @Override - public void cancel(String id) { - WorkloadProcessor processor = processors.get(id); - if (processor == null) - return; // already stopped - LOGGER.debug("[ CT ] - canceling workload{} ...", id); + @Override + public void cancel(String id) { + WorkloadProcessor processor = processors.get(id); + if (processor == null) + return; // already stopped + LOGGER.debug("[ CT ] - canceling workload{} ...", id); processor.cancel(); - yieldExecution(500); // give workload processor a chance - LOGGER.debug("[ CT ] - workload {} cancelled", id); - } - - private static void yieldExecution(int time) { - try { - Thread.sleep(time); - } catch (InterruptedException e) { - LOGGER.warn("get interrupted when performing yield"); - Thread.currentThread().interrupt(); // re-interrupt - } - } - - @Override - public ControllerInfo getControllerInfo() { - return context; - } - - @Override - public WorkloadContext getWorkloadInfo(String id) { - return memRepo.getWorkload(id); - } - - @Override - public WorkloadContext[] getActiveWorkloads() { - return memRepo.getActiveWorkloads(); - } - - @Override - public WorkloadContext[] getHistoryWorkloads() { - return memRepo.getInactiveWorkloads(); - } - - @Override - public void workloadStarted(WorkloadContext workload) { - /* empty */ - } - - @Override - public void workloadStopped(WorkloadContext workload) { - String id = workload.getId(); - WorkloadProcessor processor = processors.remove(id); - processor.dispose(); - archiver.archive(workload); - LOGGER.debug("processor for workload {} has been detached", id); - } - - @Override - public File getWorkloadLog(WorkloadInfo info) { - return archiver.getWorkloadLog(info); - } - - @Override - public File getWorkloadConfig(WorkloadInfo info) { - return archiver.getWorkloadConfig(info); - } + yieldExecution(500); // give workload processor a chance + LOGGER.debug("[ CT ] - workload {} cancelled", id); + } + + private static void yieldExecution(int time) { + try { + Thread.sleep(time); + } catch (InterruptedException e) { + LOGGER.warn("get interrupted when performing yield"); + Thread.currentThread().interrupt(); // re-interrupt + } + } + + @Override + public ControllerInfo getControllerInfo() { + return context; + } + + @Override + public WorkloadContext getWorkloadInfo(String id) { + return memRepo.getWorkload(id); + } + + @Override + public WorkloadContext[] getActiveWorkloads() { + return memRepo.getActiveWorkloads(); + } + + @Override + public WorkloadContext[] getHistoryWorkloads() { + return memRepo.getInactiveWorkloads(); + } + + public WorkloadContext[] getArchivedWorkloads() { + return memRepo.getArchivedWorkloads(); + } + + @Override + public void workloadStarted(WorkloadContext workload) { + /* empty */ + } + + @Override + public void workloadStopped(WorkloadContext workload) { + String id = workload.getId(); + WorkloadProcessor processor = processors.remove(id); + processor.dispose(); + archiver.archive(workload); + LOGGER.debug("processor for workload {} has been detached", id); + } + + @Override + public File getWorkloadLog(WorkloadInfo info) { + return archiver.getWorkloadLog(info); + } + + @Override + public File getWorkloadConfig(WorkloadInfo info) { + return archiver.getWorkloadConfig(info); + } } diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVMatrixExporter.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVMatrixExporter.java index 894d529c..247e9fe3 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVMatrixExporter.java +++ b/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVMatrixExporter.java @@ -37,7 +37,7 @@ class CSVMatrixExporter extends AbstractMatrixExporter { protected void writeHeader(Writer writer) throws IOException { StringBuilder buffer = new StringBuilder(); buffer.append("Id").append(','); - buffer.append("Op-Type").append(','); + buffer.append("Op-Name").append(','); buffer.append("Op-Count").append(','); buffer.append("Byte-Count").append(','); buffer.append("Worker-Count").append(','); diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVWorkloadExporter.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVWorkloadExporter.java index 641d5dc6..b49a9e53 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVWorkloadExporter.java +++ b/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVWorkloadExporter.java @@ -37,6 +37,7 @@ class CSVWorkloadExporter extends AbstractWorkloadExporter { protected void writeHeader(Writer writer) throws IOException { StringBuilder buffer = new StringBuilder(); buffer.append("Stage").append(','); + buffer.append("Op-Name").append(','); buffer.append("Op-Type").append(','); buffer.append("Op-Count").append(','); buffer.append("Byte-Count").append(','); @@ -67,6 +68,7 @@ protected void writeMetrics(Writer writer, Metrics metrics, StageInfo stage) else buffer.append(opt + '-' + spt); buffer.append(','); + buffer.append(metrics.getOpType()).append(','); buffer.append(metrics.getSampleCount()).append(','); buffer.append(metrics.getByteCount()).append(','); double r = metrics.getAvgResTime(); @@ -111,6 +113,7 @@ protected void writeMetrics(Writer writer, StageInfo stage) buffer.append("N/A").append(','); buffer.append("N/A").append(','); buffer.append("N/A").append(','); + buffer.append("N/A").append(','); buffer.append(stage.getState().name().toLowerCase()).append(','); for (StateInfo state : stage.getStateHistory()) { buffer.append( diff --git a/dev/cosbench-core/src/com/intel/cosbench/service/ControllerService.java b/dev/cosbench-core/src/com/intel/cosbench/service/ControllerService.java index 27f6ee84..014a8b35 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/service/ControllerService.java +++ b/dev/cosbench-core/src/com/intel/cosbench/service/ControllerService.java @@ -48,6 +48,8 @@ public interface ControllerService { public WorkloadInfo[] getActiveWorkloads(); public WorkloadInfo[] getHistoryWorkloads(); + + public WorkloadInfo[] getArchivedWorkloads(); public File getWorkloadLog(WorkloadInfo info); From 3570dd8cad9f29c6a744e88e97b65f6bd4ecf102 Mon Sep 17 00:00:00 2001 From: jialinsun Date: Fri, 6 Sep 2013 11:33:26 +0800 Subject: [PATCH 2/2] checkout only format changed content to make review easier --- .../service/COSBControllerService.java | 310 +++++++++--------- 1 file changed, 155 insertions(+), 155 deletions(-) diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/service/COSBControllerService.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/service/COSBControllerService.java index 5050e275..87c47cb8 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/service/COSBControllerService.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/service/COSBControllerService.java @@ -13,7 +13,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - */ +*/ package com.intel.cosbench.controller.service; @@ -43,43 +43,44 @@ */ class COSBControllerService implements ControllerService, WorkloadListener { - private static final Logger LOGGER = LogFactory.getSystemLogger(); - - private AtomicInteger count; /* workload id generator */ + private static final Logger LOGGER = LogFactory.getSystemLogger(); - private AtomicInteger order; + private AtomicInteger count; /* workload id generator */ + + private AtomicInteger order; - private ControllerContext context; - private Map processors; + private ControllerContext context; + private Map processors; private OrderThreadPoolExecutor executor; - private WorkloadArchiver archiver = new SimpleWorkloadArchiver(); - private WorkloadLoader loader = new SimpleWorkloadLoader(); - private WorkloadRepository memRepo = new RAMWorkloadRepository(); + private WorkloadArchiver archiver = new SimpleWorkloadArchiver(); + private WorkloadLoader loader = new SimpleWorkloadLoader(); + private WorkloadRepository memRepo = new RAMWorkloadRepository(); - public COSBControllerService() { - /* empty */ - } + public COSBControllerService() { + /* empty */ + } - public void setContext(ControllerContext context) { - this.context = context; - } + public void setContext(ControllerContext context) { + this.context = context; + } public void init() { - count = new AtomicInteger(archiver.getTotalWorkloads()); - order = new AtomicInteger(0); - processors = new HashMap(); - processors = Collections.synchronizedMap(processors); - int concurrency = context.getConcurrency(); + count = new AtomicInteger(archiver.getTotalWorkloads()); + order = new AtomicInteger(0); + processors = new HashMap(); + processors = Collections.synchronizedMap(processors); + int concurrency = context.getConcurrency(); executor = new OrderThreadPoolExecutor(concurrency, concurrency, 0L, TimeUnit.MILLISECONDS, new PriorityBlockingQueue( - memRepo.getMaxCapacity(), new OrderFutureComparator())); + memRepo.getMaxCapacity(), + new OrderFutureComparator())); try { loadArchivedWorkload(); } catch (IOException e) { e.printStackTrace(); } - } - + } + public void loadArchivedWorkload() throws IOException { List workloadContexts = loader.loadWorkloadRun(); if (workloadContexts == null) @@ -87,19 +88,20 @@ public void loadArchivedWorkload() throws IOException { for (WorkloadInfo workloadContext : workloadContexts) memRepo.saveWorkload((WorkloadContext) workloadContext); } + - @Override - public String submit(XmlConfig config) { - LOGGER.debug("[ CT ] - submitting workload ... "); - WorkloadContext workload = createWorkloadContext(config); - WorkloadProcessor processor = createProcessor(workload); - workload.addListener(this); - processors.put(workload.getId(), processor); - memRepo.saveWorkload(workload); - LOGGER.debug("[ CT ] - workload {} submitted", workload.getId()); - return workload.getId(); - } - + @Override + public String submit(XmlConfig config) { + LOGGER.debug("[ CT ] - submitting workload ... "); + WorkloadContext workload = createWorkloadContext(config); + WorkloadProcessor processor = createProcessor(workload); + workload.addListener(this); + processors.put(workload.getId(), processor); + memRepo.saveWorkload(workload); + LOGGER.debug("[ CT ] - workload {} submitted", workload.getId()); + return workload.getId(); + } + @Override public String resubmit(String id) throws IOException { XmlConfig config = SimpleWorkloadLoader.getWorkloadConfg(memRepo @@ -112,59 +114,58 @@ public String resubmit(String id) throws IOException { return null; } - private WorkloadContext createWorkloadContext(XmlConfig config) { - WorkloadContext context = new WorkloadContext(); - context.setId(generateWorkloadId()); - context.setOrder(generateOrder()); - context.setSubmitDate(new Date()); - context.setConfig(config); - context.setState(WorkloadState.QUEUING); - return context; - } - - public WorkloadLoader getWorkloadLoader() { - return loader; - } - - private String generateWorkloadId() { - return "w" + count.incrementAndGet(); - } - - private int generateOrder() { - return order.incrementAndGet(); - } - - private WorkloadProcessor createProcessor(WorkloadContext workload) { - WorkloadProcessor processor = new WorkloadProcessor(); - processor.setControllerContext(context); - processor.setWorkloadContext(workload); - processor.init(); - return processor; - } - - @Override - public void fire(String id) { - final WorkloadProcessor processor = processors.get(id); - if (processor == null) - throw new IllegalStateException(); - LOGGER.debug("[ CT ] - starting workload {} ...", id); - /* for strong consistency: a lock should be employed here */ + private WorkloadContext createWorkloadContext(XmlConfig config) { + WorkloadContext context = new WorkloadContext(); + context.setId(generateWorkloadId()); + context.setOrder(generateOrder()); + context.setSubmitDate(new Date()); + context.setConfig(config); + context.setState(WorkloadState.QUEUING); + return context; + } + + public WorkloadLoader getWorkloadLoader() { + return loader; + } + + private String generateWorkloadId() { + return "w" + count.incrementAndGet(); + } + + private int generateOrder() { + return order.incrementAndGet(); + } + + private WorkloadProcessor createProcessor(WorkloadContext workload) { + WorkloadProcessor processor = new WorkloadProcessor(); + processor.setControllerContext(context); + processor.setWorkloadContext(workload); + processor.init(); + return processor; + } + + @Override + public void fire(String id) { + final WorkloadProcessor processor = processors.get(id); + if (processor == null) + throw new IllegalStateException(); + LOGGER.debug("[ CT ] - starting workload {} ...", id); + /* for strong consistency: a lock should be employed here */ if (processor.getWorkloadContext().getFuture() != null) throw new IllegalStateException(); ControllerThread ctrlThrd = new ControllerThread(processor); Future future = executor.submit(ctrlThrd); - processor.getWorkloadContext().setFuture(future); - yieldExecution(200); // give workload processor a chance - LOGGER.debug("[ CT ] - workload {} started", id); - } - + processor.getWorkloadContext().setFuture(future); + yieldExecution(200); // give workload processor a chance + LOGGER.debug("[ CT ] - workload {} started", id); + } + @Override public boolean changeOrder(String id, String neighbourWId, boolean up) { if (StringUtils.isEmpty(neighbourWId)) { return changeOrder(id, up); } - if (neighbourWId.equals(String.valueOf(0)))// multiple checked workload - // id + if(neighbourWId.equals(String.valueOf(0)))//multiple checked workload id return false; int order = processors.get(id).getWorkloadContext().getOrder(); int neighOrder = processors.get(neighbourWId).getWorkloadContext() @@ -182,7 +183,8 @@ public boolean changeOrder(String id, String neighbourWId, boolean up) { Map orderWorkloadMap = new HashMap(); for (WorkloadContext workload : getActiveWorkloads()) { if ((workload.getOrder() >= order && workload.getOrder() <= neighOrder) - || (workload.getOrder() <= order && workload.getOrder() >= neighOrder)) { + || (workload.getOrder() <= order && workload + .getOrder() >= neighOrder)) { orders.add(workload.getOrder()); orderWorkloadMap.put(String.valueOf(workload.getOrder()), workload.getId()); @@ -190,17 +192,15 @@ public boolean changeOrder(String id, String neighbourWId, boolean up) { } Integer[] orderArray = orders.toArray(new Integer[orders.size()]); Arrays.sort(orderArray); - + if (up) { for (int i = orderArray.length - 2; i >= 0; i--) { - processors - .get(orderWorkloadMap.get(String.valueOf(orderArray[i]))) + processors.get(orderWorkloadMap.get(String.valueOf(orderArray[i]))) .getWorkloadContext().setOrder(orderArray[i + 1]); } } else { - for (int i = 1; i < orderArray.length; i++) { - processors - .get(orderWorkloadMap.get(String.valueOf(orderArray[i]))) + for (int i = 1; i orders = new ArrayList(); - for (WorkloadContext workload : getActiveWorkloads()) { + for(WorkloadContext workload:getActiveWorkloads()){ orders.add(workload.getOrder()); } Integer[] orderArray = orders.toArray(new Integer[orders.size()]); @@ -235,7 +235,7 @@ public boolean changeOrder(String id, boolean up) { break; } } - } else { + }else{ for (int i = 0; i < orderArray.length; i++) { if (orderArray[i] > order) { neighbourOrder = orderArray[i]; @@ -244,13 +244,12 @@ public boolean changeOrder(String id, boolean up) { } } String neighbourWId = String.valueOf(0); - for (WorkloadContext workload : getActiveWorkloads()) { + for(WorkloadContext workload:getActiveWorkloads()){ if (workload.getOrder() == neighbourOrder) { neighbourWId = workload.getId(); } } - if (neighbourWId.equals(String.valueOf(0)))// can't find neighbour - // workload + if (neighbourWId.equals(String.valueOf(0)))//can't find neighbour workload return false; if (processors.get(neighbourWId).getWorkloadContext().getState() != WorkloadState.QUEUING) { LOGGER.debug( @@ -275,72 +274,73 @@ public boolean changeOrder(String id, boolean up) { return true; } - @Override - public void cancel(String id) { - WorkloadProcessor processor = processors.get(id); - if (processor == null) - return; // already stopped - LOGGER.debug("[ CT ] - canceling workload{} ...", id); + @Override + public void cancel(String id) { + WorkloadProcessor processor = processors.get(id); + if (processor == null) + return; // already stopped + LOGGER.debug("[ CT ] - canceling workload{} ...", id); processor.cancel(); - yieldExecution(500); // give workload processor a chance - LOGGER.debug("[ CT ] - workload {} cancelled", id); - } - - private static void yieldExecution(int time) { - try { - Thread.sleep(time); - } catch (InterruptedException e) { - LOGGER.warn("get interrupted when performing yield"); - Thread.currentThread().interrupt(); // re-interrupt - } - } - - @Override - public ControllerInfo getControllerInfo() { - return context; - } - - @Override - public WorkloadContext getWorkloadInfo(String id) { - return memRepo.getWorkload(id); - } - - @Override - public WorkloadContext[] getActiveWorkloads() { - return memRepo.getActiveWorkloads(); - } - + yieldExecution(500); // give workload processor a chance + LOGGER.debug("[ CT ] - workload {} cancelled", id); + } + + private static void yieldExecution(int time) { + try { + Thread.sleep(time); + } catch (InterruptedException e) { + LOGGER.warn("get interrupted when performing yield"); + Thread.currentThread().interrupt(); // re-interrupt + } + } + + @Override + public ControllerInfo getControllerInfo() { + return context; + } + + @Override + public WorkloadContext getWorkloadInfo(String id) { + return memRepo.getWorkload(id); + } + + @Override + public WorkloadContext[] getActiveWorkloads() { + return memRepo.getActiveWorkloads(); + } + + @Override + public WorkloadContext[] getHistoryWorkloads() { + return memRepo.getInactiveWorkloads(); + } + @Override - public WorkloadContext[] getHistoryWorkloads() { - return memRepo.getInactiveWorkloads(); - } - - public WorkloadContext[] getArchivedWorkloads() { + public WorkloadInfo[] getArchivedWorkloads() { return memRepo.getArchivedWorkloads(); } - @Override - public void workloadStarted(WorkloadContext workload) { - /* empty */ - } - - @Override - public void workloadStopped(WorkloadContext workload) { - String id = workload.getId(); - WorkloadProcessor processor = processors.remove(id); - processor.dispose(); - archiver.archive(workload); - LOGGER.debug("processor for workload {} has been detached", id); - } - - @Override - public File getWorkloadLog(WorkloadInfo info) { - return archiver.getWorkloadLog(info); - } - - @Override - public File getWorkloadConfig(WorkloadInfo info) { - return archiver.getWorkloadConfig(info); - } + @Override + public void workloadStarted(WorkloadContext workload) { + /* empty */ + } + + @Override + public void workloadStopped(WorkloadContext workload) { + String id = workload.getId(); + WorkloadProcessor processor = processors.remove(id); + processor.dispose(); + archiver.archive(workload); + LOGGER.debug("processor for workload {} has been detached", id); + } + + @Override + public File getWorkloadLog(WorkloadInfo info) { + return archiver.getWorkloadLog(info); + } + + @Override + public File getWorkloadConfig(WorkloadInfo info) { + return archiver.getWorkloadConfig(info); + } }