This is an automated email from the ASF dual-hosted git repository. adar pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kudu.git
commit 8532311f2739de0ebcfa68666f6a2d7ece3ef226 Author: Mike Percy <[email protected]> AuthorDate: Wed Dec 5 21:39:50 2018 -0800 build: enable Java flaky test reporting This patch moves flaky test environment setup out of report-test.sh and into build-and-test.sh so that those environment variables can be inherited by the Java build environment. That change enables flaky test reporting for Java tests. This was tested in a RHEL6 DEBUG build environment. Example: http://dist-test.cloudera.org:8080/test_drilldown?test_name=testHiveMetastoreIntegration%28org.apache.kudu.test.TestMiniKuduCluster%29 Change-Id: Ifef74fc9bf5453105c267418fa24daf4c33f73f3 Reviewed-on: http://gerrit.cloudera.org:8080/12043 Tested-by: Kudu Jenkins Reviewed-by: Grant Henke <[email protected]> --- build-support/jenkins/build-and-test.sh | 34 ++++++++++++++++++++++ build-support/report-test.sh | 51 ++++++++++++--------------------- 2 files changed, 53 insertions(+), 32 deletions(-) diff --git a/build-support/jenkins/build-and-test.sh b/build-support/jenkins/build-and-test.sh index 9c0c956..23b20e4 100755 --- a/build-support/jenkins/build-and-test.sh +++ b/build-support/jenkins/build-and-test.sh @@ -74,6 +74,9 @@ # # ERROR_ON_TEST_FAILURE Default: 1 # Whether test failures will cause this script to return an error. +# +# KUDU_REPORT_TEST_RESULTS Default: 0 +# If non-zero, tests are reported to the central test server. # If a commit messages contains a line that says 'DONT_BUILD', exit # immediately. @@ -292,6 +295,37 @@ $CMAKE mkdir -p Testing/Temporary mkdir -p $TEST_LOGDIR +if [ -n "$KUDU_REPORT_TEST_RESULTS" ] && [ "$KUDU_REPORT_TEST_RESULTS" -ne 0 ]; then + # Export environment variables needed for flaky test reporting. + # + # The actual reporting happens in the test runners themselves. + + # On Jenkins, we'll have this variable set. Otherwise, + # report the build tag as non-jenkins. + export BUILD_TAG=${BUILD_TAG:-non-jenkins} + + # Figure out the current git revision, and append a "-dirty" tag if it's + # not a pristine checkout. + GIT_REVISION=$(cd $SOURCE_ROOT && git rev-parse HEAD) + if ! ( cd $SOURCE_ROOT && git diff --quiet . && git diff --cached --quiet . ) ; then + GIT_REVISION="${GIT_REVISION}-dirty" + fi + export GIT_REVISION + + # Parse out our "build config" - a space-separated list of tags + # which include the cmake build type as well as the list of configured + # sanitizers. + + # Define BUILD_CONFIG for flaky test reporting. + BUILD_CONFIG="$CMAKE_BUILD" + if [ "$BUILD_TYPE" = "ASAN" ]; then + BUILD_CONFIG="$BUILD_CONFIG asan ubsan" + elif [ "$BUILD_TYPE" = "TSAN" ]; then + BUILD_CONFIG="$BUILD_CONFIG tsan" + fi + export BUILD_CONFIG +fi + # Short circuit for LINT builds. if [ "$BUILD_TYPE" = "LINT" ]; then make lint | tee $TEST_LOGDIR/lint.log diff --git a/build-support/report-test.sh b/build-support/report-test.sh index 41351d2..e283c0b 100755 --- a/build-support/report-test.sh +++ b/build-support/report-test.sh @@ -24,10 +24,24 @@ # # Note that this may exit with a non-zero code if the network is flaky or the # test result server is down. +# +# Expects BUILD_TAG, GIT_REVISION, and BUILD_CONFIG environment variables to be set. set -e -ROOT=$(dirname $BASH_SOURCE)/.. +# Verify required environment variables. +if [ -z "$BUILD_TAG" ]; then + echo "BUILD_TAG environment variable must be set" + exit 1 +fi +if [ -z "$GIT_REVISION" ]; then + echo "GIT_REVISION environment variable must be set" + exit 1 +fi +if [ -z "$BUILD_CONFIG" ]; then + echo "BUILD_CONFIG environment variable must be set" + exit 1 +fi # Verify and parse command line and options if [ $# -ne 3 ]; then @@ -43,35 +57,6 @@ STATUS=$3 TEST_RESULT_SERVER=${TEST_RESULT_SERVER:-localhost:8080} REPORT_TIMEOUT=${REPORT_TIMEOUT:-10} -# On Jenkins, we'll have this variable set. Otherwise, -# report the build ID as non-jenkins. -BUILD_ID=${BUILD_TAG:-non-jenkins} - -# Figure out the current git revision, and append a "-dirty" tag if it's -# not a pristine checkout -REVISION=$(cd $ROOT && git rev-parse HEAD) -if ! ( cd $ROOT && git diff --quiet . && git diff --cached --quiet . ) ; then - REVISION="${REVISION}-dirty" -fi - -BUILD_ROOT=$(dirname $TEST_EXECUTABLE)/.. - -# Parse out our "build config" - a space-separated list of tags -# which include the cmake build type as well as the list of configured -# sanitizers - -CMAKECACHE=$BUILD_ROOT/CMakeCache.txt -BUILD_CONFIG=$(grep '^CMAKE_BUILD_TYPE:' $CMAKECACHE | cut -f 2 -d=) -if grep -q "KUDU_USE_ASAN:UNINITIALIZED=1" $CMAKECACHE ; then - BUILD_CONFIG="$BUILD_CONFIG asan" -fi -if grep -q "KUDU_USE_TSAN:UNINITIALIZED=1" $CMAKECACHE ; then - BUILD_CONFIG="$BUILD_CONFIG tsan" -fi -if grep -q "KUDU_USE_UBSAN:UNINITIALIZED=1" $CMAKECACHE ; then - BUILD_CONFIG="$BUILD_CONFIG ubsan" -fi - # We sometimes have flaky infrastructure where NTP is broken. In that case # do not report it as a failed test. if zgrep -q 'Clock considered unsynchronized' $LOGFILE ; then @@ -88,13 +73,15 @@ else LOG_PARAM="" fi +# In the backend, the BUILD_TAG field is called 'build_id', but we can't use +# that as an env variable because it'd collide with Jenkins' BUILD_ID. curl -s \ --max-time $REPORT_TIMEOUT \ $LOG_PARAM \ - -F "build_id=$BUILD_ID" \ + -F "build_id=$BUILD_TAG" \ -F "hostname=$(hostname)" \ -F "test_name=$(basename $TEST_EXECUTABLE)" \ -F "status=$STATUS" \ - -F "revision=$REVISION" \ + -F "revision=$GIT_REVISION" \ -F "build_config=$BUILD_CONFIG" \ http://$TEST_RESULT_SERVER/add_result
