示例#1
0
def FetchCachedTestSuiteDescriptor(master, test_suite):
    masters = [master]
    if not master:
        masters = _GetMastersForSuite(test_suite)

    futures = [
        namespaced_stored_object.GetAsync(CacheKey(m, test_suite))
        for m in masters
    ]

    ndb.Future.wait_all(futures)

    desc = {'measurements': [], 'bots': [], 'cases': [], 'caseTags': {}}

    for f in futures:
        cur_desc = f.get_result()
        if cur_desc is not None:
            desc['measurements'].extend(cur_desc['measurements'])
            desc['bots'].extend(cur_desc['bots'])
            desc['cases'].extend(cur_desc['cases'])
            for tag, case_tags in cur_desc['caseTags'].iteritems():
                desc['caseTags'].setdefault(tag, []).extend(case_tags)

    desc['measurements'] = list(sorted(set(desc['measurements'])))
    desc['bots'] = list(sorted(set(desc['bots'])))
    desc['cases'] = list(sorted(set(desc['cases'])))
    for tag in desc['caseTags'].keys():
        desc['caseTags'][tag] = list(sorted(set(desc['caseTags'][tag])))

    return desc
示例#2
0
def GetAliasesAsync(bot):
    aliases = {bot}
    configurations = yield namespaced_stored_object.GetAsync(
        BOT_CONFIGURATIONS_KEY)
    if not configurations or bot not in configurations:
        raise ndb.Return(aliases)
    if 'alias' in configurations[bot]:
        bot = configurations[bot]['alias']
        aliases.add(bot)
    for name, configuration in configurations.iteritems():
        if configuration.get('alias') == bot:
            aliases.add(name)
    raise ndb.Return(aliases)
示例#3
0
def AddRowsToCacheAsync(row_entities):
    test_key_to_futures = {}
    for row in row_entities:
        test_key = row.parent_test
        if test_key in test_key_to_futures:
            continue

        test_path = utils.TestPath(test_key)
        test_key_to_futures[test_key] = namespaced_stored_object.GetAsync(
            _CACHE_KEY % test_path)

    yield test_key_to_futures.values()

    test_key_to_rows = {}
    for row in row_entities:
        test_key = row.parent_test
        if test_key in test_key_to_rows:
            graph_rows = test_key_to_rows[test_key]
        else:
            test_path = utils.TestPath(test_key)
            graph_rows_future = test_key_to_futures.get(test_key)
            graph_rows = graph_rows_future.get_result()
            if not graph_rows:
                # We only want to update caches for tests that people have looked at.
                continue
            test_key_to_rows[test_key] = graph_rows

        revisions = [r[0] for r in graph_rows]
        index = bisect.bisect_left(revisions, row.revision)
        if index < len(revisions) - 1:
            if revisions[index + 1] == row.revision:
                return  # Already in cache.
        graph_rows.insert(index, _MakeTriplet(row))

    futures = []
    for test_key in test_key_to_rows:
        graph_rows = test_key_to_rows[test_key]
        futures.append(SetCacheAsync(utils.TestPath(test_key), graph_rows))
    yield futures
def FetchCachedTestSuites2Async():
    results = yield namespaced_stored_object.GetAsync(TEST_SUITES_2_CACHE_KEY)
    raise ndb.Return(results)