From 014a810f738bc89b50bac4c31002c2db6af828a5 Mon Sep 17 00:00:00 2001
From: "Bradley C. Kuszmaul" <bradley@tokutek.com>
Date: Tue, 22 Apr 2008 14:03:40 +0000
Subject: [PATCH] Tune the big-nested abort/commit tests down to about 8s usr
 (30s elapsed) each.  (5m under valgrind.) Addresses #730.

git-svn-id: file:///svn/tokudb@3560 c7de825b-a66e-492c-adef-691d508d4ae1
---
 src/tests/big-nested-abort-abort.c   | 110 +++++++++++++++++++++++++++
 src/tests/big-nested-abort-commit.c  |   4 +-
 src/tests/big-nested-commit-abort.c  |  16 ++--
 src/tests/big-nested-commit-commit.c |  12 +--
 4 files changed, 128 insertions(+), 14 deletions(-)
 create mode 100644 src/tests/big-nested-abort-abort.c

diff --git a/src/tests/big-nested-abort-abort.c b/src/tests/big-nested-abort-abort.c
new file mode 100644
index 00000000000..62a6177bb30
--- /dev/null
+++ b/src/tests/big-nested-abort-abort.c
@@ -0,0 +1,110 @@
+/* Test to see if a big nested transaction (so big that it's rollbacks spill into a file)
+ * can commit properly. 
+ *  Four Tests:
+ *     big child aborts, parent aborts (This test)
+ *     big child aborts, parent commits
+ *     big child commits, parent aborts
+ *     big child commits, parent commits
+ */
+
+#include <db.h>
+#include <sys/stat.h>
+#include "test.h"
+
+int N = 50000;
+
+static DB_ENV *env;
+static DB *db;
+static DB_TXN *xchild, *xparent;
+
+static void insert (int i, int j) {
+    char hello[30], there[30];
+    DBT key,data;
+    if (verbose) printf("Insert %d\n", i);
+    snprintf(hello, sizeof(hello), "hello%d", i);
+    snprintf(there, sizeof(there), "there%d", j);
+    int r = db->put(db, xchild,
+		    dbt_init(&key,  hello, strlen(hello)+1),
+		    dbt_init(&data, there, strlen(there)+1),
+		    DB_YESOVERWRITE);
+    CKERR(r);
+}
+
+static void lookup (int i, int expect, int expectj) {
+    char hello[30], there[30];
+    DBT key,data;
+    snprintf(hello, sizeof(hello), "hello%d", i);
+    memset(&data, 0, sizeof(data));
+    if (verbose) printf("Looking up %d (expecting %s)\n", i, expect==0 ? "to find" : "not to find");
+    int r = db->get(db, xchild,
+		    dbt_init(&key,  hello, strlen(hello)+1),
+		    &data,
+		    0);
+    assert(expect==r);
+    if (expect==0) {
+	CKERR(r);
+	snprintf(there, sizeof(there), "there%d", expectj);
+	assert(data.size==strlen(there)+1);
+	assert(strcmp(data.data, there)==0);
+    }
+}
+
+void test_abort_abort (void) {
+    int i, r;
+    r=env->txn_begin(env, 0, &xchild, 0); CKERR(r);
+    for (i=0; i<N/2; i++) {
+	insert(i*2,i*4+1);
+    }
+    r=xchild->commit(xchild, 0); CKERR(r);
+    r=env->txn_begin(env, 0, &xparent, 0);  CKERR(r);
+    r=env->txn_begin(env, xparent, &xchild, 0); CKERR(r);
+    for (i=0; i<N; i++) {
+	insert(i, i);
+    }
+    r=xchild->abort(xchild); CKERR(r);
+    r=env->txn_begin(env, xparent, &xchild, 0); CKERR(r);
+    for (i=0; i<N; i++) {
+	lookup(i, (i%2==0)?0:DB_NOTFOUND, i*2+1);
+    }
+    r=xchild->commit(xchild, 0); CKERR(r);
+    r=xparent->abort(xparent); CKERR(r);
+    r=env->txn_begin(env, 0, &xchild, 0); CKERR(r);
+    for (i=0; i<N; i++) {
+	lookup(i, (i%2==0)?0:DB_NOTFOUND, i*2+1);
+    }
+    r=xchild->commit(xchild, 0); CKERR(r);
+}
+
+void setup (void) {
+    DB_TXN *txn;
+    int r;
+    system("rm -rf " ENVDIR);
+    r=mkdir(ENVDIR, 0777);       CKERR(r);
+
+    r=db_env_create(&env, 0); CKERR(r);
+    r=env->set_lk_max_locks(env, N); CKERR(r);
+#ifndef TOKUDB
+    r=env->set_lk_max_objects(env, N); CKERR(r);
+#endif
+    env->set_errfile(env, stderr);
+    r=env->open(env, ENVDIR, DB_INIT_LOCK|DB_INIT_LOG|DB_INIT_MPOOL|DB_INIT_TXN|DB_CREATE|DB_PRIVATE, 0777); CKERR(r);
+    r=db_create(&db, env, 0); CKERR(r);
+
+    r=env->txn_begin(env, 0, &txn, 0); assert(r==0);
+    r=db->open(db, txn, "foo.db", 0, DB_BTREE, DB_CREATE, 0777); CKERR(r);
+    r=txn->commit(txn, 0);    assert(r==0);
+}
+
+void shutdown (void) {
+    int r;
+    r=db->close(db, 0); CKERR(r);
+    r=env->close(env, 0); CKERR(r);
+}
+
+int main (int argc, const char *argv[]) {
+    parse_args(argc, argv);
+    setup();
+    test_abort_abort();
+    shutdown();
+    return 0;
+}
diff --git a/src/tests/big-nested-abort-commit.c b/src/tests/big-nested-abort-commit.c
index 14b48bf14b7..cf14c959102 100644
--- a/src/tests/big-nested-abort-commit.c
+++ b/src/tests/big-nested-abort-commit.c
@@ -11,6 +11,8 @@
 #include <sys/stat.h>
 #include "test.h"
 
