You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by le...@apache.org on 2020/02/13 22:41:25 UTC
[incubator-datasketches-characterization] branch master updated:
Update configs affected by BaseSerDeProfile.
This is an automated email from the ASF dual-hosted git repository.
leerho pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-datasketches-characterization.git
The following commit(s) were added to refs/heads/master by this push:
new 8b5f6e4 Update configs affected by BaseSerDeProfile.
8b5f6e4 is described below
commit 8b5f6e4895a123b33789e50ca001c69745c2b268
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Thu Feb 13 14:41:09 2020 -0800
Update configs affected by BaseSerDeProfile.
Also updage SketchesCheckstyle for new version.
---
.../characterization/cpc/CpcSerDeProfile.java | 26 +++++-----
.../frequencies/LongsSketchSpeedProfile.java | 2 +-
.../characterization/hll/HllSerDeProfile.java | 14 ++++--
.../characterization/hll/ZetaHllSerDeProfile.java | 27 +++++-----
.../quantiles/DoublesSketchSpeedProfile.java | 4 +-
.../quantiles/ItemsSketchSpeedProfile.java | 2 +-
.../quantiles/KllFloatsSketchSpeedProfile.java | 2 +-
.../quantiles/tdigest/TDigestSpeedProfile.java | 2 +-
.../characterization/theta/ThetaSerDeProfile.java | 47 +++++++++++++-----
.../uniquecount/BaseSerDeProfile.java | 58 ++++++++++++----------
.../{ThetaSerDeJob.conf => ThetaSerDeEstJob.conf} | 6 ++-
tools/SketchesCheckstyle.xml | 7 +--
12 files changed, 114 insertions(+), 83 deletions(-)
diff --git a/src/main/java/org/apache/datasketches/characterization/cpc/CpcSerDeProfile.java b/src/main/java/org/apache/datasketches/characterization/cpc/CpcSerDeProfile.java
index 92b09ae..a6b8c14 100644
--- a/src/main/java/org/apache/datasketches/characterization/cpc/CpcSerDeProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/cpc/CpcSerDeProfile.java
@@ -35,33 +35,31 @@ public class CpcSerDeProfile extends BaseSerDeProfile {
@Override
- public void doTrial(final Stats stats, final int uPerTrial) {
+ public void doTrial(final long[] stats, final int uPerTrial) {
sketch.reset(); // reuse the same sketch
for (int u = uPerTrial; u-- > 0;) {
sketch.update(++vIn);
}
- final double est1 = sketch.getEstimate();
-
- final byte[] byteArr;
- final long startSerTime_nS, stopSerTime_nS;
- startSerTime_nS = System.nanoTime();
- byteArr = sketch.toByteArray();
- stopSerTime_nS = System.nanoTime();
+ final long startEstTime_nS = System.nanoTime();
+ final double est1 = sketch.getEstimate();
- final long startDeserTime_nS, stopDeserTime_nS;
+ final long startSerTime_nS = System.nanoTime();
+ final byte[] byteArr = sketch.toByteArray();
- startDeserTime_nS = System.nanoTime();
+ final long startDeSerTime_nS = System.nanoTime();
final CpcSketch sketch2 = CpcSketch.heapify(byteArr);
- stopDeserTime_nS = System.nanoTime();
+
+ final long emdTime_nS = System.nanoTime();
final double est2 = sketch2.getEstimate();
assert est1 == est2;
- stats.serializeTime_nS = stopSerTime_nS - startSerTime_nS;
- stats.deserializeTime_nS = stopDeserTime_nS - startDeserTime_nS;
- stats.size_bytes = byteArr.length;
+ stats[est_ns] = startSerTime_nS - startEstTime_nS;
+ stats[ser_ns] = startDeSerTime_nS - startSerTime_nS;
+ stats[deser_ns] = emdTime_nS - startDeSerTime_nS;
+ stats[size_bytes] = byteArr.length;
}
}
diff --git a/src/main/java/org/apache/datasketches/characterization/frequencies/LongsSketchSpeedProfile.java b/src/main/java/org/apache/datasketches/characterization/frequencies/LongsSketchSpeedProfile.java
index b2c095e..92e4234 100644
--- a/src/main/java/org/apache/datasketches/characterization/frequencies/LongsSketchSpeedProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/frequencies/LongsSketchSpeedProfile.java
@@ -85,7 +85,7 @@ public class LongsSketchSpeedProfile extends BaseFrequenciesSpeedProfile {
@Override
String getHeader() {
- return "Stream\tTrials\tBuild\tUpdate\tSer\tDeser\tItems\tSize";
+ return "Stream\tTrials\tBuild\tUpdate\tSer\tDeser\tItems\tstatsSize";
}
@Override
diff --git a/src/main/java/org/apache/datasketches/characterization/hll/HllSerDeProfile.java b/src/main/java/org/apache/datasketches/characterization/hll/HllSerDeProfile.java
index 995191f..f5bcfdb 100644
--- a/src/main/java/org/apache/datasketches/characterization/hll/HllSerDeProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/hll/HllSerDeProfile.java
@@ -56,15 +56,18 @@ public class HllSerDeProfile extends BaseSerDeProfile {
}
@Override
- public void doTrial(final Stats stats, final int uPerTrial) {
+ public void doTrial(final long[] stats, final int uPerTrial) {
sketch.reset(); // reuse the same sketch
+ final byte[] byteArr;
for (int u = uPerTrial; u-- > 0;) {
sketch.update(++vIn);
}
+
+ final long startEstTime_nS = System.nanoTime();
final double est1 = sketch.getEstimate();
+ final long stopEstTime_nS = System.nanoTime();
- final byte[] byteArr;
final long startSerTime_nS, stopSerTime_nS;
if (compact) {
startSerTime_nS = System.nanoTime();
@@ -92,9 +95,10 @@ public class HllSerDeProfile extends BaseSerDeProfile {
final double est2 = sketch2.getEstimate();
assert est1 == est2;
- stats.serializeTime_nS = stopSerTime_nS - startSerTime_nS;
- stats.deserializeTime_nS = stopDeserTime_nS - startDeserTime_nS;
- stats.size_bytes = byteArr.length;
+ stats[est_ns] = stopEstTime_nS - startEstTime_nS;
+ stats[ser_ns] = stopSerTime_nS - startSerTime_nS;
+ stats[deser_ns] = stopDeserTime_nS - startDeserTime_nS;
+ stats[size_bytes] = byteArr.length;
}
}
diff --git a/src/main/java/org/apache/datasketches/characterization/hll/ZetaHllSerDeProfile.java b/src/main/java/org/apache/datasketches/characterization/hll/ZetaHllSerDeProfile.java
index 27f9b63..50dac8a 100644
--- a/src/main/java/org/apache/datasketches/characterization/hll/ZetaHllSerDeProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/hll/ZetaHllSerDeProfile.java
@@ -78,33 +78,30 @@ public class ZetaHllSerDeProfile extends BaseSerDeProfile {
}
@Override
- public void doTrial(final Stats stats, final int uPerTrial) {
+ public void doTrial(final long[] stats, final int uPerTrial) {
reset();
- //Serialize
+
for (int u = uPerTrial; u-- > 0;) {
sketch1.add(++vIn);
}
- final double est1 = sketch1.result();
- final byte[] byteArr;
- final long startSerTime_nS, stopSerTime_nS;
+ final long startEstTime_nS = System.nanoTime();
+ final double est1 = sketch1.result();
- startSerTime_nS = System.nanoTime();
- byteArr = sketch1.serializeToByteArray();
- stopSerTime_nS = System.nanoTime();
+ final long startSerTime_nS = System.nanoTime();
+ final byte[] byteArr = sketch1.serializeToByteArray();
- //Deserialize
- final long startDeserTime_nS, stopDeserTime_nS;
- startDeserTime_nS = System.nanoTime();
+ final long startDeSerTime_nS = System.nanoTime();
sketch2 = HyperLogLogPlusPlus.forProto(byteArr);
- stopDeserTime_nS = System.nanoTime();
+ final long endTime_nS = System.nanoTime();
final double est2 = sketch2.result();
assert est1 == est2;
- stats.serializeTime_nS = stopSerTime_nS - startSerTime_nS;
- stats.deserializeTime_nS = stopDeserTime_nS - startDeserTime_nS;
- stats.size_bytes = byteArr.length;
+ stats[est_ns] = startSerTime_nS - startEstTime_nS;
+ stats[ser_ns] = startDeSerTime_nS - startSerTime_nS;
+ stats[deser_ns] = endTime_nS - startDeSerTime_nS;
+ stats[size_bytes] = byteArr.length;
}
}
diff --git a/src/main/java/org/apache/datasketches/characterization/quantiles/DoublesSketchSpeedProfile.java b/src/main/java/org/apache/datasketches/characterization/quantiles/DoublesSketchSpeedProfile.java
index 8058e20..709ead8 100644
--- a/src/main/java/org/apache/datasketches/characterization/quantiles/DoublesSketchSpeedProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/quantiles/DoublesSketchSpeedProfile.java
@@ -196,8 +196,8 @@ public class DoublesSketchSpeedProfile extends BaseQuantilesSpeedProfile {
@Override
String getHeader() {
- return "Stream\tTrials\tBuild\tUpdate\tQuant\tCDF\tRank\tSer\tDeser\tSize"
- + "\tCompact\tQuant\tCDF\tRank\tSer\tDeser\tSize\tItems";
+ return "Stream\tTrials\tBuild\tUpdate\tQuant\tCDF\tRank\tSer\tDeser\tstatsSize"
+ + "\tCompact\tQuant\tCDF\tRank\tSer\tDeser\tstatsSize\tItems";
}
@Override
diff --git a/src/main/java/org/apache/datasketches/characterization/quantiles/ItemsSketchSpeedProfile.java b/src/main/java/org/apache/datasketches/characterization/quantiles/ItemsSketchSpeedProfile.java
index b220e75..fd367f2 100644
--- a/src/main/java/org/apache/datasketches/characterization/quantiles/ItemsSketchSpeedProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/quantiles/ItemsSketchSpeedProfile.java
@@ -125,7 +125,7 @@ public class ItemsSketchSpeedProfile extends BaseQuantilesSpeedProfile {
@Override
String getHeader() {
- return "Stream\tTrials\tBuild\tUpdate\tQuant\tCDF\tRank\tSer\tDeser\tItems\tSize";
+ return "Stream\tTrials\tBuild\tUpdate\tQuant\tCDF\tRank\tSer\tDeser\tItems\tstatsSize";
}
@Override
diff --git a/src/main/java/org/apache/datasketches/characterization/quantiles/KllFloatsSketchSpeedProfile.java b/src/main/java/org/apache/datasketches/characterization/quantiles/KllFloatsSketchSpeedProfile.java
index 0dda396..579b7cb 100644
--- a/src/main/java/org/apache/datasketches/characterization/quantiles/KllFloatsSketchSpeedProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/quantiles/KllFloatsSketchSpeedProfile.java
@@ -129,7 +129,7 @@ public class KllFloatsSketchSpeedProfile extends BaseQuantilesSpeedProfile {
@Override
String getHeader() {
- return "Stream\tTrials\tBuild\tUpdate\tQuant\tQuants\tRank\tCDF\tSer\tDeser\tItems\tSize";
+ return "Stream\tTrials\tBuild\tUpdate\tQuant\tQuants\tRank\tCDF\tSer\tDeser\tItems\tstatsSize";
}
@Override
diff --git a/src/main/java/org/apache/datasketches/characterization/quantiles/tdigest/TDigestSpeedProfile.java b/src/main/java/org/apache/datasketches/characterization/quantiles/tdigest/TDigestSpeedProfile.java
index f12f49a..cd84b8d 100644
--- a/src/main/java/org/apache/datasketches/characterization/quantiles/tdigest/TDigestSpeedProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/quantiles/tdigest/TDigestSpeedProfile.java
@@ -123,7 +123,7 @@ public class TDigestSpeedProfile extends QuantilesSpeedProfile {
@Override
String getHeader() {
- return "Stream\tTrials\tBuild\tUpdate\tQuant\tCDF\tSer\tDe\tSer\tDe\tItems\tSize\tSmall";
+ return "Stream\tTrials\tBuild\tUpdate\tQuant\tCDF\tSer\tDe\tSer\tDe\tItems\tstatsSize\tSmall";
}
@Override
diff --git a/src/main/java/org/apache/datasketches/characterization/theta/ThetaSerDeProfile.java b/src/main/java/org/apache/datasketches/characterization/theta/ThetaSerDeProfile.java
index 1f9f056..1842bcb 100644
--- a/src/main/java/org/apache/datasketches/characterization/theta/ThetaSerDeProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/theta/ThetaSerDeProfile.java
@@ -19,6 +19,8 @@
package org.apache.datasketches.characterization.theta;
+import static org.testng.Assert.assertEquals;
+
import org.apache.datasketches.Family;
import org.apache.datasketches.ResizeFactor;
import org.apache.datasketches.characterization.uniquecount.BaseSerDeProfile;
@@ -33,6 +35,9 @@ import org.apache.datasketches.theta.UpdateSketchBuilder;
*/
public class ThetaSerDeProfile extends BaseSerDeProfile {
private UpdateSketch sketch;
+ private boolean serde = false;
+ private boolean est = false;
+ private double err;
@Override
public void configure() {
@@ -41,8 +46,11 @@ public class ThetaSerDeProfile extends BaseSerDeProfile {
final float p = Float.parseFloat(prop.mustGet("THETA_p"));
final ResizeFactor rf = ResizeFactor.getRF(Integer.parseInt(prop.mustGet("THETA_lgRF")));
final boolean direct = Boolean.parseBoolean(prop.mustGet("THETA_direct"));
+ serde = Boolean.parseBoolean(prop.mustGet("THETA_SerDe"));
+ est = Boolean.parseBoolean(prop.mustGet("THETA_Est"));
final int k = 1 << lgK;
+ err = 5.0 / Math.sqrt(k);
final UpdateSketchBuilder udBldr = UpdateSketch.builder()
.setNominalEntries(k)
.setFamily(family)
@@ -59,28 +67,41 @@ public class ThetaSerDeProfile extends BaseSerDeProfile {
}
@Override
- public void doTrial(final Stats stats, final int uPerTrial) {
+ public void doTrial(final long[] stats, final int uPerTrial) {
sketch.reset(); // reuse the same sketch
+ double est1 = 0;
+ double est2 = 0;
+ UpdateSketch sketch2 = null;
for (int u = uPerTrial; u-- > 0;) { //populate the sketch
sketch.update(++vIn);
}
- final double est1 = sketch.getEstimate();
-
- final long startSerTime_nS = System.nanoTime();
- final byte[] byteArr = sketch.toByteArray();
+ if (est) {
+ final long startEstTime_nS = System.nanoTime();
+ est1 = sketch.getEstimate();
+ final long stopEstTime_nS = System.nanoTime();
- final long startDeSerTime_nS = System.nanoTime();
+ assertEquals(est1, uPerTrial, uPerTrial * err);
+ stats[est_ns] = est ? stopEstTime_nS - startEstTime_nS : 0;
+ }
+ if (serde) {
+ final long startSerTime_nS = System.nanoTime();
+ final byte[] byteArr = sketch.toByteArray();
- final UpdateSketch sketch2 = UpdateSketch.heapify(Memory.wrap(byteArr));
- final long endDeTime_nS = System.nanoTime();
+ final long startDeserTime_nS = System.nanoTime();
+ sketch2 = UpdateSketch.heapify(Memory.wrap(byteArr));
+ final long stopSerDeTime_nS = System.nanoTime();
- final double est2 = sketch2.getEstimate();
- assert est1 == est2;
+ est2 = sketch2.getEstimate();
+ assertEquals(est2, uPerTrial, uPerTrial * err);
+ stats[ser_ns] = serde ? startDeserTime_nS - startSerTime_nS : 0;
+ stats[deser_ns] = serde ? stopSerDeTime_nS - startDeserTime_nS : 0;
+ stats[size_bytes] = serde ? byteArr.length : 0;
+ }
+ if (est && serde) {
+ assertEquals(est1, est2, 0.0);
+ }
- stats.serializeTime_nS = startDeSerTime_nS - startSerTime_nS;
- stats.deserializeTime_nS = endDeTime_nS - startDeSerTime_nS;
- stats.size_bytes = byteArr.length;
}
}
diff --git a/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseSerDeProfile.java b/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseSerDeProfile.java
index fa77183..0b24ba0 100644
--- a/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseSerDeProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseSerDeProfile.java
@@ -23,6 +23,8 @@ import static java.lang.Math.log;
import static java.lang.Math.pow;
import static org.apache.datasketches.Util.pwr2LawNext;
+import java.util.Arrays;
+
import org.apache.datasketches.Job;
import org.apache.datasketches.JobProfile;
import org.apache.datasketches.Properties;
@@ -43,7 +45,13 @@ public abstract class BaseSerDeProfile implements JobProfile {
int lgMaxBpU;
double slope;
public int lgK;
- public Stats stats = new Stats();
+
+ //stat measurements
+ public static final int ser_ns = 0;
+ public static final int deser_ns = 1;
+ public static final int est_ns = 2;
+ public static final int size_bytes = 3;
+ public static final int numStats = 4;
//JobProfile
@Override
@@ -84,36 +92,39 @@ public abstract class BaseSerDeProfile implements JobProfile {
/**
* Populates the sketch with the given uPerTrial and loads the stats.
- * @param stats the given stats class
+ * @param stats the given stats array
* @param uPerTrial the given uniques per trial to be offered
*/
- public abstract void doTrial(Stats stats, int uPerTrial);
+ public abstract void doTrial(long[] stats, int uPerTrial);
private void doTrials() {
final int maxU = 1 << lgMaxU;
final int minU = 1 << lgMinU;
int lastU = 0;
final StringBuilder dataStr = new StringBuilder();
+ final long[] rawStats = new long[numStats];
+ final long[] sumStats = new long[numStats];
+ final double[] meanStats = new double[numStats];
println(getHeader());
+
while (lastU < maxU) { //for each U point on X-axis, OR one row on output
final int nextU = (lastU == 0) ? minU : pwr2LawNext(uPPO, lastU);
lastU = nextU;
final int trials = getNumTrials(nextU);
- double sumSerialzeTime_nS = 0;
- double sumDeserializeTime_nS = 0;
- double sumSizeBytes = 0;
+ Arrays.fill(sumStats, 0);
+
System.gc(); //much slower but cleaner plots
for (int t = 0; t < trials; t++) {
- doTrial(stats, nextU); //at this # of uniques
- sumSerialzeTime_nS += stats.serializeTime_nS;
- sumDeserializeTime_nS += stats.deserializeTime_nS;
- sumSizeBytes += stats.size_bytes;
+ doTrial(rawStats, nextU); //at this # of uniques
+ for (int i = 0; i < numStats; i++) {
+ sumStats[i] += rawStats[i];
+ }
+ }
+ for (int i = 0; i < numStats; i++) {
+ meanStats[i] = (double)sumStats[i] / trials;
}
- final double meanSerializeTime_nS = sumSerialzeTime_nS / trials;
- final double meanDeserializeTime_nS = sumDeserializeTime_nS / trials;
- final long size = Math.round(sumSizeBytes / trials);
- process(meanSerializeTime_nS, meanDeserializeTime_nS, size, trials, nextU, dataStr);
+ process(meanStats, trials, nextU, dataStr);
println(dataStr.toString());
}
}
@@ -143,15 +154,16 @@ public abstract class BaseSerDeProfile implements JobProfile {
return (int) pow(2.0, lgTrials);
}
- private static void process(final double meanSerTime_nS, final double meanDeserTime_nS,
- final long size, final int trials, final int uPerTrial, final StringBuilder dataStr) {
+ private static void process(final double[] meanStats, final int trials, final int uPerTrial,
+ final StringBuilder dataStr) {
//OUTPUT
- dataStr.setLength(0);
+ dataStr.setLength(0); //reset
dataStr.append(uPerTrial).append(TAB);
dataStr.append(trials).append(TAB);
- dataStr.append(meanSerTime_nS).append(TAB);
- dataStr.append(meanDeserTime_nS).append(TAB);
- dataStr.append(size);
+ dataStr.append(String.format("%12.1f", meanStats[ser_ns])).append(TAB);
+ dataStr.append(String.format("%12.1f", meanStats[deser_ns])).append(TAB);
+ dataStr.append(String.format("%12.1f", meanStats[est_ns])).append(TAB);
+ dataStr.append(String.format("%12.1f", meanStats[size_bytes]));
}
private static String getHeader() {
@@ -160,13 +172,9 @@ public abstract class BaseSerDeProfile implements JobProfile {
sb.append("Trials").append(TAB);
sb.append("Ser_nS").append(TAB);
sb.append("DeSer_nS").append(TAB);
+ sb.append("Est_nS").append(TAB);
sb.append("Size_B");
return sb.toString();
}
- public static final class Stats {
- public double serializeTime_nS;
- public double deserializeTime_nS;
- public long size_bytes;
- }
}
diff --git a/src/main/resources/theta/ThetaSerDeJob.conf b/src/main/resources/theta/ThetaSerDeEstJob.conf
similarity index 90%
rename from src/main/resources/theta/ThetaSerDeJob.conf
rename to src/main/resources/theta/ThetaSerDeEstJob.conf
index d5cec06..68ba91b 100644
--- a/src/main/resources/theta/ThetaSerDeJob.conf
+++ b/src/main/resources/theta/ThetaSerDeEstJob.conf
@@ -24,7 +24,7 @@ Trials_UPPO=2 #The horizontal x-resolution of trial points, Points Per Octave
# Trials Profile
Trials_lgMaxT=16 #Max trials at start (low counts)
-Trials_lgMinT=7 #Min trials at tail (high counts)
+Trials_lgMinT=12 #Min trials at tail (high counts)
#Trails Speed related
Trials_lgMinBpU=0 #start the downward slope of trials at this LgU
@@ -39,8 +39,10 @@ ReadableDateFormat=yyyy/MM/dd HH:mm:ss z
#Job Profile
JobProfile=org.apache.datasketches.characterization.theta.ThetaSerDeProfile
LgK=12
-THETA_lgRF=0 #set the log resize factor to 0 (RF = 1)
+THETA_lgRF=1 #set the log resize factor (0 -> RF1, 1 -> RF2, 2 -> RF4, 3 -> RF8)
THETA_famName=QUICKSELECT #QUICKSELECT. Cannot use ALPHA until 0.10.4
THETA_p=1.0
THETA_direct=false
THETA_rebuild=false
+THETA_SerDe=false
+THETA_Est=true
diff --git a/tools/SketchesCheckstyle.xml b/tools/SketchesCheckstyle.xml
index 90597a9..03a69c3 100644
--- a/tools/SketchesCheckstyle.xml
+++ b/tools/SketchesCheckstyle.xml
@@ -39,7 +39,7 @@ under the License.
<property name="fileExtensions" value="java"/>
<module name="BeforeExecutionExclusionFileFilter">
- <property name="fileNamePattern" value=".*Test\.java$"/>
+ <property name="fileNamePattern" value="src/test/java/.+$"/>
</module>
<module name="FileTabCharacter">
@@ -184,6 +184,7 @@ under the License.
<module name="UnusedImports"/>
+
<!-- Filters -->
<!-- Enable suppression using comments: //CHECKSTYLE.OFF: "RULE" and //CHECKSTYLE.ON: "RULE"
You must specify the specific rule, as in: //CHECKSTYLE.OFF: LineLength -->
@@ -203,10 +204,10 @@ under the License.
<module name="JavadocMethod">
<property name="scope" value="public"/>
<property name="allowMissingParamTags" value="false"/>
- <property name="allowMissingThrowsTags" value="true"/>
+ <!-- <property name="allowMissingThrowsTags" value="true"/> now not allowed ?!? -->
<property name="allowMissingReturnTag" value="false"/>
<property name="allowedAnnotations" value="Override, Test"/>
- <property name="allowThrowsTagsForSubclasses" value="true"/>
+ <!-- <property name="allowThrowsTagsForSubclasses" value="true"/> now not allowed ?!? -->
</module>
<module name="JavadocParagraph"/>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org