80094ad7168ce2e636ae8a28c742c32b174dfb92
braney
  Thu Sep 26 13:26:12 2024 -0700
allow users to change parallelFetch.timeout from the configure screen

diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index e0ae7f2..08bd1d2 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -8568,30 +8568,42 @@
 
 #ifdef NOTNOW
 static void printAliases(char *name)
 /* Print out the aliases for this sequence. */
 {
 struct slName *names = chromAliasFindAliases(name);
 
 printf("<div id='aliases'><a title='");
 for(;names; names = names->next)
     printf("%s;",names->name);
 printf("'>Aliases</a></div>");
 }
 #endif
 
 
+unsigned getParaLoadTimeout()
+// get the parallel load timeout in seconds (defaults to 90)
+{
+char *paraLoadTimeoutStr = cartOptionalString(cart, "parallelFetch.timeout");
+if (paraLoadTimeoutStr == NULL)
+    paraLoadTimeoutStr = cfgOptionDefault("parallelFetch.timeout", "90");  // wait up to default 90 seconds.
+
+unsigned paraLoadTimeout = sqlUnsigned(paraLoadTimeoutStr);
+
+return paraLoadTimeout;
+}
+
 void doTrackForm(char *psOutput, struct tempName *ideoTn)
 /* Make the tracks display form with the zoom/scroll buttons and the active
  * image.  If the ideoTn parameter is not NULL, it is filled in if the
  * ideogram is created.  */
 {
 int disconCount = 0;
 struct group *group;
 struct track *track;
 char *freezeName = NULL;
 boolean hideAll = cgiVarExists("hgt.hideAll");
 boolean hideTracks = cgiOptionalString( "hideTracks") != NULL;
 boolean defaultTracks = cgiVarExists("hgt.reset");
 boolean showedRuler = FALSE;
 boolean showTrackControls = cartUsualBoolean(cart, "trackControlsOnMain", TRUE);
 boolean multiRegionButtonTop = cfgOptionBooleanDefault(MULTI_REGION_CFG_BUTTON_TOP, TRUE);
@@ -8892,31 +8904,31 @@
 			}
 		    }
 
 		if (measureTiming)
 		    {
 		    thisTime = clock1000();
 		    track->loadTime = thisTime - lastTime;
 		    }
 		}
 	    }
 	}
 
     if (ptMax > 0)
 	{
 	/* wait for remote parallel load to finish */
-	remoteParallelLoadWait(atoi(cfgOptionDefault("parallelFetch.timeout", "90")));  // wait up to default 90 seconds.
+	remoteParallelLoadWait(getParaLoadTimeout());  // wait up to default 90 seconds.
 	if (measureTiming)
 	    measureTime("Waiting for parallel (%d threads for %d tracks) remote data fetch", ptMax, pfdListCount);
 	}
     }
 trackLoadingInProgress = FALSE;
 
 setGlobalsFromWindow(windows); // first window // restore globals
 trackList = windows->trackList;  // restore track list
 
 // Some loadItems() calls will have already set limitedVis.
 // Look for lowest limitedVis across all windows
 // if found, set all windows to same lowest limitedVis
 for (track = trackList; track != NULL; track = track->next)
     {
     setSharedLimitedVisAcrossWindows(track);