225c0d55992aefae478461bba278644bdfdda3c5
max
  Wed Jan 15 08:33:57 2014 -0800
library changes for the browser box: This changes mostly hdb and jksql,plus - to a smaller extent - various other places in the code that deal
with /gbdb/ files.  The overall aim is to make it possible to have the
data remote at UCSC while having the CGIs on a machine far away. At up to
180msecs distance from UCSC (Europe,Japan), each query can get slow. So
I tried to reduce the number of queries sent to UCSC while allowing to
keep some mysql tables on localhost.

I changed four things:
- extend larry's table cache to include field names. The code uses
"describe" very often, which is slow from remote. With a table name
cache these queries can be handled locally. This is configured in
hg.conf
- mysql "failover" connections: a mysql connection can have a 2nd
connection that is used if a query fails, configured in hg.conf
(I didn't call it "remote" connections, because we use that term already
in the code)
- mysql lazy connects: don't connect a sqlConnection right away, but
only when needed. a mysql connect takes >500msecs from across the
atlantic.
- move gbdb: patch various places that use absolute "/gbdb/" pathnames
to go through a central function that can change the filename of
gbdb files to something else, as configured in hg.conf

Plus patch 1 or 2 lines for more speed + update the hgMirror script

diff --git src/lib/maf.c src/lib/maf.c
index 5f5dd0d..8ffda67 100644
--- src/lib/maf.c
+++ src/lib/maf.c
@@ -8,31 +8,31 @@
 #include "maf.h"
 #include "hash.h"
 #include <fcntl.h>
 
 
 char *mafRegDefTxUpstream = "txupstream";  // transcription start size upstream region
 
 struct mafFile *mafMayOpen(char *fileName)
 /* Open up a maf file and verify header. */
 {
 struct mafFile *mf;
 struct lineFile *lf;
 char *line, *word;
 char *sig = "##maf";
 
-if ((lf = lineFileMayOpen(fileName, TRUE)) == NULL)
+if ((lf = lineFileUdcMayOpen(fileName, TRUE)) == NULL)
     return NULL;
 AllocVar(mf);
 mf->lf = lf;
 
 lineFileNeedNext(lf, &line, NULL);
 if (!startsWith(sig, line))
     {
     errAbort("%s does not start with %s", fileName, sig);
     }
 line += strlen(sig);
 
 while ((word = nextWord(&line)) != NULL)
     {
     /* Parse name=val. */
     char *name = word;