-C Add\snew\stest\sfile\se_walauto.test.
-D 2014-12-15T16:27:12.622
+C Changes\sto\sthreadtest3\sso\sthat\s"stress2"\sis\smore\ssimilar\sto\sthe\sSDS\sstress\stest.
+D 2014-12-15T20:49:26.942
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 6c4f961fa91d0b4fa121946a19f9e5eac2f2f809
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F test/thread_common.tcl 334639cadcb9f912bf82aa73f49efd5282e6cadd
F test/threadtest1.c 6029d9c5567db28e6dc908a0c63099c3ba6c383b
F test/threadtest2.c ace893054fa134af3fc8d6e7cfecddb8e3acefb9
-F test/threadtest3.c c8629f836331dd4e5d6ef514b6696605cb593135
+F test/threadtest3.c f8c6595664a4c5ef5f28d97a612386fe14dd1940
F test/threadtest4.c c1e67136ceb6c7ec8184e56ac61db28f96bd2925
F test/tkt-02a8e81d44.test 6c80d9c7514e2a42d4918bf87bf6bc54f379110c
F test/tkt-26ff0c2d1e.test 888324e751512972c6e0d1a09df740d8f5aaf660
F test/tt3_checkpoint.c 5e63ee65ed5f87176e25a996480cb02c6caec8b4
F test/tt3_index.c 39eec10a35f57672225be4d182862152896dee4a
F test/tt3_lookaside1.c 0377e202c3c2a50d688cb65ba203afeda6fafeb9
-F test/tt3_stress.c edbb00ed1516535691040315e97cf32c62df22d0
+F test/tt3_stress.c c57d804716165811d979d4a719e05baccd79277f
F test/tt3_vacuum.c 1753f45917699c9c1f66b64c717a717c9379f776
F test/types.test bf816ce73c7dfcfe26b700c19f97ef4050d194ff
F test/types2.test 3555aacf8ed8dc883356e59efc314707e6247a84
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 1d44f1b1a9fefeb2449892775c59765c46784eb1
-R 10b3e0524cfe98a487f450c2b23f40b1
+P 62ef45140cdbff5eeb8bef506db8b78ced3ace94
+R 9a6502f6d41e6a843f5a509613ed553f
+T *branch * threadtest3
+T *sym-threadtest3 *
+T -sym-trunk *
U dan
-Z 762d85cad7a4c7a6623b46eb7c11e324
+Z 02118ab9cf865ac1e1c9e40290c79fe8
int isInit;
uint32 buf[4];
uint32 bits[2];
- unsigned char in[64];
+ union {
+ unsigned char in[64];
+ uint32 in32[16];
+ } u;
};
typedef struct MD5Context MD5Context;
/* Handle any leading odd-sized chunks */
if ( t ) {
- unsigned char *p = (unsigned char *)ctx->in + t;
+ unsigned char *p = (unsigned char *)ctx->u.in + t;
t = 64-t;
if (len < t) {
return;
}
memcpy(p, buf, t);
- byteReverse(ctx->in, 16);
- MD5Transform(ctx->buf, (uint32 *)ctx->in);
+ byteReverse(ctx->u.in, 16);
+ MD5Transform(ctx->buf, (uint32 *)ctx->u.in);
buf += t;
len -= t;
}
/* Process data in 64-byte chunks */
while (len >= 64) {
- memcpy(ctx->in, buf, 64);
- byteReverse(ctx->in, 16);
- MD5Transform(ctx->buf, (uint32 *)ctx->in);
+ memcpy(ctx->u.in, buf, 64);
+ byteReverse(ctx->u.in, 16);
+ MD5Transform(ctx->buf, (uint32 *)ctx->u.in);
buf += 64;
len -= 64;
}
/* Handle any remaining bytes of data. */
- memcpy(ctx->in, buf, len);
+ memcpy(ctx->u.in, buf, len);
}
/*
/* Set the first char of padding to 0x80. This is safe since there is
always at least one byte free */
- p = ctx->in + count;
+ p = ctx->u.in + count;
*p++ = 0x80;
/* Bytes of padding needed to make 64 bytes */
if (count < 8) {
/* Two lots of padding: Pad the first block to 64 bytes */
memset(p, 0, count);
- byteReverse(ctx->in, 16);
- MD5Transform(ctx->buf, (uint32 *)ctx->in);
+ byteReverse(ctx->u.in, 16);
+ MD5Transform(ctx->buf, (uint32 *)ctx->u.in);
/* Now fill the next block with 56 bytes */
- memset(ctx->in, 0, 56);
+ memset(ctx->u.in, 0, 56);
} else {
/* Pad block to 56 bytes */
memset(p, 0, count-8);
}
- byteReverse(ctx->in, 14);
+ byteReverse(ctx->u.in, 14);
/* Append length in bits and transform */
- ((uint32 *)ctx->in)[ 14 ] = ctx->bits[0];
- ((uint32 *)ctx->in)[ 15 ] = ctx->bits[1];
+ ctx->u.in32[14] = ctx->bits[0];
+ ctx->u.in32[15] = ctx->bits[1];
- MD5Transform(ctx->buf, (uint32 *)ctx->in);
+ MD5Transform(ctx->buf, (uint32 *)ctx->u.in);
byteReverse((unsigned char *)ctx->buf, 4);
memcpy(digest, ctx->buf, 16);
memset(ctx, 0, sizeof(*ctx)); /* In case it is sensitive */
{ lookaside1, "lookaside1", 10000 },
{ vacuum1, "vacuum1", 10000 },
{ stress1, "stress1", 10000 },
- { stress2, "stress2", 10000 },
+ { stress2, "stress2", 60000 },
};
int i;
i1++;
if( err.rc ) i2++;
clear_error(&err, SQLITE_LOCKED);
- clear_error(&err, SQLITE_ERROR);
}
closedb(&err, &db);
print_and_free_err(&err);
** 19. Open and close database connections rapidly.
*/
-#define STRESS2_TABCNT 5
+#define STRESS2_TABCNT 5 /* count1 in SDS test */
+
+#define STRESS2_COUNT2 200 /* count2 in SDS test */
+#define STRESS2_COUNT3 57 /* count2 in SDS test */
static void stress2_workload1(Error *pErr, Sqlite *pDb, int i){
- int iTab = (i % STRESS2_TABCNT);
+ int iTab = (i % (STRESS2_TABCNT-1)) + 1;
sql_script_printf(pErr, pDb,
"CREATE TABLE IF NOT EXISTS t%d(x PRIMARY KEY, y, z);", iTab
);
}
static void stress2_workload2(Error *pErr, Sqlite *pDb, int i){
- int iTab = (i % STRESS2_TABCNT);
+ int iTab = (i % (STRESS2_TABCNT-1)) + 1;
sql_script_printf(pErr, pDb, "DROP TABLE IF EXISTS t%d;", iTab);
}
static void stress2_workload3(Error *pErr, Sqlite *pDb, int i){
- int iTab = (i % STRESS2_TABCNT);
- sql_script_printf(pErr, pDb, "SELECT * FROM t%d WHERE z = 'small'", iTab);
+ sql_script(pErr, pDb, "SELECT * FROM t0 WHERE z = 'small'");
}
static void stress2_workload4(Error *pErr, Sqlite *pDb, int i){
- int iTab = (i % STRESS2_TABCNT);
- sql_script_printf(pErr, pDb, "SELECT * FROM t%d WHERE z = 'big'", iTab);
+ sql_script(pErr, pDb, "SELECT * FROM t0 WHERE z = 'big'");
}
static void stress2_workload5(Error *pErr, Sqlite *pDb, int i){
- int iTab = (i % STRESS2_TABCNT);
- sql_script_printf(pErr, pDb,
- "INSERT INTO t%d VALUES(random(), hex(randomblob(57)), 'small');", iTab
+ sql_script(pErr, pDb,
+ "INSERT INTO t0 VALUES(hex(random()), hex(randomblob(200)), 'small');"
);
}
static void stress2_workload6(Error *pErr, Sqlite *pDb, int i){
- int iTab = (i % STRESS2_TABCNT);
- sql_script_printf(pErr, pDb,
- "INSERT INTO t%d VALUES(random(), hex(randomblob(2000)), 'big');", iTab
+ sql_script(pErr, pDb,
+ "INSERT INTO t0 VALUES(hex(random()), hex(randomblob(57)), 'big');"
);
}
static void stress2_workload7(Error *pErr, Sqlite *pDb, int i){
- int iTab = (i % STRESS2_TABCNT);
sql_script_printf(pErr, pDb,
- "UPDATE t%d SET y = hex(randomblob(57)) "
- "WHERE (x %% 5)==(%d %% 5) AND z='small';"
- ,iTab, i
+ "UPDATE t0 SET y = hex(randomblob(200)) "
+ "WHERE x LIKE hex((%d %% 5)) AND z='small';"
+ ,i
);
}
static void stress2_workload8(Error *pErr, Sqlite *pDb, int i){
- int iTab = (i % STRESS2_TABCNT);
sql_script_printf(pErr, pDb,
- "UPDATE t%d SET y = hex(randomblob(2000)) "
- "WHERE (x %% 5)==(%d %% 5) AND z='big';"
- ,iTab, i
+ "UPDATE t0 SET y = hex(randomblob(57)) "
+ "WHERE x LIKE hex(%d %% 5) AND z='big';"
+ ,i
);
}
static void stress2_workload9(Error *pErr, Sqlite *pDb, int i){
- int iTab = (i % STRESS2_TABCNT);
sql_script_printf(pErr, pDb,
- "DELETE FROM t%d WHERE (x %% 5)==(%d %% 5) AND z='small';"
- ,iTab, i
+ "DELETE FROM t0 WHERE x LIKE hex(%d %% 5) AND z='small';", i
);
}
static void stress2_workload10(Error *pErr, Sqlite *pDb, int i){
- int iTab = (i % STRESS2_TABCNT);
sql_script_printf(pErr, pDb,
- "DELETE FROM t%d WHERE (x %% 5)==(%d %% 5) AND z='big';"
- ,iTab, i
+ "DELETE FROM t0 WHERE x LIKE hex(%d %% 5) AND z='big';", i
);
}
int i1 = 0;
int i2 = 0;
- opendb(&err, &db, pCtx->zDb, 0);
while( !timetostop(&err) ){
- pCtx->xProc(&err, &db, i1);
- i2 += (err.rc==SQLITE_OK);
- clear_error(&err, SQLITE_LOCKED);
- clear_error(&err, SQLITE_ERROR);
- i1++;
+ int cnt;
+ opendb(&err, &db, pCtx->zDb, 0);
+ for(cnt=0; err.rc==SQLITE_OK && cnt<STRESS2_TABCNT; cnt++){
+ pCtx->xProc(&err, &db, i1);
+ i2 += (err.rc==SQLITE_OK);
+ clear_error(&err, SQLITE_LOCKED);
+ i1++;
+ }
+ closedb(&err, &db);
}
print_and_free_err(&err);
{ stress2_workload14 },
{ stress2_workload17 },
};
- const char *azDb[] = {
- "test.db",
- "file::memory:?cache=shared"
- };
- int j;
+ const char *zDb = "test.db";
- for(j=0; j<sizeof(azDb)/sizeof(azDb[0]); j++){
- int i;
- Error err = {0};
- Sqlite db = {0};
- Threadset threads = {0};
- const char *zDb = azDb[j];
+ int i;
+ Error err = {0};
+ Sqlite db = {0};
+ Threadset threads = {0};
- /* To make sure the db file is empty before commencing */
- opendb(&err, &db, zDb, 1);
- closedb(&err, &db);
+ /* To make sure the db file is empty before commencing */
+ opendb(&err, &db, zDb, 1);
+ sql_script(&err, &db,
+ "CREATE TABLE IF NOT EXISTS t0(x PRIMARY KEY, y, z);"
+ "CREATE INDEX IF NOT EXISTS i0 ON t0(y);"
+ );
+ closedb(&err, &db);
- setstoptime(&err, nMs);
- sqlite3_enable_shared_cache(1);
+ setstoptime(&err, nMs);
+ sqlite3_enable_shared_cache(1);
- for(i=0; i<sizeof(aTask)/sizeof(aTask[0]); i++){
- stress2_launch_thread_loop(&err, &threads, zDb, aTask[i].x);
- }
- launch_thread(&err, &threads, stress2_workload19, (void*)zDb);
- launch_thread(&err, &threads, stress2_workload19, (void*)zDb);
-
- join_all_threads(&err, &threads);
- sqlite3_enable_shared_cache(0);
- print_and_free_err(&err);
- if( j==0 ){
- printf("Running stress2 (again, with in-memory db) for %d seconds...\n",
- nMs / 1000
- );
- }
+ for(i=0; i<sizeof(aTask)/sizeof(aTask[0]); i++){
+ stress2_launch_thread_loop(&err, &threads, zDb, aTask[i].x);
}
+ launch_thread(&err, &threads, stress2_workload19, (void*)zDb);
+ launch_thread(&err, &threads, stress2_workload19, (void*)zDb);
+
+ join_all_threads(&err, &threads);
+ sqlite3_enable_shared_cache(0);
+ print_and_free_err(&err);
}