Set test.runners based on cores and memory size

patch by Jay Zhuang; reviewed by Ariel Weisberg for CASSANDRA-13078
This commit is contained in:
Jay Zhuang 2017-07-06 18:01:38 -07:00 committed by Ariel Weisberg
parent 97fb4d1029
commit 2400d07bf5
3 changed files with 55 additions and 6 deletions

View File

@ -1,4 +1,5 @@
3.0.15
* Set test.runners based on cores and memory size (CASSANDRA-13078)
* Allow different NUMACTL_ARGS to be passed in (CASSANDRA-13557)
* Allow native function calls in CQLSSTableWriter (CASSANDRA-12606)
* Fix secondary index queries on COMPACT tables (CASSANDRA-13627)

View File

@ -59,7 +59,6 @@
<property name="test.classlistfile" value="testlist.txt"/>
<property name="benchmark.name" value=""/>
<property name="test.methods" value=""/>
<property name="test.runners" value="1"/>
<property name="test.unit.src" value="${test.dir}/unit"/>
<property name="test.long.src" value="${test.dir}/long"/>
<property name="test.burn.src" value="${test.dir}/burn"/>
@ -1625,12 +1624,25 @@
<scriptdef name="testparallelhelper" language="javascript">
<attribute name="testdelegate"/>
<![CDATA[
var Integer = java.lang.Integer;
sep = project.getProperty("path.separator");
all = project.getProperty("all-test-classes").split(sep);
dir = project.getProperty("test.unit.src");
runners = project.getProperty("test.runners")
cores = project.getProperty("cores.count")
mem = project.getProperty("mem.size")
numRunners = parseInt(project.getProperty("test.runners"));
numRunners = 1
if (runners != null) // there's test.runners override
numRunners = parseInt(runners) || 1;
else if (cores != null && mem != null) // only if cores and memory size is set
numRunners = Math.min(Math.floor(Math.sqrt(parseInt(cores) || 1)),
Math.floor((parseInt(mem) || 1)/(4*1024*1024*1024)));
if (numRunners < 1)
numRunners = 1
var echo = project.createTask("echo");
echo.setMessage("Number of test runners: " + numRunners);
echo.perform();
var p = project.createTask('parallel');
p.setThreadCount(numRunners);
@ -1652,7 +1664,42 @@
]]>
</scriptdef>
<target name="test" depends="build-test" description="Parallel Test Runner">
<target name="get-cores">
<property environment="env"/>
<!-- support for Windows -->
<condition property="cores.count" value="${env.NUMBER_OF_PROCESSORS}">
<os family="windows" />
</condition>
<!-- support for Linux and Solaris (package SUNWgnu-coreutils is required) -->
<exec executable="nproc" outputproperty="cores.count" os="Linux,SunOS,Solaris" failifexecutionfails="false">
<arg value="--all"/>
</exec>
<!-- support for Mac OS X -->
<exec executable="sysctl" outputproperty="cores.count" os="Mac,Mac OS X,Darwin" failifexecutionfails="false">
<arg value="-n"/>
<arg value="hw.ncpu"/>
</exec>
<echo message="Number of cores: ${cores.count}"/>
</target>
<target name="get-mem">
<condition property="mem.size" value="unknown">
<os family="windows" />
</condition>
<!-- support for Linux and Solaris (package SUNWgnu-coreutils is required) -->
<exec executable="bash" outputproperty="mem.size" os="Linux,SunOS,Solaris" failifexecutionfails="false">
<arg value="-c"/>
<arg value="free -b | grep Mem: | awk '{print $2}'"/>
</exec>
<!-- support for Mac OS X -->
<exec executable="sysctl" outputproperty="mem.size" os="Mac,Mac OS X,Darwin" failifexecutionfails="false">
<arg value="-n"/>
<arg value="hw.memsize"/>
</exec>
<echo message="Mem size : ${mem.size}"/>
</target>
<target name="test" depends="build-test,get-cores,get-mem" description="Parallel Test Runner">
<path id="all-test-classes-path">
<fileset dir="${test.unit.src}" includes="**/${test.name}.java" />
</path>
@ -1933,4 +1980,5 @@
file="${build.dir}/${final.name}-javadoc.jar"
classifier="javadoc"/>
</target>
</project>

View File

@ -7,7 +7,7 @@ test:
- sudo apt-get update; sudo apt-get install wamerican:
parallel: true
override:
- case $CIRCLE_NODE_INDEX in 0) ant eclipse-warnings; ant test ;; 1) ant long-test ;; 2) ant test-compression ;; 3) ant stress-test ;;esac:
- case $CIRCLE_NODE_INDEX in 0) ant eclipse-warnings; ant test -Dtest.runners=1;; 1) ant long-test ;; 2) ant test-compression ;; 3) ant stress-test ;;esac:
parallel: true
post: