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/hg/hgGene/alleles.c src/hg/hgGene/alleles.c index 66b5a1e..6254e3f 100644 --- src/hg/hgGene/alleles.c +++ src/hg/hgGene/alleles.c @@ -1,96 +1,97 @@ // alleles - common Gene haplotype alleles. */ #include "common.h" #include "web.h" #include "genePredReader.h" #include "vcf.h" #include "haplotypes.h" #include "hgGene.h" static boolean allelesExists(struct section *section, struct sqlConnection *conn, char *geneId) // Return TRUE if common haplotype alleles exist. { // If there was a reset then clear out settings if (cartUsualBoolean(cart, HAPLO_RESET_ALL, FALSE)) cartRemovePrefix(cart,HAPLO_TABLE "_" ); // Start with the default variables for haplotype retrieval struct haploExtras *he = haplotypeExtrasDefault(database, 0); section->extras = he; // Need to get genePred struct from geneId char where[128]; safef(where,sizeof(where),"name = '%s'",geneId); struct genePred *gp = genePredReaderLoadQuery(conn,he->geneTable, where); if (gp == NULL || gp->cdsStart == gp->cdsEnd) // Ain't interested in non-protein coding genes { haplotypeExtrasFree(&he); return FALSE; } he->chrom = gp->chrom; // Probably not needed he->justModel = lmCloneString(he->lm,geneId); //he->growTree = FALSE; // Tree growing not needed here // Need to determine the correct vcf file and open it if (haplotypesDiscoverVcfFile(he, gp->chrom) == NULL) { haplotypeExtrasFree(&he); return FALSE; } + struct vcfFile *vcff = vcfTabixFileMayOpen(he->inFile, NULL, 0, 0,VCF_IGNORE_ERRS, 0); if (vcff == NULL) { haplotypeExtrasFree(&he); return FALSE; } vcfFileMakeReusePool(vcff,1024 * 1024); // All or Limit to the 99% boolean rareVars = cartUsualBoolean(cart, HAPLO_RARE_VAR, FALSE); if (rareVars) he->synonymous = TRUE; else he->variantMinPct = HAPLO_COMMON_VARIANT_MIN_PCT; // Lets show the population distribution he->populationsToo = cartUsualBoolean(cart, HAPLO_MAJOR_DIST, FALSE); he->populationsMinor = cartUsualBoolean(cart, HAPLO_MINOR_DIST, FALSE); if (he->populationsToo) he->populationMinPct = 5; else if (he->populationsMinor) { he->populationsMinor = FALSE; cartRemove(cart, HAPLO_MINOR_DIST ); } // Need to generate haplotypes section->items = geneHapSetForOneModel(he,vcff,gp,TRUE); return TRUE;// (section->items != NULL); } static void allelesPrint(struct section *section, struct sqlConnection *conn, char *geneId) // Print out common gene haplotype alleles. { struct haploExtras *he = section->extras; struct haplotypeSet *hapSet = section->items; geneAllelesTableAndControls(cart, geneId, he, hapSet); haplotypeExtrasFree(&he); } struct section *allelesSection(struct sqlConnection *conn, struct hash *sectionRa) // Create UCSC KG Method section. { struct section *section = sectionNew(sectionRa, HGG_GENE_ALLELES); if (section != NULL) { section->exists = allelesExists; section->print = allelesPrint; } return section; }