Skip to content

Commit

Permalink
HIVE-23323: Add qsplits profile (Zoltan Haindrich reviewed by Miklos …
Browse files Browse the repository at this point in the history
…Gergely)

Signed-off-by: Zoltan Haindrich <zhaindrich@cloudera.com>
  • Loading branch information
kgyrtkirk committed May 5, 2020
1 parent ba1e5f0 commit 772bfda
Show file tree
Hide file tree
Showing 14 changed files with 281 additions and 12 deletions.
26 changes: 26 additions & 0 deletions itests/bin/generate-cli-splits.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/bash

usage() {
echo "$0 <from> <to>"
exit 1
}

[ "$1" == "" ] && usage
[ "$2" == "" ] && usage


inDir="$1"
outDir="$2"

git grep SplitSupport.process | grep "$1" | cut -d ':' -f1 | while read f;do

echo "processing: $f"
n="`grep N_SPLITS "$f" | cut -d= -f2 | tr -c -d '0-9'`"
echo " * nSplits: $n"

for((i=0;i<n;i++)) {
oDir="`dirname $f | sed "s|$inDir|$outDir|"`/split$i"
mkdir -p $oDir
cat $f | sed -r "s|^(package.*);$|\1.split$i;|g" > $oDir/`basename $f`
}
done
50 changes: 49 additions & 1 deletion itests/qtest-spark/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -417,5 +417,53 @@
</plugin>
</plugins>
</build>

<profiles>
<profile>
<id>qsplits</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>generate-split-tests</id>
<phase>generate-sources</phase>
<configuration>
<target>
<exec executable="bash" failonerror="true">
<arg value="${basedir}/../bin/generate-cli-splits.sh"/>
<arg value="src/test/java"/>
<arg value="target/generated-test-sources"/>
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>add-test-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>target/generated-test-sources</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.hadoop.hive.cli;

import java.io.File;
import java.util.List;

