#! /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. #-------------------------------------------------------------------- # Run from Travis which has no good way to attach logs to a # build. Instead, we check if any IT failed. If so, we append # the last 100 lines of each server log to stdout. We have to # stay wihtin the 4MB limit which Travis applies, so we only # emit logs for the first failure, and only for servers that # don't report normal completion. # # The only good way to check for test failures is to parse # the Failsafe summary for each test located in # /target/failsafe-reports/failsafe-summary.xml # # This directory has many subdirectories, some of which are # tests. We rely on the fact that a test starts with "it-" AND # contains a failsafe report. (Some projects start with "it-" # but are not tests.) # Run in the docker-tests directory cd $(dirname $0) # Scan for candidate projects for PROJECT in it-* do # Check if a failsafe report exists. It will exist if the directory is # a test project and failsafe ran on that directory. REPORTS="$PROJECT/target/failsafe-reports/failsafe-summary.xml" if [ -f "$REPORTS" ] then # OK, so Bash isn't the world's best text processing language... ERRS=1 FAILS=1 while IFS= read -r line do if [ "$line" = " 0" ] then ERRS=0 fi if [ "$line" = " 0" ] then FAILS=0 fi done < "$REPORTS" if [ $ERRS -eq 1 -o $FAILS -eq 1 ] then FOUND_LOGS=0 echo "======= $PROJECT Failed ==========" # All logs except zookeeper for log in $(ls $PROJECT/target/shared/logs/[a-y]*.log) do # We assume that a successful exit includes a line with the # following: # Stopping lifecycle [module] stage [INIT] tail -5 "$log" | grep -Fq 'Stopping lifecycle [module] stage [INIT]' if [ $? -ne 0 ] then # Assume failure and report tail echo $(basename $log) "logtail ========================" tail -100 "$log" FOUND_LOGS=1 fi done # Only emit the first failure to avoid output bloat if [ $FOUND_LOGS -eq 1 ] then exit 0 else echo "All Druid services exited normally." fi fi fi done