You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by bu...@apache.org on 2017/11/09 21:09:56 UTC
[07/12] hbase git commit: HBASE-19189 Ad-hoc test job for running a
subset of tests lots of times
HBASE-19189 Ad-hoc test job for running a subset of tests lots of times
Signed-off-by: Michael Stack <st...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/667f185c
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/667f185c
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/667f185c
Branch: refs/heads/branch-1.3
Commit: 667f185cd0e61faacb00ce01afaa1543e95fb5b0
Parents: 9ae7566
Author: Sean Busbey <bu...@apache.org>
Authored: Mon Nov 6 13:48:05 2017 -0600
Committer: Sean Busbey <bu...@apache.org>
Committed: Thu Nov 9 15:08:33 2017 -0600
----------------------------------------------------------------------
dev-support/adhoc_run_tests/Jenkinsfile | 93 ++++++++++++++++++
dev-support/adhoc_run_tests/adhoc_run_tests.sh | 102 ++++++++++++++++++++
dev-support/gather_machine_environment.sh | 50 ++++++++++
3 files changed, 245 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/667f185c/dev-support/adhoc_run_tests/Jenkinsfile
----------------------------------------------------------------------
diff --git a/dev-support/adhoc_run_tests/Jenkinsfile b/dev-support/adhoc_run_tests/Jenkinsfile
new file mode 100644
index 0000000..b3793cd
--- /dev/null
+++ b/dev-support/adhoc_run_tests/Jenkinsfile
@@ -0,0 +1,93 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+pipeline {
+ parameters {
+ string(name: 'tests', description: 'space separated list of tests to run. e.g. ' +
+ 'TestLogRollingNoCluster TestMetricRegistryImpl TestConstraints')
+ string(name: 'node', defaultValue: 'Hadoop',
+ description: 'the node label that should be used to run the test.')
+ string(name: 'repeat_count', defaultValue: '100',
+ description: 'number of iterations to run looking for a failure.')
+ string(name: 'fork_count', defaultValue: '0.5C', description: '''
+ Given to surefire to set the number of parallel forks for a given test attempt (i.e. one
+ maven invocation that has all of the specified tests. The default tries to use half of the
+ available cores on the system.
+
+ For more information see
+ <a href="http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#forkCount">
+ the surefire docs on the forkCount parameter</a>
+''')
+ }
+ agent {
+ node {
+ label "${params.node}"
+ }
+ }
+ options {
+ timeout (time: 6, unit: 'HOURS')
+ timestamps()
+ }
+ environment {
+ // where we check out to across stages
+ BASEDIR = "${env.WORKSPACE}/component"
+ OUTPUT_RELATIVE = 'output'
+ OUTPUTDIR = "${env.WORKSPACE}/output"
+ BRANCH_SPECIFIC_DOCKERFILE = "${env.BASEDIR}/dev-support/docker/Dockerfile"
+ }
+ stages {
+ stage ('run tests') {
+ tools {
+ maven 'Maven (latest)'
+ // this needs to be set to the jdk that ought to be used to build releases on the branch
+ // the Jenkinsfile is stored in.
+ jdk "JDK 1.8 (latest)"
+ }
+ steps {
+ sh """#!/bin/bash -e
+ echo "Setting up directories"
+ rm -rf "${env.OUTPUTDIR}" && mkdir "${env.OUTPUTDIR}"
+ rm -rf ".m2-repo" && mkdir ".m2-repo"
+ mkdir "${env.OUTPUTDIR}/machine"
+"""
+ sh """#!/bin/bash -e
+ "${env.BASEDIR}/dev-support/gather_machine_environment.sh" \
+ "${OUTPUT_RELATIVE}/machine"
+"""
+ dir ("component") {
+ sh '''#!/bin/bash -e
+ ./dev-support/adhoc_run_tests/adhoc_run_tests.sh \
+ --force-timeout 1800 \
+ --maven-local-repo ".m2-repo" \
+ --log-output "${OUTPUTDIR}" \
+ --surefire-fork-count "${fork_count}" \
+ --repeat "${repeat_count}" \
+ "${tests}"
+'''
+ }
+ }
+ post {
+ always {
+ archive 'output/*'
+ archive 'output/**/*'
+ }
+ failure {
+ archive 'component/**/target/surefire-reports/*'
+ }
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/hbase/blob/667f185c/dev-support/adhoc_run_tests/adhoc_run_tests.sh
----------------------------------------------------------------------
diff --git a/dev-support/adhoc_run_tests/adhoc_run_tests.sh b/dev-support/adhoc_run_tests/adhoc_run_tests.sh
new file mode 100755
index 0000000..1dedcb1
--- /dev/null
+++ b/dev-support/adhoc_run_tests/adhoc_run_tests.sh
@@ -0,0 +1,102 @@
+#!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+set -e
+function usage {
+ echo "Usage: ${0} [options] TestSomeTestName [TestOtherTest...]"
+ echo ""
+ echo " --repeat times number of times to repeat if successful"
+ echo " --force-timeout seconds Seconds to wait before killing a given test run."
+ echo " --maven-local-repo /path/to/use Path for maven artifacts while building"
+ echo " --surefire-fork-count set the fork-count. only useful if multiple " \
+ "tests running (default 0.5C)"
+ echo " --log-output /path/to/use path to directory to hold attempt log"
+ exit 1
+}
+# Get arguments
+declare -i force_timeout=7200
+declare fork_count="0.5C"
+declare -i attempts=1
+declare maven_repo="${HOME}/.m2/repository"
+declare output="."
+while [ $# -gt 0 ]
+do
+ case "$1" in
+ --force-timeout) shift; force_timeout=$1; shift;;
+ --maven-local-repo) shift; maven_repo=$1; shift;;
+ --repeat) shift; attempts=$1; shift;;
+ --log-output) shift; output=$1; shift;;
+ --surefire-fork-count) shift; fork_count=$1; shift;;
+ --) shift; break;;
+ -*) usage ;;
+ *) break;; # terminate while loop
+ esac
+done
+
+if [ "$#" -lt 1 ]; then
+ usage
+fi
+
+function find_modules
+{
+ declare testmaybepattern=$1
+ declare path
+ while IFS= read -r -d $'\0' path; do
+ while [ -n "${path}" ]; do
+ path=$(dirname "${path}")
+ if [ -f "${path}/pom.xml" ]; then
+ echo "${path}"
+ break
+ fi
+ done
+ done < <(find . -name "${testmaybepattern}.java" -a -type f -a -not -path '*/target/*' -print0)
+}
+
+function echo_run_redirect
+{
+ declare log=$1
+ shift
+ echo "${*}" >"${log}"
+ "${@}" >>"${log}" 2>&1
+}
+
+declare -a modules
+
+for test in "${@}"; do
+ for module in $(find_modules "${test}"); do
+ if [[ ! "${modules[*]}" =~ ${module} ]]; then
+ echo "adding module '${module}' to set."
+ modules+=(${module})
+ fi
+ done
+done
+
+declare -a mvn_module_arg
+
+for module in "${modules[@]}"; do
+ mvn_module_arg+=(-pl "${module}")
+done
+declare tests="${*}"
+for attempt in $(seq "${attempts}"); do
+ echo "Attempt ${attempt}" >&2
+ echo_run_redirect "${output}/mvn_test.log" mvn --batch-mode -Dmaven.repo.local="${maven_repo}" \
+ -Dtest="${tests// /,}" \
+ -Dsurefire.rerunFailingTestsCount=0 -Dsurefire.parallel.forcedTimeout="${force_timeout}" \
+ -Dsurefire.shutdown=kill -DtrimStackTrace=false -am "${mvn_module_arg[@]}" \
+ -DforkCount="${fork_count}" package
+done
http://git-wip-us.apache.org/repos/asf/hbase/blob/667f185c/dev-support/gather_machine_environment.sh
----------------------------------------------------------------------
diff --git a/dev-support/gather_machine_environment.sh b/dev-support/gather_machine_environment.sh
new file mode 100755
index 0000000..8f2c74e
--- /dev/null
+++ b/dev-support/gather_machine_environment.sh
@@ -0,0 +1,50 @@
+#!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+set -e
+function usage {
+ echo "Usage: ${0} /path/for/output/dir"
+ echo ""
+ echo " Gather info about a build machine that test harnesses should poll before running."
+ echo " presumes you'll then archive the passed output dir."
+
+ exit 1
+}
+
+if [ "$#" -lt 1 ]; then
+ usage
+fi
+
+
+declare output=$1
+
+echo "getting machine specs, find in ${BUILD_URL}/artifact/${output}/"
+echo "JAVA_HOME: ${JAVA_HOME}" >"${output}/java_home" 2>&1 || true
+ls -l "${JAVA_HOME}" >"${output}/java_home_ls" 2>&1 || true
+echo "MAVEN_HOME: ${MAVEN_HOME}" >"${output}/mvn_home" 2>&1 || true
+mvn --offline --version >"${output}/mvn_version" 2>&1 || true
+cat /proc/cpuinfo >"${output}/cpuinfo" 2>&1 || true
+cat /proc/meminfo >"${output}/meminfo" 2>&1 || true
+cat /proc/diskstats >"${output}/diskstats" 2>&1 || true
+cat /sys/block/sda/stat >"${output}/sys-block-sda-stat" 2>&1 || true
+df -h >"${output}/df-h" 2>&1 || true
+ps -Aww >"${output}/ps-Aww" 2>&1 || true
+ifconfig -a >"${output}/ifconfig-a" 2>&1 || true
+lsblk -ta >"${output}/lsblk-ta" 2>&1 || true
+lsblk -fa >"${output}/lsblk-fa" 2>&1 || true
+ulimit -l >"${output}/ulimit-l" 2>&1 || true