You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2017/11/30 06:21:27 UTC

hbase git commit: HBASE-19382 Update report-flakies.py script to handle yetus builds.

Repository: hbase
Updated Branches:
  refs/heads/master 79a89beb2 -> 5b7f9c253


HBASE-19382 Update report-flakies.py script to handle yetus builds.


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/5b7f9c25
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/5b7f9c25
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/5b7f9c25

Branch: refs/heads/master
Commit: 5b7f9c253583dec22d2121824753a2efbae7bf01
Parents: 79a89be
Author: Apekshit Sharma <ap...@apache.org>
Authored: Wed Nov 29 17:53:16 2017 -0800
Committer: Apekshit Sharma <ap...@apache.org>
Committed: Wed Nov 29 22:21:10 2017 -0800

----------------------------------------------------------------------
 dev-support/findHangingTests.py |  5 +++--
 dev-support/report-flakies.py   | 34 ++++++++++++++++++++++++++--------
 2 files changed, 29 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/5b7f9c25/dev-support/findHangingTests.py
----------------------------------------------------------------------
diff --git a/dev-support/findHangingTests.py b/dev-support/findHangingTests.py
index e7bf906..328516e 100755
--- a/dev-support/findHangingTests.py
+++ b/dev-support/findHangingTests.py
@@ -75,8 +75,9 @@ def get_bad_tests(console_url):
             if "FAILURE!" in line:
                 failed_tests_set.add(test_case)
             if test_case not in hanging_tests_set:
-                print  ("ERROR! No test '{}' found in hanging_tests. Might get wrong results "
-                        "for this test.".format(test_case))
+                print ("ERROR! No test '{}' found in hanging_tests. Might get wrong results "
+                       "for this test. This may also happen if maven is set to retry failing "
+                       "tests.".format(test_case))
             else:
                 hanging_tests_set.remove(test_case)
         result3 = re.match("^\\s+(\\w*).*\\sTestTimedOut", line)

http://git-wip-us.apache.org/repos/asf/hbase/blob/5b7f9c25/dev-support/report-flakies.py
----------------------------------------------------------------------
diff --git a/dev-support/report-flakies.py b/dev-support/report-flakies.py
index a28c3fb..201980d 100755
--- a/dev-support/report-flakies.py
+++ b/dev-support/report-flakies.py
@@ -51,6 +51,9 @@ parser.add_argument('--max-builds', metavar='n', action='append', type=int,
                     help='The maximum number of builds to use (if available on jenkins). Specify '
                          '0 to analyze all builds. Not required, but if specified, number of uses '
                          'should be same as that of --urls since the values are matched.')
+parser.add_argument('--is-yetus', metavar='True/False', action='append', choices=['True', 'False'],
+                    help='True, if build is yetus style i.e. look for maven output in artifacts; '
+                         'False, if maven output is in <url>/consoleText itself.')
 parser.add_argument(
     "--mvn", action="store_true",
     help="Writes two strings for including/excluding these flaky tests using maven flags. These "
@@ -66,18 +69,29 @@ if args.verbose:
     logger.setLevel(logging.INFO)
 
 
-def get_bad_tests(build_url):
+def get_bad_tests(build_url, is_yetus):
     """
-    Given url of an executed build, analyzes its console text, and returns
+    Given url of an executed build, analyzes its maven output, and returns
     [list of all tests, list of timeout tests, list of failed tests].
-    Returns None if can't get console text or if there is any other error.
+    Returns None if can't get maven output from the build or if there is any other error.
     """
     logger.info("Analyzing %s", build_url)
     response = requests.get(build_url + "/api/json").json()
     if response["building"]:
         logger.info("Skipping this build since it is in progress.")
         return {}
-    console_url = build_url + "/consoleText"
+    console_url = None
+    if is_yetus:
+        for artifact in response["artifacts"]:
+            if artifact["fileName"] == "patch-unit-root.txt":
+                console_url = build_url + "/artifact/" + artifact["relativePath"]
+                break
+        if console_url is None:
+            logger.info("Can't find 'patch-unit-root.txt' artifact for Yetus build %s\n. Ignoring "
+                        "this build.", build_url)
+            return
+    else:
+        console_url = build_url + "/consoleText"
     build_result = findHangingTests.get_bad_tests(console_url)
     if not build_result:
         logger.info("Ignoring build %s", build_url)
@@ -93,6 +107,7 @@ def expand_multi_config_projects(cli_args):
     job_urls = cli_args.urls
     excluded_builds_arg = cli_args.excluded_builds
     max_builds_arg = cli_args.max_builds
+    is_yetus_arg = cli_args.is_yetus
     if excluded_builds_arg is not None and len(excluded_builds_arg) != len(job_urls):
         raise Exception("Number of --excluded-builds arguments should be same as that of --urls "
                         "since values are matched.")
@@ -102,6 +117,9 @@ def expand_multi_config_projects(cli_args):
     final_expanded_urls = []
     for (i, job_url) in enumerate(job_urls):
         max_builds = 10000  # Some high number
+        is_yetus = False
+        if is_yetus_arg is not None:
+            is_yetus = is_yetus_arg[i] == "True"
         if max_builds_arg is not None and max_builds_arg[i] != 0:
             max_builds = int(max_builds_arg[i])
         excluded_builds = []
@@ -111,10 +129,10 @@ def expand_multi_config_projects(cli_args):
         if response.has_key("activeConfigurations"):
             for config in response["activeConfigurations"]:
                 final_expanded_urls.append({'url':config["url"], 'max_builds': max_builds,
-                                            'excludes': excluded_builds})
+                                            'excludes': excluded_builds, 'is_yetus': is_yetus})
         else:
             final_expanded_urls.append({'url':job_url, 'max_builds': max_builds,
-                                        'excludes': excluded_builds})
+                                        'excludes': excluded_builds, 'is_yetus': is_yetus})
     return final_expanded_urls
 
 
@@ -139,7 +157,7 @@ for url_max_build in expanded_urls:
         builds = json_response["builds"]
         logger.info("Analyzing job: %s", url)
     else:
-        builds = [{'number' : json_response["id"], 'url': url}]
+        builds = [{'number': json_response["id"], 'url': url}]
         logger.info("Analyzing build : %s", url)
     build_id_to_results = {}
     num_builds = 0
@@ -149,7 +167,7 @@ for url_max_build in expanded_urls:
         build_id = build["number"]
         if build_id in excludes:
             continue
-        result = get_bad_tests(build["url"])
+        result = get_bad_tests(build["url"], url_max_build['is_yetus'])
         if not result:
             continue
         if len(result[0]) > 0: