summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkrad <krad@fb.com>2017-08-17 14:09:13 -0700
committerJeff Darcy <jeff@pl.atyp.us>2017-08-18 12:28:02 +0000
commit2f343120302e7ed3ea42f276a0a92e557582ad51 (patch)
tree51f2b83e4df7ba4f11ed224ffb893661c89dff1c
parent233156d6fc1eabed41fcae6a877db3d66ff6f073 (diff)
fb-smoke: Add fb-smoke, build and build_env to r-3.8
Summary: The new plan is to keep fb-smoke, build and build_env in every version of gluster. Changes in r-3.6 will be ported to r-3.8 henceforth. We reference fbcode for remote testing. Test Plan: Run unit, asan, valgrind Reviewers: junsongli, sshreyas, jdarcy Reviewed By: jdarcy Subscribers: #posix_storage Differential Revision: https://phabricator.intern.facebook.com/D5653092 Tasks: T20082902 Change-Id: Iebf4cfc1752e97d6f9efe80af88ee06c21103d83 Signature: t1:5653092:1503006640:642f075cba3a7295af42638e100d2e48f426f07a Reviewed-on: https://review.gluster.org/18055 Smoke: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Jeff Darcy <jeff@pl.atyp.us> Tested-by: Jeff Darcy <jeff@pl.atyp.us> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
-rwxr-xr-xbuild.sh24
-rw-r--r--build_env54
-rwxr-xr-xfb-smoke.sh207
3 files changed, 285 insertions, 0 deletions
diff --git a/build.sh b/build.sh
new file mode 100755
index 00000000000..2eb5ae75424
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+PACKAGES="automake libtool gperftools-devel gperftools-debuginfo gperftools-libs \
+ glib2-devel jemalloc jemalloc-devel fb-gcc flex bison openssl-devel libxml2-devel\
+ libacl-devel userspace-rcu-devel lvm2 python-devel"
+
+if [ $(/usr/lib/rpm/redhat/dist.sh --distnum) -eq "7" ]; then
+ PACKAGES="$PACKAGES libtirpc libtirpc-devel-0.2.4 devtoolset-4-binutils devtoolset-4-gcc devtoolset-4-runtime"
+elif [ $(/usr/lib/rpm/redhat/dist.sh --distnum) -eq "6" ]; then
+ PACKAGES="$PACKAGES libfbtirpc libfbtirpc-devel libgssglue libgssglue-devel devtoolset-2-binutils devtoolset-2-gcc devtoolset-2-runtime"
+else
+ echo "Centos $(/usr/lib/rpm/redhat/dist.sh --distnum) is not currently supported"
+ exit 1
+fi
+
+# Skip this for Jekins automated builds (they have these packages already)
+# as the sudo will cause the build to fail
+[ $USER == "svcscm" ] || sudo yum install $PACKAGES -y
+
+source ./build_env
+
+./autogen.sh || exit 1
+./configure $GF_CONF_OPTS
+make -j || exit 1
diff --git a/build_env b/build_env
new file mode 100644
index 00000000000..5c53cc57b72
--- /dev/null
+++ b/build_env
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+#
+# Note: The GF_CONF_OPTS (configure) options will only be used for dev or
+# test builds. For RPM builds the configure options are defined in the
+# glusterfs.spec.in file. ASAN is not enabled by for RPMs as it degrades
+# performance. In specific instances it can be enabled simply be appending
+# the --with-asan option in the %build step of the spec file.
+#
+
+GF_CONF_OPTS="--localstatedir=/var --sysconfdir /var/lib --prefix /usr --libdir /usr/lib64 \
+ --enable-fusermount --enable-api --with-jemalloc \
+ --with-ipv6-default --with-fbextras --disable-tiering"
+
+if [ -x /usr/lib/rpm/redhat/dist.sh ]; then
+ REDHAT_MAJOR=$(/usr/lib/rpm/redhat/dist.sh --distnum)
+else
+ REDHAT_MAJOR=0
+fi
+
+# Enable systemd support on CentOS >= 7
+if [ $REDHAT_MAJOR -ge 7 ]; then
+ GF_CONF_OPTS="$GF_CONF_OPTS --with-systemd"
+fi
+export GF_CONF_OPTS
+
+# Check if ASAN is enabled
+if [ "$ASAN_ENABLED" -eq "1" ]; then
+ GF_CONF_OPTS="$GF_CONF_OPTS --with-asan"
+fi
+
+if [ $REDHAT_MAJOR -eq "7" ]; then
+ GCC_BIN="/opt/rh/devtoolset-4/root/usr/bin/gcc"
+ GCC_LIB="/opt/rh/devtoolset-4/root/lib64"
+ DESTDIR='/' # pycompile is finicky in centos7 if --destdir is passed nothing.
+elif [ $REDHAT_MAJOR -eq "6" ]; then
+ ENGSHARE_GCC_PATH="/mnt/vol/engshare/third-party2/gcc"
+ GCC_BIN="$ENGSHARE_GCC_PATH/4.9.x/centos6-native/108cf83/bin/gcc"
+ GCC_LIB="$ENGSHARE_GCC_PATH/4.9.x/centos6-native/108cf83/lib64"
+else
+ echo "Centos $REDHAT_MAJOR is not currently supported"
+ exit 1
+fi
+
+export LIB_DIR="$GCC_LIB"
+export CC="$GCC_BIN"
+
+#export CC="/mnt/vol/engshare/third-party2/gcc/4.9.x/centos6-native/108cf83/bin/gcc"
+
+# If you think this should all be done in configure.ac you'd be 100%
+# correct; aside from the fact that it simply doesn't work when done there :).
+# You'll find the debug symbols are not present in resultant binaries nor is
+# the code un-optimized.
+export CFLAGS="-O0 -ggdb -fPIC -Wall -Werror -L${LIB_DIR}"
diff --git a/fb-smoke.sh b/fb-smoke.sh
new file mode 100755
index 00000000000..72299a6a041
--- /dev/null
+++ b/fb-smoke.sh
@@ -0,0 +1,207 @@
+#!/bin/bash
+
+#
+# Tests
+#
+DESIRED_TESTS="\
+ tests/basic/*.t\
+ tests/basic/afr/*.t\
+ tests/basic/distribute/*.t\
+ tests/basic/dht/*.t\
+ tests/features/brick-min-free-space.t\
+ "
+
+KNOWN_FLAKY_TESTS="\
+ tests/basic/afr/shd-autofix-nogfid.t\
+ tests/basic/accept-v6v4.t\
+ tests/basic/bd.t\
+ tests/basic/fop-throttling.t\
+ tests/basic/fops-sanity.t\
+ tests/basic/mgmt_v3-locks.t\
+ tests/basic/mount.t\
+ tests/basic/pump.t\
+ tests/basic/rpm.t\
+ tests/basic/uss.t\
+ tests/basic/volume-snapshot.t\
+"
+
+#
+# Helpers
+#
+function elapsed_since {
+ start=$1
+ (("$SECONDS" - "$start"))
+}
+
+function flaky {
+ local f
+ for f in ${KNOWN_FLAKY_TESTS}; do
+ if [ "$f" == "$1" ]; then
+ return 0
+ fi
+ done
+ return 1
+}
+
+function outfile {
+ printf "/tmp/%s.out" "$(echo "$f" | tr / -)"
+}
+
+function exit_test {
+ if [ "$STOP_ON_FAIL" -eq "1" ]; then
+ print_result
+ exit "$1"
+ fi
+}
+
+function test {
+ f=$1
+ printf "%s" "$f"
+ local start
+ start=$SECONDS
+ local out
+ out=$(outfile "$f")
+
+ for i in $(seq 1 "$ATTEMPT"); do
+ DEBUG=1 timeout --foreground "$TEST_TIMEOUT" prove -v "$f" &> "$out.$i"
+
+ if [ "$?" -eq "0" ]; then
+ SUCCESS=$SUCCESS+1
+ printf " PASS (%s s)\n" "$(elapsed_since $start)"
+ rm -f "$out.$i"
+ return 0
+ else
+ printf " %s" "($i/$ATTEMPT)"
+ fi
+ done
+
+ if [[ $? -eq 124 || $? -eq 137 ]]; then
+ FAILED_TESTS+=($f)
+ FAIL=$FAIL+1
+ printf " TIMEOUT (%s s)\n" "$(elapsed_since $start)"
+ exit_test 1
+ else
+ FAILED_TESTS+=($f)
+ FAIL=$FAIL+1
+ printf " FAIL (%s s)\n" "$(elapsed_since $start)"
+ exit_test 1
+ fi
+}
+
+function flakytest {
+ f=$1
+
+ if [ "$SKIP_FLAKY" -eq "1" ]; then
+ SKIP=$SKIP+1
+ else
+ printf "<flaky> "
+ test "$f"
+ fi
+}
+
+function print_result {
+ echo
+ echo "== RESULTS =="
+ echo "TESTS : $TOTAL"
+ echo "SUCCESS : $SUCCESS"
+ echo "FAIL : $FAIL"
+ echo "SKIP : $SKIP"
+
+ if [ "$FAIL" -gt "0" ]; then
+ echo
+ echo "== FAILED TESTS =="
+ echo "${FAILED_TESTS[@]}"
+ echo
+ echo "== LOGS =="
+ "ls /tmp/*.out.*"
+ echo
+ echo "== END =="
+ fi
+}
+
+function run_remote {
+ if [ ! -d "$FBCODE" ]; then
+ echo "fbcode does not exists. Please checkout fbcode"
+ return 1
+ fi
+
+ local flags=''
+ if [ "$VERBOSE" -eq "1" ]; then
+ flags="$flags -v"
+ fi
+
+ if [ "$VALGRIND" -eq "1" ]; then
+ flags="$flags --valgrind"
+ fi
+
+ if [ "$ASAN" -eq "1" ]; then
+ flags="$flags --asan"
+ fi
+
+ "$FBCODE/storage/gluster/gluster-build/fb-gluster-test.py" $flags --tester --n "$N" --hosts "$REMOTE_HOSTS" --tests "$REMOTE_TESTS"
+}
+
+#
+# Main
+#
+declare -i TOTAL=0
+declare -i SUCCESS=0
+declare -i FAIL=0
+declare -i SKIP=0
+declare -a FAILED_TESTS
+
+TEST_TIMEOUT=${TEST_TIMEOUT:=300}
+SKIP_FLAKY=${SKIP_FLAKY:=1}
+STOP_ON_FAIL=${STOP_ON_FAIL:=0}
+FBCODE=${FBCODE:="$HOME/fbsource/fbcode"}
+N=${N:=0}
+REMOTE_HOSTS=${REMOTE_HOSTS:="$(smcc ls-hosts -s gluster.build.ash | xargs)"}
+REMOTE=${REMOTE:=0}
+REMOTE_TESTS=${REMOTE_TESTS:='smoke'}
+VERBOSE=${VERBOSE:=0}
+VALGRIND=${VALGRIND:=0}
+ASAN=${ASAN:=0}
+
+if [ "$REMOTE" -eq "1" ]; then
+ run_remote
+ exit $?
+fi
+
+if [ "$SKIP_FLAKY" -eq "0" ]; then
+ ATTEMPT=${ATTEMPT:=3}
+else
+ ATTEMPT=${ATTEMPT:=1}
+fi
+
+echo "== SETTINGS =="
+echo "TEST_TIMEOUT = $TEST_TIMEOUT s"
+echo "SKIP_FLAKY = $SKIP_FLAKY"
+echo "STOP_ON_FAIL = $STOP_ON_FAIL"
+echo "ATTEMPT = $ATTEMPT"
+echo "REMOTE = $REMOTE"
+echo "FBCODE = $FBCODE"
+echo
+
+# try cleaning up the environment
+rm -f /tmp/*.out.* || true
+
+# sanity check
+if ! cmp -s ./glusterfsd/src/.libs/glusterfsd $(which glusterfsd)
+then
+ echo "Installed gluster does not match local, perhaps you ought make install?"
+ exit 1
+fi
+
+echo "== TESTS =="
+for f in ${DESIRED_TESTS}
+do
+ TOTAL=$TOTAL+1
+ if flaky "$f"; then
+ flakytest "$f"
+ else
+ test "$f"
+ fi
+done
+
+print_result
+exit $FAIL