mirror of
https://github.com/apache/impala.git
synced 2025-12-19 18:12:08 -05:00
This patch will cause a junitxml file to be emitted in the case of errors in build scripts. Instead of simply echoing a message to the console, we set up a trap function that also writes out to a junit xml report that can be consumed by jenkins.impala.io. Main things to pay attention to: - New file that gets sourced by all bash scripts when trapping within bash scripts: https://gerrit.cloudera.org/c/11257/1/bin/report_build_error.sh - Installation of the python lib into impala-python venv for use from within python files: https://gerrit.cloudera.org/c/11257/1/bin/impala-python-common.sh - Change to the generate_junitxml.py file itself, for ease of https://gerrit.cloudera.org/c/11257/1/lib/python/impala_py_lib/jenkins/generate_junitxml.py Most of the other changes are to source the new report_build_error.sh script to set up the trap function. Change-Id: Idd62045bb43357abc2b89a78afff499149d3c3fc Reviewed-on: http://gerrit.cloudera.org:8080/11257 Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com> Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
78 lines
2.1 KiB
Bash
Executable File
78 lines
2.1 KiB
Bash
Executable File
#!/bin/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 -euo pipefail
|
|
. $IMPALA_HOME/bin/report_build_error.sh
|
|
setup_report_build_error
|
|
|
|
CLASSES=()
|
|
EXTRA_SHUTDOWN_TIME_SECS=1
|
|
|
|
while getopts :c:s: OPTION; do
|
|
case $OPTION in
|
|
c) CLASSES+=($OPTARG);;
|
|
s) EXTRA_SHUTDOWN_TIME_SECS=$OPTARG;;
|
|
*) echo "Usage: $0 -c <java class name> [-c ...] " \
|
|
"[-s <wait time after stopping all processes>]"
|
|
exit 1;;
|
|
esac
|
|
done
|
|
|
|
if [[ ${#CLASSES[@]} -eq 0 ]]; then
|
|
echo At least one class must be given >&2
|
|
exit 1
|
|
fi
|
|
|
|
function pid_is_running {
|
|
kill -0 $1 &>/dev/null
|
|
}
|
|
|
|
# Waits for 3 seconds for a pid to stop. Returns success if the pid is stopped otherwise
|
|
# returns failure.
|
|
function wait_for_pid_to_stop {
|
|
for I in {1..30}; do
|
|
if ! pid_is_running $1; then
|
|
return
|
|
fi
|
|
sleep 0.1
|
|
done
|
|
return 1
|
|
}
|
|
|
|
NEEDS_EXTRA_WAIT=false
|
|
for CLASS in ${CLASSES[@]}; do
|
|
PID=$(jps -m | (grep $CLASS || true) | awk '{print $1}')
|
|
if [[ -z $PID ]]; then
|
|
continue
|
|
fi
|
|
kill $PID || true # Don't error if the process somehow died on its own.
|
|
NEEDS_EXTRA_WAIT=true
|
|
if wait_for_pid_to_stop $PID; then
|
|
continue
|
|
fi
|
|
kill -9 $PID || true
|
|
if ! wait_for_pid_to_stop $PID; then
|
|
echo Unable to stop process $PID running java class $CLASS >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
if $NEEDS_EXTRA_WAIT; then
|
|
sleep $EXTRA_SHUTDOWN_TIME_SECS
|
|
fi
|