import org.apache.hadoop.hive.cli.control.CliAdapter;
import org.apache.hadoop.hive.cli.control.CliConfigs;
import org.apache.hadoop.hive.cli.control.SplitSupport;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
Expand All @@ -34,11 +35,13 @@
@RunWith(Parameterized.class)
public class TestMiniSparkOnYarnCliDriver {

private static final int N_SPLITS = 5;

static CliAdapter adapter = new CliConfigs.SparkOnYarnCliConfig().getCliAdapter();

@Parameters(name = "{0}")
public static List<Object[]> getParameters() throws Exception {
return adapter.getParameters();
return SplitSupport.process(adapter.getParameters(), TestMiniSparkOnYarnCliDriver.class, N_SPLITS);
}

@ClassRule
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.hadoop.hive.cli;

import java.io.File;
import java.util.List;

import org.apache.hadoop.hive.cli.control.CliAdapter;
import org.apache.hadoop.hive.cli.control.CliConfigs;
import org.apache.hadoop.hive.cli.control.SplitSupport;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
Expand All @@ -34,11 +35,13 @@
@RunWith(Parameterized.class)
public class TestSparkCliDriver {

private static final int N_SPLITS = 11;

static CliAdapter adapter = new CliConfigs.SparkCliConfig().getCliAdapter();

@Parameters(name = "{0}")
public static List<Object[]> getParameters() throws Exception {
return adapter.getParameters();
return SplitSupport.process(adapter.getParameters(), TestSparkCliDriver.class, N_SPLITS);
}

@ClassRule
Expand Down
51 changes: 48 additions & 3 deletions itests/qtest/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -434,9 +434,55 @@
<test.warehouse.scheme></test.warehouse.scheme>
</properties>
</profile>
<profile>
<id>qsplits</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>generate-split-tests</id>
<phase>generate-sources</phase>
<configuration>
<target>
<exec executable="bash" failonerror="true">
<arg value="${basedir}/../bin/generate-cli-splits.sh"/>
<arg value="src/test/java"/>
<arg value="target/generated-test-sources"/>
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>add-test-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>target/generated-test-sources</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>

<build>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
Expand Down Expand Up @@ -539,5 +585,4 @@
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

import org.apache.hadoop.hive.cli.control.CliAdapter;
import org.apache.hadoop.hive.cli.control.CliConfigs;
import org.apache.hadoop.hive.cli.control.SplitSupport;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
Expand All @@ -33,11 +34,13 @@
@RunWith(Parameterized.class)
public class TestCliDriver {

private static final int N_SPLITS = 17;

static CliAdapter adapter = new CliConfigs.CliConfig().getCliAdapter();

@Parameters(name = "{0}")
public static List<Object[]> getParameters() throws Exception {
return adapter.getParameters();
return SplitSupport.process(adapter.getParameters(), TestCliDriver.class, N_SPLITS);
}

@ClassRule
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

import org.apache.hadoop.hive.cli.control.CliAdapter;
import org.apache.hadoop.hive.cli.control.CliConfigs;
import org.apache.hadoop.hive.cli.control.SplitSupport;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
Expand All @@ -33,11 +34,13 @@
@RunWith(Parameterized.class)
public class TestEncryptedHDFSCliDriver {

private static final int N_SPLITS = 3;

static CliAdapter adapter = new CliConfigs.EncryptedHDFSCliConfig().getCliAdapter();

@Parameters(name = "{0}")
public static List<Object[]> getParameters() throws Exception {
return adapter.getParameters();
return SplitSupport.process(adapter.getParameters(), TestEncryptedHDFSCliDriver.class, N_SPLITS);
}

@ClassRule
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

import org.apache.hadoop.hive.cli.control.CliAdapter;
import org.apache.hadoop.hive.cli.control.CliConfigs;
import org.apache.hadoop.hive.cli.control.SplitSupport;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
Expand All @@ -33,11 +34,13 @@
@RunWith(Parameterized.class)
public class TestMiniLlapCliDriver {

private static final int N_SPLITS = 3;

static CliAdapter adapter = new CliConfigs.MiniLlapCliConfig().getCliAdapter();

@Parameters(name = "{0}")
public static List<Object[]> getParameters() throws Exception {
return adapter.getParameters();
return SplitSupport.process(adapter.getParameters(), TestMiniLlapCliDriver.class, N_SPLITS);
}

@ClassRule
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

import org.apache.hadoop.hive.cli.control.CliAdapter;
import org.apache.hadoop.hive.cli.control.CliConfigs;
import org.apache.hadoop.hive.cli.control.SplitSupport;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
Expand All @@ -35,9 +36,11 @@ public class TestMiniLlapLocalCliDriver {

static CliAdapter adapter = new CliConfigs.MiniLlapLocalCliConfig().getCliAdapter();

private static int N_SPLITS = 32;

@Parameters(name = "{0}")
public static List<Object[]> getParameters() throws Exception {
return adapter.getParameters();
return SplitSupport.process(adapter.getParameters(), TestMiniLlapLocalCliDriver.class, N_SPLITS);
}

@ClassRule
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package org.apache.hadoop.hive.cli.control;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.google.common.annotations.VisibleForTesting;

public class SplitSupport {

public static List<Object[]> process(List<Object[]> parameters, Class<?> currentClass, int nSplits) {
if (!isSplitExecution(currentClass)) {
return parameters;
}
// auto-disable primary test in case splits are present
if (isSplit0ClassExistsFor(currentClass)) {
return new ArrayList<>();
}
int i = getSplitIndex(currentClass);
return getSplitParams(parameters, i, nSplits);
}

private static boolean isSplitExecution(Class<?> currentClass) {
return isSplitClass(currentClass) || isSplit0ClassExistsFor(currentClass);
}

@VisibleForTesting
static List<Object[]> getSplitParams(List<Object[]> parameters, int i, int nSplits) {
if(i<0 || i>=nSplits) {
throw new IllegalArgumentException("unexpected");
}
int n = parameters.size();
int st = i * n / nSplits;
int ed = (i + 1) * n / nSplits;

return parameters.subList(st, ed);
}

@VisibleForTesting
static boolean isSplitClass(Class<?> currentClass) {
Package p = currentClass.getPackage();
return p.getName().matches(".*split[0-9]+$");
}

@VisibleForTesting
static int getSplitIndex(Class<?> currentClass) {
Package p = currentClass.getPackage();
Pattern pat = Pattern.compile("(.*split)([0-9]+)$");
Matcher matcher = pat.matcher(p.getName());
if (matcher.find()) {
return Integer.parseInt(matcher.group(2));
}
throw new IllegalArgumentException("cant get splitindex for: " + p);
}

@VisibleForTesting
static boolean isSplit0ClassExistsFor(Class<?> clazz) {
Package p = clazz.getPackage();
String split1 = p.getName() + ".split0." + clazz.getSimpleName();
try {
Class<?> c = Class.forName(split1);
return c != null;
} catch (ClassNotFoundException e) {
return false;
}
}

}
Loading

0 comments on commit 772bfda

Please sign in to comment.