|
|
|
@ -69,17 +69,20 @@ _POLLING_STRATEGIES = { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_flaky_tests(limit=None): |
|
|
|
|
BigQueryTestData = collections.namedtuple('BigQueryTestData', 'name flaky cpu') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_bqtest_data(limit=None): |
|
|
|
|
import big_query_utils |
|
|
|
|
|
|
|
|
|
bq = big_query_utils.create_big_query() |
|
|
|
|
query = """ |
|
|
|
|
SELECT |
|
|
|
|
filtered_test_name, |
|
|
|
|
filtered_test_name, SUM(result != 'PASSED' AND result != 'SKIPPED') > 0 as flaky, AVG(cpu_measured) as cpu |
|
|
|
|
FROM ( |
|
|
|
|
SELECT |
|
|
|
|
REGEXP_REPLACE(test_name, r'/\d+', '') AS filtered_test_name, |
|
|
|
|
result |
|
|
|
|
result, cpu_measured |
|
|
|
|
FROM |
|
|
|
|
[grpc-testing:jenkins_test_results.aggregate_results] |
|
|
|
|
WHERE |
|
|
|
@ -89,15 +92,15 @@ SELECT |
|
|
|
|
GROUP BY |
|
|
|
|
filtered_test_name |
|
|
|
|
HAVING |
|
|
|
|
SUM(result != 'PASSED' AND result != 'SKIPPED') > 0""" |
|
|
|
|
flaky OR cpu > 0""" |
|
|
|
|
if limit: |
|
|
|
|
query += " limit {}".format(limit) |
|
|
|
|
query_job = big_query_utils.sync_query_job(bq, 'grpc-testing', query) |
|
|
|
|
page = bq.jobs().getQueryResults( |
|
|
|
|
pageToken=None, |
|
|
|
|
**query_job['jobReference']).execute(num_retries=3) |
|
|
|
|
flake_names = [row['f'][0]['v'] for row in page['rows']] |
|
|
|
|
return flake_names |
|
|
|
|
test_data = [BigQueryTestData(row['f'][0]['v'], row['f'][1]['v'] == 'true', float(row['f'][2]['v'])) for row in page['rows']] |
|
|
|
|
return test_data |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def platform_string(): |
|
|
|
@ -141,6 +144,9 @@ class Config(object): |
|
|
|
|
if not flaky and shortname and shortname in flaky_tests: |
|
|
|
|
print('Setting %s to flaky' % shortname) |
|
|
|
|
flaky = True |
|
|
|
|
if shortname in test_times: |
|
|
|
|
print('Update CPU cost for %s: %f -> %f' % (shortname, cpu_cost, test_times[shortname])) |
|
|
|
|
cpu_cost = test_times[shortname] |
|
|
|
|
return jobset.JobSpec(cmdline=self.tool_prefix + cmdline, |
|
|
|
|
shortname=shortname, |
|
|
|
|
environ=actual_environ, |
|
|
|
@ -1254,9 +1260,12 @@ argp.add_argument('--disable_auto_set_flakes', default=False, const=True, action |
|
|
|
|
args = argp.parse_args() |
|
|
|
|
|
|
|
|
|
flaky_tests = set() |
|
|
|
|
test_times = {} |
|
|
|
|
if not args.disable_auto_set_flakes: |
|
|
|
|
try: |
|
|
|
|
flaky_tests = set(get_flaky_tests()) |
|
|
|
|
for test in get_bqtest_data(): |
|
|
|
|
if test.flaky: flaky_tests.add(test.name) |
|
|
|
|
if test.cpu > 0: test_times[test.name] = test.cpu |
|
|
|
|
except: |
|
|
|
|
print("Unexpected error getting flaky tests:", sys.exc_info()[0]) |
|
|
|
|
|
|
|
|
|