4898794edd81be5285ea6e544acbedeaeb31bf78
max
  Tue Nov 23 08:10:57 2021 -0800
Fixing pointers to README file for license in all source code files. refs #27614

diff --git src/hg/oneShot/cartSimNoInsert/cartSimNoInsert.c src/hg/oneShot/cartSimNoInsert/cartSimNoInsert.c
index 668e65c..7db5112 100644
--- src/hg/oneShot/cartSimNoInsert/cartSimNoInsert.c
+++ src/hg/oneShot/cartSimNoInsert/cartSimNoInsert.c
@@ -1,165 +1,165 @@
 /* cartSimNoInsert - simulates N users accessing cart at regular intervals
  * where cart data is read and then written back unchanged */
 
 /* Copyright (C) 2013 The Regents of the University of California 
- * See README in this or parent directory for licensing information. */
+ * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */
 #include "common.h"
 #include "linefile.h"
 #include "hash.h"
 #include "options.h"
 #include "cheapcgi.h"
 #include "jksql.h"
 #include "portable.h"
 
 
 int userCount = 10;
 int randSeed = 0;
 boolean readOnly = FALSE;
 
 void usage()
 /* Explain usage and exit. */
 {
 errAbort(
   "cartSimNoInsert - simulates N users accessing cart at regular intervals\n"
   "   where cart data is read and then written back unchanged\n"
   "usage:\n"
   "   cartSimNoInsert host user password database milliDelay iterations\n"
   "where:\n"
   "   host is the MySQL host name - example mysqlbeta\n"
   "   user is the MySQL user name - example hgcentuser\n"
   "   password is the MySQL password\n"
   "   database is the MySQL database - example hgcentralbeta\n"
   "   milliDelay is the number of milliseconds to delay between requests\n"
   "   iterations is the number of cart read/write accesses to do\n"
   "options:\n"
   "   -userCount=N number of users simulating.  Default %d\n"
   "   -randSeed=N random number generator seed.  Defaults to pid\n"
   "   -readOnly - don't write to cart\n"
   , userCount
   );
 }
 
 int *getSomeInts(struct sqlConnection *conn, char *table, char *field, int limit)
 /* Return an array of ints from field in table. */
 {
 int *result, i;
 char query[512];
 sqlSafef(query, sizeof(query), "select %s from %s limit %d", field, table, limit);
 struct sqlResult *sr = sqlGetResult(conn, query);
 AllocArray(result, limit);
 for (i=0; i<limit; ++i)
     {
     char **row = sqlNextRow(sr);
     if (row == NULL)
         errAbort("Less than %d rows in %s", limit, table);
     result[i] = sqlSigned(row[0]);
     }
 sqlFreeResult(&sr);
 return result;
 }
 
 void cartSimNoInsert(char *host, char *user, char *password, char *database, char *milliDelayString,
 	char *iterationString)
 /* cartSimNoInsert - simulates N users accessing cart at regular intervals
  * where cart data is read and then written back unchanged */
 {
 int milliDelay = sqlUnsigned(milliDelayString);
 int iterations = sqlUnsigned(iterationString);
 
 /* Figure out size of tables. */
 struct sqlConnection *conn = sqlConnectRemote(host, user, password, database);
 int userDbSize = sqlQuickNum(conn, NOSQLINJ "select count(*) from userDb");
 int sessionDbSize = sqlQuickNum(conn, NOSQLINJ "select count(*) from sessionDb");
 int sampleSize = min(userDbSize, sessionDbSize);
 int maxSampleSize = 8*1024;
 sampleSize = min(sampleSize, maxSampleSize);
 verbose(2, "# userDb has %d rows,  sessionDb has %d rows, sampling %d\n"
 	, userDbSize, sessionDbSize, sampleSize);
 
 /* Get sample of user id's. */
 int *userIds = getSomeInts(conn, "userDb", "id", sampleSize);
 int *sessionIds = getSomeInts(conn, "sessionDb", "id", sampleSize);
 
 /* Get userCount random indexes. */
 int *randomIxArray, ix;
 AllocArray(randomIxArray, userCount);
 verbose(2, "random user ix:\n");
 for (ix=0; ix<userCount; ++ix)
     {
     randomIxArray[ix] = rand() % sampleSize;
     verbose(2, "%d ", randomIxArray[ix]);
     }
 verbose(2, "\n");
 
 sqlDisconnect(&conn);
 
 int iteration = 0;
 int querySize = 1024*1024*16;
 char *query = needLargeMem(querySize);
 for (;;)
     {
     for (ix = 0; ix < userCount; ++ix)
 	{
 	int randomIx = randomIxArray[ix];
 	long startTime = clock1000();
 	struct sqlConnection *conn = sqlConnectRemote(host, user, password, database);
 	long connectTime = clock1000();
 
 	sqlSafef(query, querySize, "select contents from userDb where id=%d", 
 		userIds[randomIx]);
 	char *userContents = sqlQuickString(conn, query);
 	long userReadTime = clock1000();
 
 	sqlSafef(query, querySize, "select contents from sessionDb where id=%d", 
 		sessionIds[randomIx]);
 	char *sessionContents = sqlQuickString(conn, query);
 	long sessionReadTime = clock1000();
 
 	sqlSafef(query, querySize, "update userDb set contents='%s' where id=%d",
 		userContents, userIds[randomIx]);
 	if (!readOnly)
 	    sqlUpdate(conn, query);
 	long userWriteTime = clock1000();
 
 	sqlSafef(query, querySize, "update sessionDb set contents='%s' where id=%d",
 		sessionContents, sessionIds[randomIx]);
 	if (!readOnly)
 	    sqlUpdate(conn, query);
 	long sessionWriteTime = clock1000();
 
 	sqlDisconnect(&conn);
 	long disconnectTime = clock1000();
 
 	printf("%ld total, %ld size, %ld connect, %ld userRead, %ld sessionRead, %ld userWrite, %ld sessionWrite\n",
 		disconnectTime - startTime,
 		(long) strlen(userContents) + strlen(sessionContents),
 		connectTime - startTime,
 		userReadTime - connectTime,
 		sessionReadTime - userReadTime,
 		userWriteTime - sessionReadTime,
 		sessionWriteTime - userReadTime);
 
 	freez(&userContents);
 	freez(&sessionContents);
 
 	sleep1000(milliDelay);
 	if (++iteration >= iterations)
 	    return;
 	}
     }
 }
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 cgiSpoof(&argc, argv);
 userCount = cgiOptionalInt("userCount", userCount);
 randSeed = cgiOptionalInt("randSeed", (int)getpid());
 verboseSetLevel(cgiOptionalInt("verbose", 1));
 readOnly = cgiVarExists("readOnly");
 srand(randSeed);
 if (argc != 7)
     usage();
 cartSimNoInsert(argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
 return 0;
 }