From 2f7640d3965118a522b5fb18e66d5455ae132b87 Mon Sep 17 00:00:00 2001
From: Mark Goddard <mark@stackhpc.com>
Date: Thu, 5 Dec 2019 14:14:49 +0000
Subject: [PATCH] CI: Don't fail on expected critical log messages
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

There is a number of critical log messages that we see in CI from time
to time. While these should be fixed, let's not fail jobs unnecessarily.

This change introduces one expected critical message in
placement-api.log:

    Failed to fetch token data from identity server

Co-authored-by: Radosław Piliszek <radoslaw.piliszek@gmail.com>
Related-bug: #1847727
Change-Id: I92ad0be70ed05925612f0c709907ab62280326b8
---
 tests/check-logs.sh | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/tests/check-logs.sh b/tests/check-logs.sh
index c298dd3865..2d8de9d7ba 100755
--- a/tests/check-logs.sh
+++ b/tests/check-logs.sh
@@ -16,6 +16,25 @@ function check_file_for_level {
     sudo egrep " $2 " $1 | egrep -v "(logging_exception_prefix|rate_limit_except_level)"
 }
 
+function filter_out_expected_critical {
+    # $1: file
+    # Filter out expected critical log messages that we do not want to fail the
+    # job.
+
+    case $1 in
+    */placement-api.log)
+        # Sometimes we see this during upgrade when keystone is down.
+        grep -v "Failed to fetch token data from identity server"
+        ;;
+    *)
+        # We have to provide some pass-through consumer to avoid:
+        #   grep: write error: Broken pipe
+        # from check_file_for_level
+        cat
+        ;;
+    esac
+}
+
 any_critical=0
 for level in CRITICAL ERROR WARNING; do
     all_file=/tmp/logs/kolla/all-${level}.log
@@ -27,7 +46,9 @@ for level in CRITICAL ERROR WARNING; do
         if check_file_for_level $f $level >/dev/null; then
             any_matched=1
             if [[ $level = CRITICAL ]]; then
-                any_critical=1
+                if check_file_for_level $f $level | filter_out_expected_critical $f >/dev/null; then
+                    any_critical=1
+                fi
             fi
             echo $f >> $all_file
             check_file_for_level $f $level >> $all_file
-- 
GitLab