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;
+}