0b7b4c7700268abd9705dc8feef9f284ffdff350
braney
  Fri May 1 09:01:40 2026 -0700
hgTracks: let quickLift tracks join the parallel-fetch worker pool

When a track has a quickLiftDb setting, validate its bigDataUrl
against the source db rather than the current target db, so the
/gbdb/<sourceDb>/ prefix check in customFactoryParallelLoad
accepts it. Previously quickLift tracks fell through to serial
load, costing ~5 s per track on the main thread.

refs #37470

diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index d236a9cb0dd..399f739f5bf 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -7940,32 +7940,42 @@
 }
 
 
 struct paraFetchData
     {
     struct paraFetchData *next;
     struct track *track;
     boolean done;
     boolean doLoadSummary;
     };
 
 static boolean isTrackForParallelLoad(struct track *track)
 /* Is this a track that should be loaded in parallel ? */
 {
 char *bdu = trackDbSetting(track->tdb, "bigDataUrl");
-
-return customFactoryParallelLoad(bdu, track->tdb->type, database, TRUE) && (track->subtracks == NULL);
+char *db = database;
+
+// quickLifted tracks fetch from the source assembly via the chain in
+// quickLiftUrl, so their bigDataUrl is /gbdb/<sourceDb>/... -- the source
+// db, not the current target db. customFactoryParallelLoad's bigDataUrl
+// validity check requires /gbdb/<X>/ to match its db argument, so when
+// the track declares its source via quickLiftDb, validate against that.
+char *quickLiftDb = trackDbSetting(track->tdb, "quickLiftDb");
+if (quickLiftDb != NULL)
+    db = quickLiftDb;
+
+return customFactoryParallelLoad(bdu, track->tdb->type, db, TRUE) && (track->subtracks == NULL);
 }
 
 static void findLeavesForParallelLoad(struct track *trackList, struct paraFetchData **ppfdList, boolean doLoadSummary)
 /* Find leaves of track tree that are remote network resources for parallel-fetch loading */
 {
 struct track *track;
 if (!trackList)
     return;
 for (track = trackList; track != NULL; track = track->next)
     {
 
     char *quickLiftFile = trackDbSetting(track->tdb, "quickLiftUrl");
     if (doLoadSummary && quickLiftFile)
       continue;