+int N = 50000;
+
 static DB_ENV *env;
 static DB *db;
 static DB_TXN *xchild, *xparent;
@@ -47,8 +49,6 @@ static void lookup (int i, int expect, int expectj) {
     }
 }
 
-int N = 200000;
-
 void test_abort_commit (void) {
     int i, r;
     r=env->txn_begin(env, 0, &xchild, 0); CKERR(r);
diff --git a/src/tests/big-nested-commit-abort.c b/src/tests/big-nested-commit-abort.c
index 8a99603ebac..19f0ac4fe45 100644
--- a/src/tests/big-nested-commit-abort.c
+++ b/src/tests/big-nested-commit-abort.c
@@ -11,6 +11,8 @@
 #include <sys/stat.h>
 #include "test.h"
 
+int N = 50000;
+
 static DB_ENV *env;
 static DB *db;
 static DB_TXN *xchild, *xparent;
@@ -47,22 +49,22 @@ static void lookup (int i, int expect, int expectj) {
     }
 }
 
-void test_commit_commit (void) {
+void test_commit_abort (void) {
     int i, r;
     r=env->txn_begin(env, 0, &xparent, 0);  CKERR(r);
     r=env->txn_begin(env, xparent, &xchild, 0); CKERR(r);
-    for (i=0; i<200000; i++) {
+    for (i=0; i<N; i++) {
 	insert(i);
     }
     r=xchild->commit(xchild, 0); CKERR(r);
     r=env->txn_begin(env, xparent, &xchild, 0); CKERR(r);
-    for (i=0; i<200000; i++) {
+    for (i=0; i<N; i++) {
 	lookup(i, 0, i);
     }
     r=xchild->commit(xchild, 0); CKERR(r);
     r=xparent->abort(xparent); CKERR(r);
     r=env->txn_begin(env, 0, &xchild, 0); CKERR(r);
-    for (i=0; i<200000; i++) {
+    for (i=0; i<N; i++) {
 	lookup(i, DB_NOTFOUND, 0);
     }
     r=xchild->commit(xchild, 0); CKERR(r);
@@ -75,9 +77,9 @@ void setup (void) {
     r=mkdir(ENVDIR, 0777);       CKERR(r);
 
     r=db_env_create(&env, 0); CKERR(r);
-    r=env->set_lk_max_locks(env, 200000); CKERR(r);
+    r=env->set_lk_max_locks(env, N); CKERR(r);
 #ifndef TOKUDB
-    r=env->set_lk_max_objects(env, 200000); CKERR(r);
+    r=env->set_lk_max_objects(env, N); CKERR(r);
 #endif
     env->set_errfile(env, stderr);
     r=env->open(env, ENVDIR, DB_INIT_LOCK|DB_INIT_LOG|DB_INIT_MPOOL|DB_INIT_TXN|DB_CREATE|DB_PRIVATE, 0777); CKERR(r);
@@ -98,7 +100,7 @@ void shutdown (void) {
 int main (int argc, const char *argv[]) {
     parse_args(argc, argv);
     setup();
-    test_commit_commit();
+    test_commit_abort();
     shutdown();
     return 0;
 }
diff --git a/src/tests/big-nested-commit-commit.c b/src/tests/big-nested-commit-commit.c
index 05df9a17a4a..9613063bd4f 100644
--- a/src/tests/big-nested-commit-commit.c
+++ b/src/tests/big-nested-commit-commit.c
@@ -47,22 +47,24 @@ static void lookup (int i, int expect, int expectj) {
     }
 }
 
+int N = 50000;
+
 void test_commit_commit (void) {
     int i, r;
     r=env->txn_begin(env, 0, &xparent, 0);  CKERR(r);
     r=env->txn_begin(env, xparent, &xchild, 0); CKERR(r);
-    for (i=0; i<200000; i++) {
+    for (i=0; i<N; i++) {
 	insert(i);
     }
     r=xchild->commit(xchild, 0); CKERR(r);
     r=env->txn_begin(env, xparent, &xchild, 0); CKERR(r);
-    for (i=0; i<200000; i++) {
+    for (i=0; i<N; i++) {
 	lookup(i, 0, i);
     }
     r=xchild->commit(xchild, 0); CKERR(r);
     r=xparent->commit(xparent, 0); CKERR(r);
     r=env->txn_begin(env, 0, &xchild, 0); CKERR(r);
-    for (i=0; i<200000; i++) {
+    for (i=0; i<N; i++) {
 	lookup(i, 0, i);
     }
     r=xchild->commit(xchild, 0); CKERR(r);
@@ -75,9 +77,9 @@ void setup (void) {
     r=mkdir(ENVDIR, 0777);       CKERR(r);
 
     r=db_env_create(&env, 0); CKERR(r);
-    r=env->set_lk_max_locks(env, 200000); CKERR(r);
+    r=env->set_lk_max_locks(env, N); CKERR(r);
 #ifndef TOKUDB
-    r=env->set_lk_max_objects(env, 200000); CKERR(r);
+    r=env->set_lk_max_objects(env, N); CKERR(r);
 #endif
     env->set_errfile(env, stderr);
     r=env->open(env, ENVDIR, DB_INIT_LOCK|DB_INIT_LOG|DB_INIT_MPOOL|DB_INIT_TXN|DB_CREATE|DB_PRIVATE, 0777); CKERR(r);
-- 
2.30.9