diff --git a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurement.java b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurement.java index 90720ef490d2caeaa2c5605e686aa80083ffad20..c3c6f9f8797bb29f07d8387527397e7b89f5aa0f 100644 --- a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurement.java +++ b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurement.java @@ -27,8 +27,10 @@ import com.yahoo.ycsb.measurements.exporter.MeasurementsExporter; public abstract class OneMeasurement { String _name; + final ConcurrentHashMap<Integer, AtomicInteger> returncodes; public String getName() { + returncodes = new ConcurrentHashMap<Integer, AtomicInteger>(); return _name; } @@ -39,7 +41,22 @@ public abstract class OneMeasurement { this._name = _name; } - public abstract void reportReturnCode(int code); + /** + * No need for synchronization, using CHM to deal with that + */ + public void reportReturnCode(int code) { + Integer Icode = code; + + AtomicInteger counter = returncodes.get(Icode); + if (counter == null) { + AtomicInteger other = returncodes.putIfAbsent(Icode, counter = new AtomicInteger()); + if (other != null) { + counter = other; + } + } + + counter.incrementAndGet(); + } public abstract void measure(int latency); diff --git a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHdrHistogram.java b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHdrHistogram.java index fa0735f854f758b59d07c6c15de07b89ccef8cb4..56cdd1fdf69dd34e2676ab5811640903b309db92 100644 --- a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHdrHistogram.java +++ b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHdrHistogram.java @@ -46,13 +46,11 @@ public class OneMeasurementHdrHistogram extends OneMeasurement { final HistogramLogWriter histogramLogWriter; final Recorder histogram = new Recorder(3); - final ConcurrentHashMap<Integer, AtomicInteger> returncodes; Histogram totalHistogram; public OneMeasurementHdrHistogram(String name, Properties props) { super(name); - returncodes = new ConcurrentHashMap<Integer, AtomicInteger>(); boolean shouldLog = Boolean.parseBoolean(props.getProperty("hdrhistogram.fileoutput", "false")); if (!shouldLog) { log = null; @@ -72,24 +70,6 @@ public class OneMeasurementHdrHistogram extends OneMeasurement { histogramLogWriter.outputLegend(); } - /** - * No need for synchronization, using CHM to deal with that - * - * @see com.yahoo.ycsb.OneMeasurement#reportReturnCode(int) - */ - public void reportReturnCode(int code) { - Integer Icode = code; - AtomicInteger counter = returncodes.get(Icode); - if (counter == null) { - AtomicInteger other = returncodes.putIfAbsent(Icode, counter = new AtomicInteger()); - if (other != null) { - counter = other; - } - } - - counter.incrementAndGet(); - } - /** * It appears latency is reported in micros. * Using {@link Recorder} to support concurrent updates to histogram. diff --git a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHistogram.java b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHistogram.java index 2cba955a2a3c926f1d7b719c26b9696562522a08..88cc5c2afbfbe5171f83fb282a80bb21c2d33feb 100644 --- a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHistogram.java +++ b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHistogram.java @@ -48,7 +48,6 @@ public class OneMeasurementHistogram extends OneMeasurement int min; int max; - HashMap<Integer,int[]> returncodes; public OneMeasurementHistogram(String name, Properties props) { @@ -62,25 +61,8 @@ public class OneMeasurementHistogram extends OneMeasurement windowtotallatency=0; min=-1; max=-1; - returncodes=new HashMap<Integer,int[]>(); } - /* (non-Javadoc) - * @see com.yahoo.ycsb.OneMeasurement#reportReturnCode(int) - */ - public synchronized void reportReturnCode(int code) - { - Integer Icode=code; - if (!returncodes.containsKey(Icode)) - { - int[] val=new int[1]; - val[0]=0; - returncodes.put(Icode,val); - } - returncodes.get(Icode)[0]++; - } - - /* (non-Javadoc) * @see com.yahoo.ycsb.OneMeasurement#measure(int) */ @@ -136,11 +118,9 @@ public class OneMeasurementHistogram extends OneMeasurement } } - for (Integer I : returncodes.keySet()) - { - int[] val=returncodes.get(I); - exporter.write(getName(), "Return="+I, val[0]); - } + for (Map.Entry<Integer, AtomicInteger> entry : returncodes.entrySet()) { + exporter.write(getName(), "Return=" + entry.getKey(), entry.getValue().get()); + } for (int i=0; i<_buckets; i++) { diff --git a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementTimeSeries.java b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementTimeSeries.java index 25c77b76740feaed3bf134c78b249e4e9146a827..aab5d85e05f88d4d786170427a391a53f9d5bef7 100644 --- a/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementTimeSeries.java +++ b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementTimeSeries.java @@ -68,14 +68,11 @@ public class OneMeasurementTimeSeries extends OneMeasurement int min=-1; int max=-1; - private HashMap<Integer, int[]> returncodes; - public OneMeasurementTimeSeries(String name, Properties props) { super(name); _granularity=Integer.parseInt(props.getProperty(GRANULARITY,GRANULARITY_DEFAULT)); _measurements=new Vector<SeriesUnit>(); - returncodes=new HashMap<Integer,int[]>(); } void checkEndOfUnit(boolean forceend) @@ -138,30 +135,16 @@ public class OneMeasurementTimeSeries extends OneMeasurement //TODO: 95th and 99th percentile latency - for (Integer I : returncodes.keySet()) - { - int[] val=returncodes.get(I); - exporter.write(getName(), "Return="+I, val[0]); - } + + for (Map.Entry<Integer, AtomicInteger> entry : returncodes.entrySet()) { + exporter.write(getName(), "Return=" + entry.getKey(), entry.getValue().get()); + } for (SeriesUnit unit : _measurements) { exporter.write(getName(), Long.toString(unit.time), unit.average); } } - - @Override - public void reportReturnCode(int code) { - Integer Icode=code; - if (!returncodes.containsKey(Icode)) - { - int[] val=new int[1]; - val[0]=0; - returncodes.put(Icode,val); - } - returncodes.get(Icode)[0]++; - - } @Override public String getSummary() {