Repository: hive Updated Branches: refs/heads/master dd5121c7b -> c737dbd8f
HIVE-20360: QTest: ignore driver/qtest exclusions if -Dqfile param is set (Laszlo Bodor via ) Signed-off-by: Zoltan Haindrich <k...@rxd.hu> Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/c737dbd8 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/c737dbd8 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/c737dbd8 Branch: refs/heads/master Commit: c737dbd8f1db679e20c04b2e58808ce3dbbd0710 Parents: dd5121c7 Author: Laszlo Bodor <bodorlaszlo0...@gmail.com> Authored: Fri Nov 16 13:06:24 2018 +0100 Committer: Zoltan Haindrich <k...@rxd.hu> Committed: Fri Nov 16 13:06:24 2018 +0100 ---------------------------------------------------------------------- .../hive/cli/control/AbstractCliConfig.java | 17 ++++++-- .../apache/hadoop/hive/ql/QOutProcessor.java | 45 +++++++++++++++++--- .../org/apache/hadoop/hive/ql/QTestUtil.java | 35 +++++---------- .../hadoop/hive/ql/TestQOutProcessor.java | 2 +- 4 files changed, 62 insertions(+), 37 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/c737dbd8/itests/util/src/main/java/org/apache/hadoop/hive/cli/control/AbstractCliConfig.java ---------------------------------------------------------------------- diff --git a/itests/util/src/main/java/org/apache/hadoop/hive/cli/control/AbstractCliConfig.java b/itests/util/src/main/java/org/apache/hadoop/hive/cli/control/AbstractCliConfig.java index 7151372..142f903 100644 --- a/itests/util/src/main/java/org/apache/hadoop/hive/cli/control/AbstractCliConfig.java +++ b/itests/util/src/main/java/org/apache/hadoop/hive/cli/control/AbstractCliConfig.java @@ -33,6 +33,7 @@ import java.util.regex.Pattern; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; +import org.apache.hadoop.hive.ql.QTestUtil; import org.apache.hadoop.hive.ql.QTestUtil.FsType; import org.apache.hadoop.hive.ql.QTestUtil.MiniClusterType; import org.apache.hive.testutils.HiveTestEnvSetup; @@ -214,7 +215,7 @@ public abstract class AbstractCliConfig { // dedup file list Set<File> testFiles = new TreeSet<>(); - if (queryFile != null && !queryFile.equals("")) { + if (isQFileSpecified()) { // The user may have passed a list of files - comma separated for (String qFile : TEST_SPLITTER.split(queryFile)) { File qF; @@ -223,10 +224,10 @@ public abstract class AbstractCliConfig { } else { qF = new File(qFile); } - if (excludedQueryFileNames.contains(qFile)) { + if (excludedQueryFileNames.contains(qFile) && !isQFileSpecified()) { LOG.warn(qF.getAbsolutePath() + " is among the excluded query files for this driver." + " Please update CliConfigs.java or testconfiguration.properties file to" - + " include the qfile"); + + " include the qfile or specify qfile through command line explicitly: -Dqfile=test.q"); } testFiles.add(qF); } @@ -241,12 +242,20 @@ public abstract class AbstractCliConfig { } for (String qFileName : excludedQueryFileNames) { - testFiles.remove(new File(queryDir, qFileName)); + // in case of running as ptest, exclusions should be respected, + // because test drivers receive every qfiles regardless of exclusions + if ("hiveptest".equals(System.getProperty("user.name")) || !isQFileSpecified()) { + testFiles.remove(new File(queryDir, qFileName)); + } } return testFiles; } + public boolean isQFileSpecified() { + return queryFile != null && !queryFile.equals(""); + } + private void prepareDirs() throws Exception { File hiveRootDir = new File(HIVE_ROOT); if (!hiveRootDir.exists()) { http://git-wip-us.apache.org/repos/asf/hive/blob/c737dbd8/itests/util/src/main/java/org/apache/hadoop/hive/ql/QOutProcessor.java ---------------------------------------------------------------------- diff --git a/itests/util/src/main/java/org/apache/hadoop/hive/ql/QOutProcessor.java b/itests/util/src/main/java/org/apache/hadoop/hive/ql/QOutProcessor.java index a17c508..254cc95 100644 --- a/itests/util/src/main/java/org/apache/hadoop/hive/ql/QOutProcessor.java +++ b/itests/util/src/main/java/org/apache/hadoop/hive/ql/QOutProcessor.java @@ -25,7 +25,9 @@ import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -52,6 +54,10 @@ public class QOutProcessor { public static final String MASK_PATTERN = "#### A masked pattern was here ####"; public static final String PARTIAL_MASK_PATTERN = "#### A PARTIAL masked pattern was here ####"; + private final Set<String> qMaskStatsQuerySet = new HashSet<String>(); + private final Set<String> qMaskDataSizeQuerySet = new HashSet<String>(); + private final Set<String> qMaskLineageQuerySet = new HashSet<String>(); + private static final PatternReplacementPair MASK_STATS = new PatternReplacementPair( Pattern.compile(" Num rows: [1-9][0-9]* Data size: [1-9][0-9]*"), " Num rows: ###Masked### Data size: ###Masked###"); @@ -62,6 +68,10 @@ public class QOutProcessor { Pattern.compile("POSTHOOK: Lineage: .*"), "POSTHOOK: Lineage: ###Masked###"); + private static final Pattern PATTERN_MASK_STATS = Pattern.compile("-- MASK_STATS"); + private static final Pattern PATTERN_MASK_DATA_SIZE = Pattern.compile("-- MASK_DATA_SIZE"); + private static final Pattern PATTERN_MASK_LINEAGE = Pattern.compile("-- MASK_LINEAGE"); + private FsType fsType = FsType.local; public static class LineProcessingResult { @@ -141,7 +151,8 @@ public class QOutProcessor { return patterns; } - public void maskPatterns(String fname, boolean maskStats, boolean maskDataSize, boolean maskLineage) throws Exception { + public void maskPatterns(String fname, String tname) throws Exception { + String line; BufferedReader in; BufferedWriter out; @@ -156,7 +167,7 @@ public class QOutProcessor { boolean lastWasMasked = false; while (null != (line = in.readLine())) { - LineProcessingResult result = processLine(line, maskStats, maskDataSize, maskLineage); + LineProcessingResult result = processLine(line, tname); if (result.line.equals(MASK_PATTERN)) { // We're folding multiple masked lines into one. @@ -178,7 +189,7 @@ public class QOutProcessor { out.close(); } - public LineProcessingResult processLine(String line, boolean maskStats, boolean maskDataSize, boolean maskLineage) { + public LineProcessingResult processLine(String line, String tname) { LineProcessingResult result = new LineProcessingResult(line); Matcher matcher = null; @@ -216,7 +227,7 @@ public class QOutProcessor { } } - if (!result.partialMaskWasMatched && maskStats) { + if (!result.partialMaskWasMatched && qMaskStatsQuerySet.contains(tname)) { matcher = MASK_STATS.pattern.matcher(result.line); if (matcher.find()) { result.line = result.line.replaceAll(MASK_STATS.pattern.pattern(), MASK_STATS.replacement); @@ -224,7 +235,7 @@ public class QOutProcessor { } } - if (!result.partialMaskWasMatched && maskDataSize) { + if (!result.partialMaskWasMatched && qMaskDataSizeQuerySet.contains(tname)) { matcher = MASK_DATA_SIZE.pattern.matcher(result.line); if (matcher.find()) { result.line = result.line.replaceAll(MASK_DATA_SIZE.pattern.pattern(), MASK_DATA_SIZE.replacement); @@ -232,7 +243,7 @@ public class QOutProcessor { } } - if (!result.partialMaskWasMatched && maskLineage) { + if (!result.partialMaskWasMatched && qMaskLineageQuerySet.contains(tname)) { matcher = MASK_LINEAGE.pattern.matcher(result.line); if (matcher.find()) { result.line = result.line.replaceAll(MASK_LINEAGE.pattern.pattern(), MASK_LINEAGE.replacement); @@ -298,5 +309,25 @@ public class QOutProcessor { public void addPatternWithMaskComment(String patternStr, String maskComment) { patternsWithMaskComments.add(toPatternPair(patternStr, maskComment)); } - + + public void initMasks(File qf, String query) { + if (matches(PATTERN_MASK_STATS, query)) { + qMaskStatsQuerySet.add(qf.getName()); + } + if (matches(PATTERN_MASK_DATA_SIZE, query)) { + qMaskDataSizeQuerySet.add(qf.getName()); + } + if (matches(PATTERN_MASK_LINEAGE, query)) { + qMaskLineageQuerySet.add(qf.getName()); + } + } + + private boolean matches(Pattern pattern, String query) { + Matcher matcher = pattern.matcher(query); + if (matcher.find()) { + return true; + } + return false; + } + } http://git-wip-us.apache.org/repos/asf/hive/blob/c737dbd8/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java ---------------------------------------------------------------------- diff --git a/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java b/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java index 59c7ac4..dcf2d49 100644 --- a/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java +++ b/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java @@ -156,6 +156,7 @@ public class QTestUtil { private static final String BUILD_DIR_PROPERTY = "build.dir"; // typically target private static final String TEST_SRC_TABLES_PROPERTY = "test.src.tables"; + /** * The default Erasure Coding Policy to use in Erasure Coding tests. */ @@ -173,9 +174,6 @@ public class QTestUtil { private final Set<String> qHashQuerySet; private final Set<String> qSortNHashQuerySet; private final Set<String> qNoSessionReuseQuerySet; - private final Set<String> qMaskStatsQuerySet; - private final Set<String> qMaskDataSizeQuerySet; - private final Set<String> qMaskLineageQuerySet; private static final String SORT_SUFFIX = ".sorted"; private static Set<String> srcTables; private final Set<String> srcUDFs; @@ -495,9 +493,6 @@ public class QTestUtil { qHashQuerySet = new HashSet<String>(); qSortNHashQuerySet = new HashSet<String>(); qNoSessionReuseQuerySet = new HashSet<String>(); - qMaskStatsQuerySet = new HashSet<String>(); - qMaskDataSizeQuerySet = new HashSet<String>(); - qMaskLineageQuerySet = new HashSet<String>(); this.clusterType = testArgs.getClusterType(); HadoopShims shims = ShimLoader.getHadoopShims(); @@ -534,12 +529,16 @@ public class QTestUtil { this.initScript = scriptsDir + File.separator + testArgs.getInitScript(); this.cleanupScript = scriptsDir + File.separator + testArgs.getCleanupScript(); - overWrite = "true".equalsIgnoreCase(System.getProperty("test.output.overwrite")); + overWrite = shouldOverwriteResults(); init(); savedConf = new HiveConf(conf); } + private boolean shouldOverwriteResults() { + return "true".equalsIgnoreCase(System.getProperty("test.output.overwrite")); + } + private String getScriptsDir() { // Use the current directory if it is not specified String scriptsDir = conf.get("test.data.scripts"); @@ -802,15 +801,7 @@ public class QTestUtil { qNoSessionReuseQuerySet.add(qf.getName()); } - if (matches(MASK_STATS, query)) { - qMaskStatsQuerySet.add(qf.getName()); - } - if (matches(MASK_DATA_SIZE, query)) { - qMaskDataSizeQuerySet.add(qf.getName()); - } - if (matches(MASK_LINEAGE, query)) { - qMaskLineageQuerySet.add(qf.getName()); - } + qOutProcessor.initMasks(qf, query); } private static final Pattern SORT_BEFORE_DIFF = Pattern.compile("-- SORT_BEFORE_DIFF"); @@ -818,9 +809,6 @@ public class QTestUtil { private static final Pattern HASH_QUERY_RESULTS = Pattern.compile("-- HASH_QUERY_RESULTS"); private static final Pattern SORT_AND_HASH_QUERY_RESULTS = Pattern.compile("-- SORT_AND_HASH_QUERY_RESULTS"); private static final Pattern NO_SESSION_REUSE = Pattern.compile("-- NO_SESSION_REUSE"); - private static final Pattern MASK_STATS = Pattern.compile("-- MASK_STATS"); - private static final Pattern MASK_DATA_SIZE = Pattern.compile("-- MASK_DATA_SIZE"); - private static final Pattern MASK_LINEAGE = Pattern.compile("-- MASK_LINEAGE"); private boolean matches(Pattern pattern, String query) { Matcher matcher = pattern.matcher(query); @@ -1532,8 +1520,7 @@ public class QTestUtil { File f = new File(logDir, tname + outFileExtension); - qOutProcessor.maskPatterns(f.getPath(), - qMaskStatsQuerySet.contains(tname), qMaskDataSizeQuerySet.contains(tname), qMaskLineageQuerySet.contains(tname)); + qOutProcessor.maskPatterns(f.getPath(), tname); QTestProcessExecResult exitVal = executeDiffCommand(f.getPath(), outFileName, false, qSortSet.contains(tname)); @@ -1549,11 +1536,9 @@ public class QTestUtil { public QTestProcessExecResult checkCompareCliDriverResults(String tname, List<String> outputs) throws Exception { assert outputs.size() > 1; - qOutProcessor.maskPatterns(outputs.get(0), - qMaskStatsQuerySet.contains(tname), qMaskDataSizeQuerySet.contains(tname), qMaskLineageQuerySet.contains(tname)); + qOutProcessor.maskPatterns(outputs.get(0), tname); for (int i = 1; i < outputs.size(); ++i) { - qOutProcessor.maskPatterns(outputs.get(i), - qMaskStatsQuerySet.contains(tname), qMaskDataSizeQuerySet.contains(tname), qMaskLineageQuerySet.contains(tname)); + qOutProcessor.maskPatterns(outputs.get(i), tname); QTestProcessExecResult result = executeDiffCommand( outputs.get(i - 1), outputs.get(i), false, qSortSet.contains(tname)); if (result.getReturnCode() != 0) { http://git-wip-us.apache.org/repos/asf/hive/blob/c737dbd8/itests/util/src/test/java/org/apache/hadoop/hive/ql/TestQOutProcessor.java ---------------------------------------------------------------------- diff --git a/itests/util/src/test/java/org/apache/hadoop/hive/ql/TestQOutProcessor.java b/itests/util/src/test/java/org/apache/hadoop/hive/ql/TestQOutProcessor.java index c193da3..9e19f27 100644 --- a/itests/util/src/test/java/org/apache/hadoop/hive/ql/TestQOutProcessor.java +++ b/itests/util/src/test/java/org/apache/hadoop/hive/ql/TestQOutProcessor.java @@ -68,6 +68,6 @@ public class TestQOutProcessor { } private String processLine(String line) { - return qOutProcessor.processLine(line, false, false, false).get(); + return qOutProcessor.processLine(line, null).get(); } } \ No newline at end of file