Commit be6b85b0 authored by Bradley C. Kuszmaul's avatar Bradley C. Kuszmaul

We now have divergent traces from BDB and TokuDB. Addreses #162.

git-svn-id: file:///svn/tokudb@1060 c7de825b-a66e-492c-adef-691d508d4ae1
parent b756f84d
...@@ -141,4 +141,14 @@ clean: ...@@ -141,4 +141,14 @@ clean:
rm -rf dir.*.tdb dir.*.bdb rm -rf dir.*.tdb dir.*.bdb
test_db_curs4.tdb: trace.h test_db_curs4.tdb: trace.h
test_db_curs4.bdb: trace.h
# Note the "-", which means we expect and ignore an error.
c4s.bdb: test_db_curs4.bdb
./test_db_curs4.bdb 1 > c4.c.a.bdb
./test_db_curs4.bdb 1 --more > c4.c.b.bdb
c4s.tdb: test_db_curs4.tdb
./test_db_curs4.tdb 1 > c4.c.a.tdb
-./test_db_curs4.tdb 1 --more > c4.c.b.tdb
c4s: c4s.bdb c4s.tdb
...@@ -202,11 +202,9 @@ void close_databases (void) { ...@@ -202,11 +202,9 @@ void close_databases (void) {
void gettod (struct timestamp *ts) { void gettod (struct timestamp *ts) {
struct timeval tv; static int counter;
int r = gettimeofday(&tv, 0); ts->tv_sec = 0;
assert(r==0); ts->tv_usec = counter++;
ts->tv_sec = htonl(tv.tv_sec);
ts->tv_usec = htonl(tv.tv_usec);
} }
void setup_for_db_create (void) { void setup_for_db_create (void) {
...@@ -250,26 +248,47 @@ static int count_entries (const char *dbcname, DB *db) { ...@@ -250,26 +248,47 @@ static int count_entries (const char *dbcname, DB *db) {
return n_found; return n_found;
} }
int oppass=0, opnum=0;
static void insert_person (void) { static void insert_person (void) {
int namelen = 5+myrandom()%245; int namelen = 5+myrandom()%245;
struct primary_key pk; struct primary_key pk;
struct primary_data pd; struct primary_data pd;
char keyarray[1000], dataarray[1000]; char keyarray[1000], dataarray[1000];
unsigned char namearray[1000]; char *namearray;
pk.rand = myrandom(); myrandom();
static int rctr=0;
pk.rand = rctr++;
gettod(&pk.ts); gettod(&pk.ts);
pd.creationtime = pk.ts; pd.creationtime = pk.ts;
pd.expiretime = pk.ts; pd.expiretime = pk.ts;
pd.expiretime.tv_sec += 24*60*60*366; pd.expiretime.tv_sec += 24*60*60*366;
pd.doesexpire = (myrandom()%10==0); pd.doesexpire = oppass==1 && (opnum==2 || opnum==10 || opnum==22);
int i; int i;
pd.name.name = namearray; for (i=0; i<namelen; i++) {
pd.name.name[0] = 'A'+myrandom()%26; myrandom();
for (i=1; i<namelen; i++) {
pd.name.name[i] = 'a'+myrandom()%26;
} }
pd.name.name[i]=0; // fprintf(stderr, "%d: else if (oppass==%d && opnum==%d) pd.name=\"%s\";\n", __LINE__, oppass, opnum, pd.name.name);
if (oppass==1 && opnum==1) namearray="Hc";
else if (oppass==1 && opnum==2) namearray="Ku";
else if (oppass==1 && opnum==5) namearray="Ub";
else if (oppass==1 && opnum==6) namearray="Sx";
else if (oppass==1 && opnum==9) namearray="Cc";
else if (oppass==1 && opnum==10) namearray="Ou";
else if (oppass==1 && opnum==13) namearray="Qf";
else if (oppass==1 && opnum==14) namearray="Ua";
else if (oppass==1 && opnum==15) namearray="Pu";
else if (oppass==1 && opnum==16) namearray="Ru";
else if (oppass==1 && opnum==22) namearray="Ef";
else if (oppass==1 && opnum==24) namearray="Mg";
else if (oppass==1 && opnum==25) namearray="Qr";
else if (oppass==1 && opnum==26) namearray="Ve";
else if (oppass==1 && opnum==30) namearray="Ar";
else if (oppass==2 && opnum==9) namearray="Dd";
else if (oppass==2 && opnum==15) namearray="Ad";
else assert(0);
DBT key,data; DBT key,data;
pd.name.name = (unsigned char*)namearray;
memset(&key,0,sizeof(DBT)); memset(&key,0,sizeof(DBT));
memset(&data,0,sizeof(DBT)); memset(&data,0,sizeof(DBT));
key.data = keyarray; key.data = keyarray;
...@@ -354,13 +373,35 @@ static void step_name (void) { ...@@ -354,13 +373,35 @@ static void step_name (void) {
int cursor_load=2; /* Set this to a higher number to do more cursor work for every insertion. Needed to get to the end. */ int cursor_load=2; /* Set this to a higher number to do more cursor work for every insertion. Needed to get to the end. */
static void activity (void) { static void activity (void) {
if (myrandom()%20==0) { myrandom();
int do_delete = (oppass==1 && opnum==32) || (oppass==2 && opnum==8);
if (do_delete) {
// Delete the oldest expired one. Keep the cursor open // Delete the oldest expired one. Keep the cursor open
delete_oldest_expired(); delete_oldest_expired();
} else if (myrandom()%cursor_load==0) {
insert_person();
} else { } else {
step_name(); int do_insert = ( (oppass==1 && opnum==1)
|| (oppass==1 && opnum==2)
|| (oppass==1 && opnum==5)
|| (oppass==1 && opnum==6)
|| (oppass==1 && opnum==9)
|| (oppass==1 && opnum==10)
|| (oppass==1 && opnum==13)
|| (oppass==1 && opnum==14)
|| (oppass==1 && opnum==15)
|| (oppass==1 && opnum==16)
|| (oppass==1 && opnum==22)
|| (oppass==1 && opnum==24)
|| (oppass==1 && opnum==25)
|| (oppass==1 && opnum==26)
|| (oppass==1 && opnum==30)
|| (oppass==2 && opnum==9)
|| (oppass==2 && opnum==15));
myrandom();
if (do_insert) {
insert_person();
} else {
step_name();
}
} }
//assert(count_all_items==count_entries(dbp)); //assert(count_all_items==count_entries(dbp));
} }
...@@ -373,13 +414,7 @@ static void usage (const char *argv1) { ...@@ -373,13 +414,7 @@ static void usage (const char *argv1) {
int main (int argc, const char *argv[]) { int main (int argc, const char *argv[]) {
const char *progname=argv[0]; const char *progname=argv[0];
int useseed; int useseed=1;
{
struct timeval tv;
gettimeofday(&tv, 0);
useseed = tv.tv_sec+tv.tv_usec*997; // magic: 997 is a prime, and a million (microseconds/second) times 997 is still 32 bits.
}
memset(&nc_key, 0, sizeof(nc_key)); memset(&nc_key, 0, sizeof(nc_key));
memset(&nc_data, 0, sizeof(nc_data)); memset(&nc_data, 0, sizeof(nc_data));
...@@ -411,16 +446,20 @@ int main (int argc, const char *argv[]) { ...@@ -411,16 +446,20 @@ int main (int argc, const char *argv[]) {
switch (mode) { switch (mode) {
case MODE_DEFAULT: case MODE_DEFAULT:
oppass=1;
system("rm -rf " DIR); system("rm -rf " DIR);
mkdir(DIR, 0777); mkdir(DIR, 0777);
create_databases(); create_databases();
{ {
int i; int i;
for (i=0; i<33; i++) for (i=0; i<33; i++) {
opnum=i;
activity(); activity();
}
} }
break; break;
case MODE_MORE: case MODE_MORE:
oppass=2;
create_databases(); create_databases();
calc_n_items = count_all_items = count_entries("dbc", dbp); calc_n_items = count_all_items = count_entries("dbc", dbp);
//printf("%s:%d n_items initially=%d\n", __FILE__, __LINE__, count_all_items); //printf("%s:%d n_items initially=%d\n", __FILE__, __LINE__, count_all_items);
...@@ -429,8 +468,10 @@ int main (int argc, const char *argv[]) { ...@@ -429,8 +468,10 @@ int main (int argc, const char *argv[]) {
int i; int i;
cursor_load = 8*(1+2*count_all_items/n_activities); cursor_load = 8*(1+2*count_all_items/n_activities);
//printf("%s:%d count=%d cursor_load=%d\n", __FILE__, __LINE__, count_all_items, cursor_load); //printf("%s:%d count=%d cursor_load=%d\n", __FILE__, __LINE__, count_all_items, cursor_load);
for (i=0; i<n_activities; i++) for (i=0; i<n_activities; i++) {
opnum=i;
activity(); activity();
}
} }
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment