da0932abedd063b6e9fe087bc26ab9ef53b6cd2e braney Thu Apr 22 16:43:20 2021 -0700 make hubApi use the trackDb cache. diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c index 0be7d1d..d3024f1 100644 --- src/hg/lib/trackHub.c +++ src/hg/lib/trackHub.c @@ -1452,15 +1452,56 @@ errAbort("HAL close error: %s", errString); } #endif else if (startsWithWord("hic", type)) { struct hicMeta *header; char *errString = hicLoadHeader(bigDataUrl, &header, genome->name); if (errString != NULL) errAbort("hic file error: %s", errString); } else errAbort("unrecognized type %s in genome %s track %s", type, genome->name, tdb->track); freez(&bigDataUrl); } } + +struct trackDb *trackHubAddTracksGenome(struct trackHubGenome *hubGenome) +/* Load up stuff from data hub and return list. */ +{ +/* Load trackDb.ra file and make it into proper trackDb tree */ +struct trackDb *tdbList = NULL; + +if (hubGenome != NULL) + { + boolean doCache = trackDbCacheOn(); + + if (doCache) + { + // we have to open the trackDb file to get the udc cache to check for an update + struct udcFile *checkCache = udcFileMayOpen(hubGenome->trackDbFile, NULL); + if (checkCache != NULL) + { + time_t time = udcUpdateTime(checkCache); + udcFileClose(&checkCache); + + struct trackDb *cacheTdb = trackDbHubCache(hubGenome->trackDbFile, time); + + if (cacheTdb != NULL) + return cacheTdb; + } + + memCheckPoint(); // we want to know how much memory is used to build the tdbList + } + + struct dyString *incFiles = newDyString(4096); + tdbList = trackHubTracksForGenome(hubGenome->trackHub, hubGenome, incFiles); + tdbList = trackDbLinkUpGenerations(tdbList); + tdbList = trackDbPolishAfterLinkup(tdbList, hubGenome->name); + trackDbPrioritizeContainerItems(tdbList); + trackHubPolishTrackNames(hubGenome->trackHub, tdbList); + + if (doCache) + trackDbHubCloneTdbListToSharedMem(hubGenome->trackDbFile, tdbList, memCheckPoint(), incFiles->string); + } +return tdbList; +}