From a013bf0a9c0ed6e280d5421e2cecd70eeb79e5bb Mon Sep 17 00:00:00 2001 From: jialinsun Date: Thu, 22 Aug 2013 16:18:28 +0800 Subject: [PATCH] fix issue #20, support multiple same operations --- .../cosbench/driver/agent/WorkAgent.java | 2 +- .../driver/operator/AbstractOperator.java | 2 +- .../cosbench/driver/operator/Deleter.java | 29 +++++++++++++++---- .../cosbench/driver/operator/Reader.java | 22 +++++++++++--- .../cosbench/driver/operator/Writer.java | 28 ++++++++++++++---- .../driver/service/MissionHandler.java | 17 +++++++++-- .../intel/cosbench/driver/util/Defaults.java | 6 +++- 7 files changed, 86 insertions(+), 20 deletions(-) diff --git a/dev/cosbench-driver/src/com/intel/cosbench/driver/agent/WorkAgent.java b/dev/cosbench-driver/src/com/intel/cosbench/driver/agent/WorkAgent.java index 93b10002..5cf5e9f4 100644 --- a/dev/cosbench-driver/src/com/intel/cosbench/driver/agent/WorkAgent.java +++ b/dev/cosbench-driver/src/com/intel/cosbench/driver/agent/WorkAgent.java @@ -147,7 +147,7 @@ private void initLimites() { private void initMarks() { Set types = new LinkedHashSet(); for (OperatorContext op : operatorRegistry) - types.add(getMarkType(op.getOpType(), op.getSampleType())); + types.add(getMarkType(op.getName(), op.getSampleType())); for (String type : types) currMarks.addMark(newMark(type)); for (String type : types) diff --git a/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/AbstractOperator.java b/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/AbstractOperator.java index 2489250b..b4e86893 100644 --- a/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/AbstractOperator.java +++ b/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/AbstractOperator.java @@ -43,7 +43,7 @@ protected void init(String division, Config config) { @Override public String getSampleType() { - return getOpType(); + return getName(); } @Override diff --git a/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/Deleter.java b/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/Deleter.java index 0657ddc3..b5cb2872 100644 --- a/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/Deleter.java +++ b/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/Deleter.java @@ -17,8 +17,13 @@ package com.intel.cosbench.driver.operator; +import static com.intel.cosbench.driver.util.Defaults.OPERATION_PREFIX; +import static com.intel.cosbench.driver.util.Defaults.OPERATION_SUFFIX; + import java.util.Date; +import org.apache.commons.lang.StringUtils; + import com.intel.cosbench.api.storage.StorageInterruptedException; import com.intel.cosbench.bench.*; import com.intel.cosbench.config.Config; @@ -34,6 +39,7 @@ class Deleter extends AbstractOperator { public static final String OP_TYPE = "delete"; + public String name; private ObjectPicker objPicker = new ObjectPicker(); @@ -45,25 +51,38 @@ public Deleter() { protected void init(String division, Config config) { super.init(division, config); objPicker.init(division, config); + name = StringUtils.join(new Object[] { + config.get("opprefix", OPERATION_PREFIX), OP_TYPE, + config.get("opsuffix", OPERATION_SUFFIX) }); } @Override public String getOpType() { return OP_TYPE; } + + @Override + public String getName() { + return name; + } @Override protected void operate(int idx, int all, Session session) { String[] path = objPicker.pickObjPath(session.getRandom(), idx, all); - Sample sample = doDelete(path[0], path[1], config, session); + Sample sample = doDelete(path[0], path[1], config, session, name); session.getListener().onSampleCreated(sample); Date now = sample.getTimestamp(); - Result result = new Result(now, OP_TYPE, sample.isSucc()); + Result result = new Result(now, name, sample.isSucc()); session.getListener().onOperationCompleted(result); } public static Sample doDelete(String conName, String objName, - Config config, Session session) { + Config config, Session session) { + return doDelete(conName, objName, config, session, OP_TYPE); + } + + public static Sample doDelete(String conName, String objName, + Config config, Session session, String opName) { if (Thread.interrupted()) throw new AbortedException(); @@ -75,13 +94,13 @@ public static Sample doDelete(String conName, String objName, throw new AbortedException(); } catch (Exception e) { doLogErr(session.getLogger(), "fail to perform remove operation", e); - return new Sample(new Date(), OP_TYPE, false); + return new Sample(new Date(), opName, false); } long end = System.currentTimeMillis(); Date now = new Date(end); - return new Sample(now, OP_TYPE, true, end - start, 0L); + return new Sample(now, opName, true, end - start, 0L); } } diff --git a/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/Reader.java b/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/Reader.java index f796b65d..b1548436 100644 --- a/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/Reader.java +++ b/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/Reader.java @@ -23,7 +23,10 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.io.output.*; +import org.apache.commons.lang.StringUtils; +import static com.intel.cosbench.driver.util.Defaults.OPERATION_PREFIX; +import static com.intel.cosbench.driver.util.Defaults.OPERATION_SUFFIX; import com.intel.cosbench.api.storage.StorageInterruptedException; import com.intel.cosbench.bench.*; import com.intel.cosbench.config.Config; @@ -39,6 +42,8 @@ class Reader extends AbstractOperator { public static final String OP_TYPE = "read"; + + public String name; private boolean hashCheck = false; @@ -53,12 +58,21 @@ protected void init(String division, Config config) { super.init(division, config); objPicker.init(division, config); hashCheck = config.getBoolean("hashCheck", false); + name = StringUtils.join(new Object[] { + config.get("opprefix", OPERATION_PREFIX), OP_TYPE, + config.get("opsuffix", OPERATION_SUFFIX) }); } @Override public String getOpType() { return OP_TYPE; } + + + @Override + public String getName() { + return name; + } @Override protected void operate(int idx, int all, Session session) { @@ -67,7 +81,7 @@ protected void operate(int idx, int all, Session session) { Sample sample = doRead(out, path[0], path[1], config, session); session.getListener().onSampleCreated(sample); Date now = sample.getTimestamp(); - Result result = new Result(now, OP_TYPE, sample.isSucc()); + Result result = new Result(now, name, sample.isSucc()); session.getListener().onOperationCompleted(result); } @@ -86,12 +100,12 @@ private Sample doRead(OutputStream out, String conName, String objName, if (!hashCheck) IOUtils.copyLarge(in, cout); else if (!validateChecksum(conName, objName, session, in, cout)) - return new Sample(new Date(), OP_TYPE, false); + return new Sample(new Date(), name, false); } catch (StorageInterruptedException sie) { throw new AbortedException(); } catch (Exception e) { doLogErr(session.getLogger(), "fail to perform read operation", e); - return new Sample(new Date(), OP_TYPE, false); + return new Sample(new Date(), name, false); } finally { IOUtils.closeQuietly(in); IOUtils.closeQuietly(cout); @@ -100,7 +114,7 @@ else if (!validateChecksum(conName, objName, session, in, cout)) long end = System.currentTimeMillis(); Date now = new Date(end); - return new Sample(now, OP_TYPE, true, end - start, cout.getByteCount()); + return new Sample(now, name, true, end - start, cout.getByteCount()); } private static boolean validateChecksum(String conName, String objName, diff --git a/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/Writer.java b/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/Writer.java index 5e591fda..b600c972 100644 --- a/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/Writer.java +++ b/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/Writer.java @@ -22,7 +22,10 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.io.input.CountingInputStream; +import org.apache.commons.lang.StringUtils; +import static com.intel.cosbench.driver.util.Defaults.OPERATION_PREFIX; +import static com.intel.cosbench.driver.util.Defaults.OPERATION_SUFFIX; import com.intel.cosbench.api.storage.StorageInterruptedException; import com.intel.cosbench.bench.*; import com.intel.cosbench.config.Config; @@ -39,6 +42,7 @@ class Writer extends AbstractOperator { public static final String OP_TYPE = "write"; + public String name; private boolean chunked; private boolean isRandom; @@ -58,12 +62,20 @@ protected void init(String division, Config config) { chunked = config.getBoolean("chunked", false); isRandom = !config.get("content", "random").equals("zero"); hashCheck = config.getBoolean("hashCheck", false); + name = StringUtils.join(new Object[] { + config.get("opprefix", OPERATION_PREFIX), OP_TYPE, + config.get("opsuffix", OPERATION_SUFFIX) }); } @Override public String getOpType() { return OP_TYPE; } + + @Override + public String getName() { + return name; + } @Override protected void operate(int idx, int all, Session session) { @@ -73,15 +85,21 @@ protected void operate(int idx, int all, Session session) { String[] path = objPicker.pickObjPath(random, idx, all); RandomInputStream in = new RandomInputStream(size, random, isRandom, hashCheck); - Sample sample = doWrite(in, len, path[0], path[1], config, session); + Sample sample = doWrite(in, len, path[0], path[1], config, session, + name); session.getListener().onSampleCreated(sample); Date now = sample.getTimestamp(); - Result result = new Result(now, OP_TYPE, sample.isSucc()); + Result result = new Result(now, name, sample.isSucc()); session.getListener().onOperationCompleted(result); } public static Sample doWrite(InputStream in, long length, String conName, - String objName, Config config, Session session) { + String objName, Config config, Session session) { + return doWrite(in, length, conName, objName, config, session, OP_TYPE); + } + + public static Sample doWrite(InputStream in, long length, String conName, + String objName, Config config, Session session, String opName) { if (Thread.interrupted()) throw new AbortedException(); @@ -96,7 +114,7 @@ public static Sample doWrite(InputStream in, long length, String conName, throw new AbortedException(); } catch (Exception e) { session.getLogger().error("fail to perform write operation", e); - return new Sample(new Date(), OP_TYPE, false); + return new Sample(new Date(), opName, false); } finally { IOUtils.closeQuietly(cin); } @@ -104,7 +122,7 @@ public static Sample doWrite(InputStream in, long length, String conName, long end = System.currentTimeMillis(); Date now = new Date(end); - return new Sample(now, OP_TYPE, true, end - start, cin.getByteCount()); + return new Sample(now, opName, true, end - start, cin.getByteCount()); } /* * public static Sample doWrite(byte[] data, String conName, String objName, diff --git a/dev/cosbench-driver/src/com/intel/cosbench/driver/service/MissionHandler.java b/dev/cosbench-driver/src/com/intel/cosbench/driver/service/MissionHandler.java index fb59f8f9..4489fd67 100644 --- a/dev/cosbench-driver/src/com/intel/cosbench/driver/service/MissionHandler.java +++ b/dev/cosbench-driver/src/com/intel/cosbench/driver/service/MissionHandler.java @@ -23,6 +23,10 @@ import java.util.*; import java.util.concurrent.*; +import org.apache.commons.lang.StringUtils; + +import static com.intel.cosbench.driver.util.Defaults.OPERATION_PREFIX; +import static com.intel.cosbench.driver.util.Defaults.OPERATION_SUFFIX; import com.intel.cosbench.api.auth.*; import com.intel.cosbench.api.storage.*; import com.intel.cosbench.config.*; @@ -139,8 +143,15 @@ private static OperatorContext createOperatorContext(Operation op) { private void initOpPicker() { OperationPicker picker = new OperationPicker(); Mission mission = missionContext.getMission(); - for (Operation op : mission) - picker.addOperation(op.getType(), op.getRatio()); + for (Operation op : mission) { + Config config = KVConfigParser.parse(op.getConfig()); + picker.addOperation( + StringUtils.join(new Object[] { + config.get("opprefix", OPERATION_PREFIX), + op.getType(), + config.get("opsuffix", OPERATION_SUFFIX) }), + op.getRatio()); + } missionContext.setOperationPicker(picker); } @@ -318,7 +329,7 @@ public void close() { LOGGER.debug("!!!! mission op: " + missionContext.getReport().getAllMetrics()[i].getOpType() + "-" - + missionContext.getReport().getAllMetrics()[i].getOpType()); + + missionContext.getReport().getAllMetrics()[i].getSampleType()); if (missionContext.getReport().getAllMetrics()[i].getSampleCount() == 0 && missionContext.getReport().getAllMetrics()[i] .getTotalSampleCount() > 0) { diff --git a/dev/cosbench-driver/src/com/intel/cosbench/driver/util/Defaults.java b/dev/cosbench-driver/src/com/intel/cosbench/driver/util/Defaults.java index dfb4d257..bd1fed5f 100644 --- a/dev/cosbench-driver/src/com/intel/cosbench/driver/util/Defaults.java +++ b/dev/cosbench-driver/src/com/intel/cosbench/driver/util/Defaults.java @@ -17,7 +17,7 @@ package com.intel.cosbench.driver.util; -interface Defaults { +public interface Defaults { String CONTAINER_PREFIX = "mycontainers_"; @@ -26,5 +26,9 @@ interface Defaults { String OBJECT_PREFIX = "myobjects_"; String OBJECT_SUFFIX = null; + + String OPERATION_SUFFIX = null; + + String OPERATION_PREFIX = null; }