bf0f2a64192b5c80db6ff314a3fa66266976ea8f braney Tue Jun 11 12:57:07 2019 -0700 ongoing work on trackDb caching diff --git src/hg/lib/hubConnect.c src/hg/lib/hubConnect.c index 08a8f09..21f63de 100644 --- src/hg/lib/hubConnect.c +++ src/hg/lib/hubConnect.c @@ -696,47 +696,62 @@ { int dbCount = 0; char *dbList = getDbList(tHub, &dbCount); // users may include quotes in their hub names requiring escaping sqlSafef(query, sizeof(query), "update %s set shortLabel=\"%s\",longLabel=\"%s\",dbCount=\"%d\",dbList=\"%s\",errorMessage=\"\",lastOkTime=now() where id=%d", getHubStatusTableName(), tHub->shortLabel, tHub->longLabel, dbCount, dbList, hub->id); sqlUpdate(conn, query); } hDisconnectCentral(&conn); } struct trackDb *hubAddTracks(struct hubConnectStatus *hub, char *database) -/* Load up stuff from data hub and append to list. The hubUrl points to - * a trackDb.ra format file. */ +/* Load up stuff from data hub and return list. */ { /* Load trackDb.ra file and make it into proper trackDb tree */ struct trackDb *tdbList = NULL; struct trackHub *trackHub = hub->trackHub; if (trackHub != NULL) { struct trackHubGenome *hubGenome = trackHubFindGenome(trackHub, database); if (hubGenome != NULL) { + boolean doCache = FALSE; + if (sameOk(cfgOption("cacheTrackDb"), "on")) + doCache = TRUE; + if (doCache) + { + struct trackDb *cacheTdb = trackDbHubCache(hub->hubUrl, hubGenome->name); + + if (cacheTdb != NULL) + return cacheTdb; + + memCheckPoint(); // we want to know how much memory is used to build the tdbList + } + tdbList = trackHubTracksForGenome(trackHub, hubGenome); tdbList = trackDbLinkUpGenerations(tdbList); tdbList = trackDbPolishAfterLinkup(tdbList, database); trackDbPrioritizeContainerItems(tdbList); trackHubPolishTrackNames(trackHub, tdbList); + + if (doCache) + trackDbHubCloneTdbListToSharedMem(hub->hubUrl, hubGenome->name, tdbList, memCheckPoint()); } } return tdbList; } static struct grp *grpFromHub(struct hubConnectStatus *hub) /* Make up a grp structur from hub */ { struct grp *grp; AllocVar(grp); char name[16]; safef(name, sizeof(name), "hub_%d", hub->id); grp->name = cloneString(name); grp->label = cloneString(hub->trackHub->shortLabel); return grp;