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