HBASE-19382 Update report-flakies.py script to handle yetus builds.
This commit is contained in:
parent
79a89beb2e
commit
5b7f9c2535
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue