diff --git a/paddle/scripts/paddle_build.sh b/paddle/scripts/paddle_build.sh index 87fb6628f42230ad1b5b92a3b5a1e577bc1c2bbd..315e2ac7af0030e323b4b001682b1b90325f999e 100755 --- a/paddle/scripts/paddle_build.sh +++ b/paddle/scripts/paddle_build.sh @@ -568,35 +568,46 @@ EOF retry_time=3 exec_times=0 exec_time_array=('first' 'second' 'third') + exec_retry_threshold=20 if [ -n "$failed_test_lists" ];then mactest_error=1 - while ( [ $exec_times -lt $retry_time ] && [ -n "${failed_test_lists}" ] ) - do - retry_unittests_record="$retry_unittests_record$failed_test_lists" - failed_test_lists_ult=`echo "${failed_test_lists}"` - read retry_unittests <<< $(echo "$failed_test_lists" | grep -oEi "\-.+\(" | sed 's/(//' | sed 's/- //' ) - echo "=========================================" - echo "This is the ${exec_time_array[$exec_times]} time to re-run" - echo "=========================================" - echo "The following unittest will be re-run:" - echo "${retry_unittests}" - echo "=========================================" - - retry_unittests_regular='' - for line in ${retry_unittests[@]} ; - do - if [[ "$retry_unittests_regular" == "" ]];then - retry_unittests_regular="^$line$" - else - retry_unittests_regular="$retry_unittests_regular|^$line$" - fi - done - rm -f $tmp_dir/* - failed_test_lists='' - ctest -R "($retry_unittests_regular)" --output-on-failure -j $2 | tee $tmpfile - collect_failed_tests - exec_times=$[$exec_times+1] - done + read need_retry_ut_str <<< $(echo "$failed_test_lists" | grep -oEi "\-.+\(" | sed 's/(//' | sed 's/- //' ) + need_retry_ut_arr=(${need_retry_ut_str}) + need_retry_ut_count=${#need_retry_ut_arr[@]} + if [ $need_retry_ut_count -lt $exec_retry_threshold ];then + while ( [ $exec_times -lt $retry_time ] && [ -n "${failed_test_lists}" ] ) + do + retry_unittests_record="$retry_unittests_record$failed_test_lists" + failed_test_lists_ult=`echo "${failed_test_lists}"` + read retry_unittests <<< $(echo "$failed_test_lists" | grep -oEi "\-.+\(" | sed 's/(//' | sed 's/- //' ) + echo "=========================================" + echo "This is the ${exec_time_array[$exec_times]} time to re-run" + echo "=========================================" + echo "The following unittest will be re-run:" + echo "${retry_unittests}" + echo "=========================================" + + retry_unittests_regular='' + for line in ${retry_unittests[@]} ; + do + if [[ "$retry_unittests_regular" == "" ]];then + retry_unittests_regular="^$line$" + else + retry_unittests_regular="$retry_unittests_regular|^$line$" + fi + done + rm -f $tmp_dir/* + failed_test_lists='' + ctest -R "($retry_unittests_regular)" --output-on-failure -j $2 | tee $tmpfile + collect_failed_tests + exec_times=$[$exec_times+1] + done + else + echo "=========================================" + echo "There are more than 20 failed unit tests, so no unit test retry!!!" + echo "=========================================" + fi + fi #mactest_error=$? ut_endTime_s=`date +%s` @@ -1080,71 +1091,81 @@ set +x retry_unittests_record='' retry_time=3 exec_time_array=('first' 'second' 'third') + exec_retry_threshold=20 if [ -n "$failed_test_lists" ];then - while ( [ $exec_times -lt $retry_time ] && [ -n "${failed_test_lists}" ] ) - do - - retry_unittests_record="$retry_unittests_record$failed_test_lists" - failed_test_lists_ult=`echo "${failed_test_lists}" |grep -Po '[^ ].*$'` - read retry_unittests <<< $(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' ) - echo "=========================================" - echo "This is the ${exec_time_array[$exec_times]} time to re-run" - echo "=========================================" - echo "The following unittest will be re-run:" - echo "${failed_test_lists_ult}" + read need_retry_ut_str <<< $(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' ) + need_retry_ut_arr=(${need_retry_ut_str}) + need_retry_ut_count=${#need_retry_ut_arr[@]} + if [ $need_retry_ut_count -lt $exec_retry_threshold ];then + while ( [ $exec_times -lt $retry_time ] && [ -n "${failed_test_lists}" ] ) + do - for line in ${retry_unittests[@]} ; - do - - one_card_tests=$single_card_tests'|'$single_card_tests_1 - - read tmp_one_tmp <<< "$( echo $one_card_tests | grep -oEi $line )" - read tmp_mul_tmp <<< "$( echo $multiple_card_tests | grep -oEi $line )" - read exclusive_tmp <<< "$( echo $exclusive_tests | grep -oEi $line )" - - if [[ "$tmp_one_tmp" != "" ]]; then - if [[ "$one_card_retry" == "" ]]; then - one_card_retry="^$line$" - else - one_card_retry="$one_card_retry|^$line$" - fi - elif [[ "$tmp_mul_tmp" != "" ]]; then - if [[ "$multiple_card_retry" == "" ]]; then - multiple_card_retry="^$line$" + retry_unittests_record="$retry_unittests_record$failed_test_lists" + failed_test_lists_ult=`echo "${failed_test_lists}" |grep -Po '[^ ].*$'` + read retry_unittests <<< $(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' ) + echo "=========================================" + echo "This is the ${exec_time_array[$exec_times]} time to re-run" + echo "=========================================" + echo "The following unittest will be re-run:" + echo "${failed_test_lists_ult}" + + for line in ${retry_unittests[@]} ; + do + + one_card_tests=$single_card_tests'|'$single_card_tests_1 + + read tmp_one_tmp <<< "$( echo $one_card_tests | grep -oEi $line )" + read tmp_mul_tmp <<< "$( echo $multiple_card_tests | grep -oEi $line )" + read exclusive_tmp <<< "$( echo $exclusive_tests | grep -oEi $line )" + + if [[ "$tmp_one_tmp" != "" ]]; then + if [[ "$one_card_retry" == "" ]]; then + one_card_retry="^$line$" + else + one_card_retry="$one_card_retry|^$line$" + fi + elif [[ "$tmp_mul_tmp" != "" ]]; then + if [[ "$multiple_card_retry" == "" ]]; then + multiple_card_retry="^$line$" + else + multiple_card_retry="$multiple_card_retry|^$line$" + fi else - multiple_card_retry="$multiple_card_retry|^$line$" + if [[ "$exclusive_retry" == "" ]];then + exclusive_retry="^$line$" + else + exclusive_retry="$exclusive_retry|^$line$" + fi fi - else - if [[ "$exclusive_retry" == "" ]];then - exclusive_retry="^$line$" - else - exclusive_retry="$exclusive_retry|^$line$" - fi - fi - done + done - if [[ "$one_card_retry" != "" ]]; then - card_test "$one_card_retry" 1 - fi + if [[ "$one_card_retry" != "" ]]; then + card_test "$one_card_retry" 1 + fi - if [[ "$multiple_card_retry" != "" ]]; then - card_test "$multiple_card_retry" 2 - fi + if [[ "$multiple_card_retry" != "" ]]; then + card_test "$multiple_card_retry" 2 + fi - if [[ "$exclusive_retry" != "" ]]; then - card_test "$exclusive_retry" - fi - - exec_times=$[$exec_times+1] - failed_test_lists='' - collect_failed_tests - rm -f $tmp_dir/* - one_card_retry='' - multiple_card_retry='' - exclusive_retry='' - retry_unittests='' - done + if [[ "$exclusive_retry" != "" ]]; then + card_test "$exclusive_retry" + fi + + exec_times=$[$exec_times+1] + failed_test_lists='' + collect_failed_tests + rm -f $tmp_dir/* + one_card_retry='' + multiple_card_retry='' + exclusive_retry='' + retry_unittests='' + done + else + echo "=========================================" + echo "There are more than 20 failed unit tests, so no unit test retry!!!" + echo "=========================================" + fi fi if [[ "$EXIT_CODE" != "0" ]]; then