f683064dc6a998206665b484790ef9d561e6c8a7 markd Sat Dec 5 22:42:53 2020 -0800 initial conversion to gfServer connection to object diff --git src/hg/hgBlat/hgBlat.c src/hg/hgBlat/hgBlat.c index ae4d56c..28a6a51 100644 --- src/hg/hgBlat/hgBlat.c +++ src/hg/hgBlat/hgBlat.c @@ -61,31 +61,31 @@ given by caller rather than returned by gfServer. */ }; struct genomeHits /* Information about hits on a genome assembly */ { struct genomeHits *next; char *host; /* Host. */ char *port; /* Port. */ char *db; /* Database name. */ char *genome; /* Genome name. */ int seqNumber; /* Submission order */ char *faName; /* fasta name */ char *dna; /* query dna */ int dnaSize; /* query dna size */ - int sd; /* Connection */ + struct gfConnection *conn; /* Connection */ char *type; /* query type = query, protQuery, transQuery */ char *xType; /* query type = dna, prot, rnax, dnax */ boolean queryRC; /* is the query reverse-complemented */ boolean complex; /* is the query complex */ boolean isProt; /* is the protein query */ boolean isDynamic; /* is a dynamic server */ char *genomeDataDir; /* dynamic server root-relative directory */ int maxGeneHits; /* Highest gene hit-count */ char *maxGeneChrom; /* Target Chrom for gene with max gene hits */ int maxGeneChromSize; /* Target Chrom Size for only prot, rnax, dnax */ int maxGeneTStart; /* Target Start Coordinate for gene with max hits */ int maxGeneTEnd; /* Target End Coordinate for gene with max hits*/ int maxGeneExons; /* Number of Exons in gene with max hits */ char maxGeneStrand[3]; /* + or - or ++ +- -+ -- Strand for gene with max hits */ @@ -993,83 +993,81 @@ return; int qFactor = 3; int tFactor = 3; if (gH->isProt) qFactor = 1; struct gfResult *gfR = NULL; for(gfR=gH->gfList; gfR; gfR=gfR->next) { gfR->qStart = gfR->qStart * qFactor + gfR->qFrame; gfR->qEnd = gfR->qEnd * qFactor + gfR->qFrame; gfR->tStart = gfR->tStart * tFactor + gfR->tFrame; gfR->tEnd = gfR->tEnd * tFactor + gfR->tFrame; } } -int gfConnectEx(char *host, char *port) +struct gfConnection *gfConnectEx(char *host, char *port) /* Try to connect to gfServer */ { -int conn = -1; if (allGenomes) - conn = gfMayConnect(host, port); // returns -1 on failure + return gfMayConnect(host, port); // returns NULL on failure else - conn = gfConnect(host, port); // errAborts on failure. -return conn; + return gfConnect(host, port); // errAborts on failure. } void queryServerFinish(struct genomeHits *gH) /* Report results from gfServer. */ { char buf[256]; int matchCount = 0; -gH->sd = gfConnectEx(gH->host, gH->port); -if (gH->sd == -1) +gH->conn = gfConnectEx(gH->host, gH->port); +if (gH->conn == NULL) { gH->error = TRUE; gH->networkErrMsg = "Connection to gfServer failed."; return; } dyStringPrintf(gH->dbg,"query strand %s qsize %d
\n", gH->queryRC ? "-" : "+", gH->dnaSize); /* Put together query command. */ if (gH->isDynamic) safef(buf, sizeof buf, "%s%s %d %s %s", gfSignature(), gH->type, gH->dnaSize, dynServerGenome(gH->db), gH->genomeDataDir); else safef(buf, sizeof buf, "%s%s %d", gfSignature(), gH->type, gH->dnaSize); -mustWriteFd(gH->sd, buf, strlen(buf)); +mustWriteFd(gH->conn->fd, buf, strlen(buf)); -if (read(gH->sd, buf, 1) < 0) +if (read(gH->conn->fd, buf, 1) < 0) errAbort("queryServerFinish: read failed: %s", strerror(errno)); if (buf[0] != 'Y') errAbort("Expecting 'Y' from server, got %c", buf[0]); -mustWriteFd(gH->sd, gH->dna, gH->dnaSize); // Cannot shifted earlier for speed. must wait for Y confirmation. +mustWriteFd(gH->conn->fd, gH->dna, gH->dnaSize); // Cannot shifted earlier for speed. must wait for Y confirmation. if (gH->complex) { - char *s = netRecieveString(gH->sd, buf); + char *s = netRecieveString(gH->conn->fd, buf); if (!s) errAbort("expected response from gfServer with tileSize"); dyStringPrintf(gH->dbg,"%s
\n", s); // from server: tileSize 4 } for (;;) { - if (netGetString(gH->sd, buf) == NULL) + if (netGetString(gH->conn->fd, buf) == NULL) break; if (sameString(buf, "end")) { dyStringPrintf(gH->dbg,"%d matches
\n", matchCount); break; } else if (startsWith("Error:", buf)) { errAbort("%s", buf); break; } else { dyStringPrintf(gH->dbg,"%s
\n", buf); // chop the line into words @@ -1138,31 +1136,31 @@ { gfR->tStrand = word[6][0]; // e.g. + or - gfR->tFrame = sqlUnsigned(word[7]); // e.g. 0,1,2 if (!gH->isProt) { gfR->qFrame = sqlUnsigned(word[8]); // e.g. 0,1,2 } } else { gfR->tStrand = '+'; // dna search only on + target strand } if (gH->complex) { - char *s = netGetLongString(gH->sd); + char *s = netGetLongString(gH->conn->fd); if (s == NULL) break; dyStringPrintf(gH->dbg,"%s
\n", s); //dumps out qstart1 tstart1 qstart2 tstart2 ... freeMem(s); } slAddHead(&gH->gfList, gfR); } ++matchCount; } slReverse(&gH->gfList); unTranslateCoordinates(gH); // convert back to untranslated coordinates slSort(&gH->gfList, gfResultsCmp); // sort by tStrand, chrom, tStart @@ -1261,31 +1259,31 @@ if (gH->maxGeneTEnd < r[qFrame].maxGeneTEnd) { gH->maxGeneTEnd = r[qFrame].maxGeneTEnd; } } gH->maxGeneHits /= 3; // average over 3 frames. char qStrand = (gH->queryRC ? '-' : '+'); safef(gH->maxGeneStrand, sizeof gH->maxGeneStrand, "%c%c", qStrand, gH->maxGeneTStrand); } -close(gH->sd); +gfDisconnect(&gH->conn); } int findMinMatch(long genomeSize, boolean isProt) // Return default minMatch for genomeSize, // the expected number of occurrences of string length k // in random genome of size N = N/(4^k) { int alphaBetSize; if (isProt) { alphaBetSize = 20; genomeSize = genomeSize / 3; } else { @@ -1332,84 +1330,84 @@ genomeSize += twoBitSeqSize(genome->tbf, index->name); } twoBitClose(&genome->tbf); return genomeSize; } int findGenomeParams(struct serverTable *serve) /* Send status message to server arnd report result. * Get tileSize stepSize and minMatch. */ { char buf[256]; -int sd = 0; +struct gfConnection *conn = NULL; int ret = 0; /* Put together command. */ -sd = gfConnectEx(serve->host, serve->port); +conn = gfConnectEx(serve->host, serve->port); if (serve->isDynamic) sprintf(buf, "%s%s %s %s", gfSignature(), (serve->isTrans ? "transInfo" : "untransInfo"), dynServerGenome(serve->db), serve->genomeDataDir); else sprintf(buf, "%sstatus", gfSignature()); -mustWriteFd(sd, buf, strlen(buf)); +mustWriteFd(conn->fd, buf, strlen(buf)); for (;;) { - if (netGetString(sd, buf) == NULL) + if (netGetString(conn->fd, buf) == NULL) { warn("Error reading status information from %s:%s",serve->host, serve->port); ret = -1; break; } if (sameString(buf, "end")) break; else { if (startsWith("tileSize ", buf)) { serve->tileSize = atoi(buf+strlen("tileSize ")); } if (startsWith("stepSize ", buf)) { serve->stepSize = atoi(buf+strlen("stepSize ")); } if (startsWith("minMatch ", buf)) { serve->minMatch = atoi(buf+strlen("minMatch ")); } } } -close(sd); +gfDisconnect(&conn); return(ret); } void blatSeq(char *userSeq, char *organism, char *database, int dbCount) /* Blat sequence user pasted in. */ { FILE *f; struct dnaSeq *seqList = NULL, *seq; struct tempName pslTn, faTn; int maxSingleSize, maxTotalSize, maxSeqCount; char *genome, *db; char *type = cgiString("type"); char *seqLetters = cloneString(userSeq); struct serverTable *serve; -int conn; +struct gfConnection *conn = NULL; int oneSize, totalSize = 0, seqCount = 0; boolean isTx = FALSE; boolean isTxTx = FALSE; boolean txTxBoth = FALSE; struct gfOutput *gvo; boolean qIsProt = FALSE; enum gfType qType, tType; struct hash *tFileCache = gfFileCacheNew(); // allGenomes ignores I'm Feeling Lucky for simplicity boolean feelingLucky = cgiBoolean("Lucky") && !allGenomes; char *xType = NULL; if (allGenomes) { db = database; @@ -1574,31 +1572,31 @@ #else // read genome size if (trackHubDatabase(database)) { genomeSize = findGenomeSizeFromHub(database); } else { genomeSize = findGenomeSize(database); } minMatchShown = findMinMatch(genomeSize, qType == gftProt); #endif if (allResults) minMatchShown = 0; - // read tileZize stepSize minMatch from server status + // read tileSize stepSize minMatch from server status findGenomeParams(serve); int minLucky = (serve->minMatch * serve->stepSize + (serve->tileSize - serve->stepSize)) * xlat; minSuggested = max(minMatchShown,minLucky); } int seqNumber = 0; /* Loop through each sequence. */ for (seq = seqList; seq != NULL; seq = seq->next) { printf(" "); fflush(stdout); /* prevent apache cgi timeout by outputting something */ oneSize = realSeqSize(seq, !isTx); // Impose half the usual bot delay per sequence @@ -1633,79 +1631,79 @@ seq->name, maxTotalSize); break; } if (isTx) { gvo->reportTargetStrand = TRUE; if (isTxTx) { if (allGenomes) queryServer(serve->host, serve->port, db, seq, "transQuery", xType, TRUE, FALSE, FALSE, seqNumber, serve->genomeDataDir); else { conn = gfConnectEx(serve->host, serve->port); - gfAlignTransTrans(&conn, serve->nibDir, seq, FALSE, 5, tFileCache, gvo, !txTxBoth, + gfAlignTransTrans(conn, serve->nibDir, seq, FALSE, 5, tFileCache, gvo, !txTxBoth, dynServerGenome(serve->db), serve->genomeDataDir); } if (txTxBoth) { reverseComplement(seq->dna, seq->size); if (allGenomes) queryServer(serve->host, serve->port, db, seq, "transQuery", xType, TRUE, FALSE, TRUE, seqNumber, serve->genomeDataDir); else { conn = gfConnectEx(serve->host, serve->port); - gfAlignTransTrans(&conn, serve->nibDir, seq, TRUE, 5, tFileCache, gvo, FALSE, + gfAlignTransTrans(conn, serve->nibDir, seq, TRUE, 5, tFileCache, gvo, FALSE, dynServerGenome(serve->db), serve->genomeDataDir); } } } else { if (allGenomes) queryServer(serve->host, serve->port, db, seq, "protQuery", xType, TRUE, TRUE, FALSE, seqNumber, serve->genomeDataDir); else { conn = gfConnectEx(serve->host, serve->port); - gfAlignTrans(&conn, serve->nibDir, seq, 5, tFileCache, gvo, + gfAlignTrans(conn, serve->nibDir, seq, 5, tFileCache, gvo, dynServerGenome(serve->db), serve->genomeDataDir); } } } else { if (allGenomes) queryServer(serve->host, serve->port, db, seq, "query", xType, FALSE, FALSE, FALSE, seqNumber, serve->genomeDataDir); else { conn = gfConnectEx(serve->host, serve->port); - gfAlignStrand(&conn, serve->nibDir, seq, FALSE, minMatchShown, tFileCache, gvo, + gfAlignStrand(conn, serve->nibDir, seq, FALSE, minMatchShown, tFileCache, gvo, dynServerGenome(serve->db), serve->genomeDataDir); } reverseComplement(seq->dna, seq->size); if (allGenomes) queryServer(serve->host, serve->port, db, seq, "query", xType, FALSE, FALSE, TRUE, seqNumber, serve->genomeDataDir); else { conn = gfConnectEx(serve->host, serve->port); - gfAlignStrand(&conn, serve->nibDir, seq, TRUE, minMatchShown, tFileCache, gvo, + gfAlignStrand(conn, serve->nibDir, seq, TRUE, minMatchShown, tFileCache, gvo, dynServerGenome(serve->db), serve->genomeDataDir); } } gfOutputQuery(gvo, f); ++seqNumber; } carefulClose(&f); if (!allGenomes) { showAliPlaces(pslTn.forCgi, faTn.forCgi, NULL, serve->db, qType, tType, organism, feelingLucky); } if(!feelingLucky && !allGenomes)