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
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)
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)