diff --git a/ft/ft-ops.h b/ft/ft-ops.h index 8d4d3303ff6..cbf7c1d794c 100644 --- a/ft/ft-ops.h +++ b/ft/ft-ops.h @@ -181,9 +181,7 @@ int toku_ft_cursor_get (FT_CURSOR cursor, DBT *key, FT_GET_CALLBACK_FUNCTION get int toku_ft_cursor_first(FT_CURSOR cursor, FT_GET_CALLBACK_FUNCTION getf, void *getf_v) __attribute__ ((warn_unused_result)); int toku_ft_cursor_last(FT_CURSOR cursor, FT_GET_CALLBACK_FUNCTION getf, void *getf_v) __attribute__ ((warn_unused_result)); int toku_ft_cursor_next(FT_CURSOR cursor, FT_GET_CALLBACK_FUNCTION getf, void *getf_v) __attribute__ ((warn_unused_result)); -int toku_ft_cursor_next_nodup(FT_CURSOR cursor, FT_GET_CALLBACK_FUNCTION getf, void *getf_v) __attribute__ ((warn_unused_result)); int toku_ft_cursor_prev(FT_CURSOR cursor, FT_GET_CALLBACK_FUNCTION getf, void *getf_v) __attribute__ ((warn_unused_result)); -int toku_ft_cursor_prev_nodup(FT_CURSOR cursor, FT_GET_CALLBACK_FUNCTION getf, void *getf_v) __attribute__ ((warn_unused_result)); int toku_ft_cursor_current(FT_CURSOR cursor, int op, FT_GET_CALLBACK_FUNCTION getf, void *getf_v) __attribute__ ((warn_unused_result)); int toku_ft_cursor_set(FT_CURSOR cursor, DBT *key, FT_GET_CALLBACK_FUNCTION getf, void *getf_v) __attribute__ ((warn_unused_result)); int toku_ft_cursor_set_range(FT_CURSOR cursor, DBT *key, FT_GET_CALLBACK_FUNCTION getf, void *getf_v) __attribute__ ((warn_unused_result)); diff --git a/ft/ftloader.cc b/ft/ftloader.cc index 38401494975..911a617b884 100644 --- a/ft/ftloader.cc +++ b/ft/ftloader.cc @@ -2688,7 +2688,7 @@ int toku_ft_loader_get_error(FTLOADER bl, int *error) { } static void add_pair_to_leafnode (struct leaf_buf *lbuf, unsigned char *key, int keylen, unsigned char *val, int vallen, int this_leafentry_size, STAT64INFO stats_to_update) { - lbuf->nkeys++; // assume NODUP + lbuf->nkeys++; lbuf->ndata++; lbuf->dsize += keylen + vallen; lbuf->off += this_leafentry_size; diff --git a/ft/leafentry.h b/ft/leafentry.h index 9fd36ae6163..85cf916d166 100644 --- a/ft/leafentry.h +++ b/ft/leafentry.h @@ -18,7 +18,7 @@ #if 0 - Memory format of packed nodup leaf entry + Memory format of packed leaf entry CONSTANTS: num_uxrs keylen diff --git a/ft/logformat.cc b/ft/logformat.cc index baf3601f1cf..110e169543a 100644 --- a/ft/logformat.cc +++ b/ft/logformat.cc @@ -58,7 +58,7 @@ const struct logtype rollbacks[] = { {"fcreate", 'F', FA{{"FILENUM", "filenum", 0}, {"BYTESTRING", "iname", 0}, NULLFIELD}, LOG_BEGIN_ACTION_NA}, - // cmdinsert is used to insert a key-value pair into a NODUP DB. For rollback we don't need the data. + // cmdinsert is used to insert a key-value pair into a DB. For rollback we don't need the data. {"cmdinsert", 'i', FA{ {"FILENUM", "filenum", 0}, {"BYTESTRING", "key", 0}, diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index bc69327bae4..020433d0cda 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -231,8 +231,6 @@ if(BUILD_TESTING) test_db_descriptor test_db_descriptor_named_db test_db_txn_locks_read_uncommitted - test_dupsort_get_both_range_reverse - test_dupsort_set_range_reverse test_get_max_row_size test_large_update_broadcast_small_cachetable test_locktree_close diff --git a/src/tests/recover-checkpoint-fopen-dupsort-abort.cc b/src/tests/recover-checkpoint-fopen-dupsort-abort.cc deleted file mode 100644 index 0f5945f83f4..00000000000 --- a/src/tests/recover-checkpoint-fopen-dupsort-abort.cc +++ /dev/null @@ -1,218 +0,0 @@ -/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */ -// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4: -#ident "$Id$" -#ident "Copyright (c) 2007-2012 Tokutek Inc. All rights reserved." -#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it." -// this test verifies that db creation after a checkpoint works for nodup and dupsort dictionaries - -#include -#include "test.h" - - -const int envflags = DB_INIT_MPOOL|DB_CREATE|DB_THREAD |DB_INIT_LOCK|DB_INIT_LOG|DB_INIT_TXN|DB_PRIVATE; -const char *namea="a.db"; -const char *nameb="b.db"; - -static void run_test (bool do_commit, bool do_abort) { - int r; - r = system("rm -rf " ENVDIR); - CKERR(r); - toku_os_mkdir(ENVDIR, S_IRWXU+S_IRWXG+S_IRWXO); - - DB_ENV *env; - DB *dba, *dbb; - r = db_env_create(&env, 0); CKERR(r); - r = env->open(env, ENVDIR, envflags, S_IRWXU+S_IRWXG+S_IRWXO); CKERR(r); - - r = db_create(&dba, env, 0); CKERR(r); - // r = dba->set_flags(dba, DB_DUPSORT); CKERR(r); - r = dba->open(dba, NULL, namea, NULL, DB_BTREE, DB_AUTO_COMMIT|DB_CREATE, 0666); CKERR(r); - - r = env->txn_checkpoint(env, 0, 0, 0); CKERR(r); - - r = db_create(&dbb, env, 0); CKERR(r); - r = dbb->open(dbb, NULL, nameb, NULL, DB_BTREE, DB_AUTO_COMMIT|DB_CREATE, 0666); CKERR(r); - DB_TXN *txn; - r = env->txn_begin(env, NULL, &txn, 0); CKERR(r); - { - DBT a,b; - dbt_init(&a, "a", 2); - dbt_init(&b, "b", 2); - r = dba->put(dba, txn, &a, &b, 0); CKERR(r); - r = dbb->put(dbb, txn, &b, &a, 0); CKERR(r); - } - //printf("opened\n"); - if (do_commit) { - r = txn->commit(txn, 0); CKERR(r); - } else if (do_abort) { - r = txn->abort(txn); CKERR(r); - - // force an fsync of the log - r = env->txn_begin(env, NULL, &txn, 0); CKERR(r); - r = txn->commit(txn, 0); CKERR(r); - } - //printf("shutdown\n"); - toku_hard_crash_on_purpose(); -} - -static void run_recover (bool did_commit) { - DB_ENV *env; - DB *dba, *dbb; - int r; - r = db_env_create(&env, 0); CKERR(r); - r = env->open(env, ENVDIR, envflags|DB_RECOVER, S_IRWXU+S_IRWXG+S_IRWXO); CKERR(r); - r = db_create(&dba, env, 0); CKERR(r); - r = dba->open(dba, NULL, namea, NULL, DB_BTREE, DB_AUTO_COMMIT|DB_CREATE, 0666); CKERR(r); - - uint32_t dbflags; - dbflags = 0; - r = dba->get_flags(dba, &dbflags); CKERR(r); - assert(dbflags == 0); - - r = db_create(&dbb, env, 0); CKERR(r); - r = dba->open(dbb, NULL, nameb, NULL, DB_BTREE, DB_AUTO_COMMIT|DB_CREATE, 0666); CKERR(r); - - dbflags = 0; - r = dbb->get_flags(dbb, &dbflags); CKERR(r); - assert(dbflags == 0); - - DBT aa, ab; - dbt_init(&aa, NULL, 0); - dbt_init(&ab, NULL, 0); - DBT ba, bb; - dbt_init(&ba, NULL, 0); - dbt_init(&bb, NULL, 0); - DB_TXN *txn; - DBC *ca,*cb; - r = env->txn_begin(env, NULL, &txn, 0); CKERR(r); - r = dba->cursor(dba, txn, &ca, 0); CKERR(r); - r = dbb->cursor(dbb, txn, &cb, 0); CKERR(r); - int ra = ca->c_get(ca, &aa, &ab, DB_FIRST); CKERR(r); - int rb = cb->c_get(cb, &ba, &bb, DB_FIRST); CKERR(r); - if (did_commit) { - assert(ra==0); - assert(rb==0); - // verify key-value pairs - assert(aa.size==2); - assert(ab.size==2); - assert(ba.size==2); - assert(bb.size==2); - const char a[2] = "a"; - const char b[2] = "b"; - assert(memcmp(aa.data, &a, 2)==0); - assert(memcmp(ab.data, &b, 2)==0); - assert(memcmp(ab.data, &b, 2)==0); - assert(memcmp(bb.data, &a, 2)==0); - // make sure no other entries in DB - assert(ca->c_get(ca, &aa, &ab, DB_NEXT) == DB_NOTFOUND); - assert(cb->c_get(cb, &ba, &bb, DB_NEXT) == DB_NOTFOUND); - fprintf(stderr, "Both verified. Yay!\n"); - } else { - // It wasn't committed (it also wasn't aborted), but a checkpoint happened. - assert(ra==DB_NOTFOUND); - assert(rb==DB_NOTFOUND); - fprintf(stderr, "Neither present. Yay!\n"); - } - r = ca->c_close(ca); CKERR(r); - r = cb->c_close(cb); CKERR(r); - r = txn->commit(txn, 0); CKERR(r); - r = dba->close(dba, 0); CKERR(r); - r = dbb->close(dbb, 0); CKERR(r); - r = env->close(env, 0); CKERR(r); -} - -static void run_recover_only (void) { - DB_ENV *env; - int r; - - r = db_env_create(&env, 0); CKERR(r); - r = env->open(env, ENVDIR, envflags|DB_RECOVER, S_IRWXU+S_IRWXG+S_IRWXO); CKERR(r); - r = env->close(env, 0); CKERR(r); -} - -static void run_no_recover (void) { - DB_ENV *env; - int r; - - r = db_env_create(&env, 0); CKERR(r); - r = env->open(env, ENVDIR, envflags & ~DB_RECOVER, S_IRWXU+S_IRWXG+S_IRWXO); - assert(r == DB_RUNRECOVERY); - r = env->close(env, 0); CKERR(r); -} - -const char *cmd; - - -bool do_commit=false, do_abort=false, do_explicit_abort=false, do_recover_committed=false, do_recover_aborted=false, do_recover_only=false, do_no_recover = false; - -static void test_parse_args (int argc, char * const argv[]) { - int resultcode; - cmd = argv[0]; - argc--; argv++; - while (argc>0) { - if (strcmp(argv[0], "-v") == 0) { - verbose++; - } else if (strcmp(argv[0],"-q")==0) { - verbose--; - if (verbose<0) verbose=0; - } else if (strcmp(argv[0], "--commit")==0) { - do_commit=true; - } else if (strcmp(argv[0], "--abort")==0 || strcmp(argv[0], "--test") == 0) { - do_abort=true; - } else if (strcmp(argv[0], "--explicit-abort")==0) { - do_explicit_abort=true; - } else if (strcmp(argv[0], "--recover-committed")==0) { - do_recover_committed=true; - } else if (strcmp(argv[0], "--recover-aborted")==0 || strcmp(argv[0], "--recover") == 0) { - do_recover_aborted=true; - } else if (strcmp(argv[0], "--recover-only") == 0) { - do_recover_only=true; - } else if (strcmp(argv[0], "--no-recover") == 0) { - do_no_recover=true; - } else if (strcmp(argv[0], "-h")==0) { - resultcode=0; - do_usage: - fprintf(stderr, "Usage:\n%s [-v|-q]* [-h] {--commit | --abort | --explicit-abort | --recover-committed | --recover-aborted } \n", cmd); - exit(resultcode); - } else { - fprintf(stderr, "Unknown arg: %s\n", argv[0]); - resultcode=1; - goto do_usage; - } - argc--; - argv++; - } - { - int n_specified=0; - if (do_commit) n_specified++; - if (do_abort) n_specified++; - if (do_explicit_abort) n_specified++; - if (do_recover_committed) n_specified++; - if (do_recover_aborted) n_specified++; - if (do_recover_only) n_specified++; - if (do_no_recover) n_specified++; - if (n_specified>1) { - printf("Specify only one of --commit or --abort or --recover-committed or --recover-aborted\n"); - resultcode=1; - goto do_usage; - } - } -} - -int test_main (int argc, char * const argv[]) { - test_parse_args(argc, argv); - if (do_commit) { - run_test(true, false); - } else if (do_abort) { - run_test(false, true); - } else if (do_recover_committed) { - run_recover(true); - } else if (do_recover_aborted) { - run_recover(false); - } else if (do_recover_only) { - run_recover_only(); - } else if (do_no_recover) { - run_no_recover(); - } - return 0; -} diff --git a/src/tests/recover-checkpoint-fopen-dupsort-commit.cc b/src/tests/recover-checkpoint-fopen-dupsort-commit.cc deleted file mode 100644 index d501be4aebd..00000000000 --- a/src/tests/recover-checkpoint-fopen-dupsort-commit.cc +++ /dev/null @@ -1,218 +0,0 @@ -/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */ -// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4: -#ident "$Id$" -#ident "Copyright (c) 2007-2012 Tokutek Inc. All rights reserved." -#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it." -// this test verifies that db creation after a checkpoint works for nodup and dupsort dictionaries - -#include -#include "test.h" - - -const int envflags = DB_INIT_MPOOL|DB_CREATE|DB_THREAD |DB_INIT_LOCK|DB_INIT_LOG|DB_INIT_TXN|DB_PRIVATE; -const char *namea="a.db"; -const char *nameb="b.db"; - -static void run_test (bool do_commit, bool do_abort) { - int r; - r = system("rm -rf " ENVDIR); - CKERR(r); - toku_os_mkdir(ENVDIR, S_IRWXU+S_IRWXG+S_IRWXO); - - DB_ENV *env; - DB *dba, *dbb; - r = db_env_create(&env, 0); CKERR(r); - r = env->open(env, ENVDIR, envflags, S_IRWXU+S_IRWXG+S_IRWXO); CKERR(r); - - r = db_create(&dba, env, 0); CKERR(r); - // r = dba->set_flags(dba, DB_DUPSORT); CKERR(r); - r = dba->open(dba, NULL, namea, NULL, DB_BTREE, DB_AUTO_COMMIT|DB_CREATE, 0666); CKERR(r); - - r = env->txn_checkpoint(env, 0, 0, 0); CKERR(r); - - r = db_create(&dbb, env, 0); CKERR(r); - r = dbb->open(dbb, NULL, nameb, NULL, DB_BTREE, DB_AUTO_COMMIT|DB_CREATE, 0666); CKERR(r); - DB_TXN *txn; - r = env->txn_begin(env, NULL, &txn, 0); CKERR(r); - { - DBT a,b; - dbt_init(&a, "a", 2); - dbt_init(&b, "b", 2); - r = dba->put(dba, txn, &a, &b, 0); CKERR(r); - r = dbb->put(dbb, txn, &b, &a, 0); CKERR(r); - } - //printf("opened\n"); - if (do_commit) { - r = txn->commit(txn, 0); CKERR(r); - } else if (do_abort) { - r = txn->abort(txn); CKERR(r); - - // force an fsync of the log - r = env->txn_begin(env, NULL, &txn, 0); CKERR(r); - r = txn->commit(txn, 0); CKERR(r); - } - //printf("shutdown\n"); - toku_hard_crash_on_purpose(); -} - -static void run_recover (bool did_commit) { - DB_ENV *env; - DB *dba, *dbb; - int r; - r = db_env_create(&env, 0); CKERR(r); - r = env->open(env, ENVDIR, envflags|DB_RECOVER, S_IRWXU+S_IRWXG+S_IRWXO); CKERR(r); - r = db_create(&dba, env, 0); CKERR(r); - r = dba->open(dba, NULL, namea, NULL, DB_BTREE, DB_AUTO_COMMIT|DB_CREATE, 0666); CKERR(r); - - uint32_t dbflags; - dbflags = 0; - r = dba->get_flags(dba, &dbflags); CKERR(r); - assert(dbflags == 0); - - r = db_create(&dbb, env, 0); CKERR(r); - r = dba->open(dbb, NULL, nameb, NULL, DB_BTREE, DB_AUTO_COMMIT|DB_CREATE, 0666); CKERR(r); - - dbflags = 0; - r = dbb->get_flags(dbb, &dbflags); CKERR(r); - assert(dbflags == 0); - - DBT aa, ab; - dbt_init(&aa, NULL, 0); - dbt_init(&ab, NULL, 0); - DBT ba, bb; - dbt_init(&ba, NULL, 0); - dbt_init(&bb, NULL, 0); - DB_TXN *txn; - DBC *ca,*cb; - r = env->txn_begin(env, NULL, &txn, 0); CKERR(r); - r = dba->cursor(dba, txn, &ca, 0); CKERR(r); - r = dbb->cursor(dbb, txn, &cb, 0); CKERR(r); - int ra = ca->c_get(ca, &aa, &ab, DB_FIRST); CKERR(r); - int rb = cb->c_get(cb, &ba, &bb, DB_FIRST); CKERR(r); - if (did_commit) { - assert(ra==0); - assert(rb==0); - // verify key-value pairs - assert(aa.size==2); - assert(ab.size==2); - assert(ba.size==2); - assert(bb.size==2); - const char a[2] = "a"; - const char b[2] = "b"; - assert(memcmp(aa.data, &a, 2)==0); - assert(memcmp(ab.data, &b, 2)==0); - assert(memcmp(ab.data, &b, 2)==0); - assert(memcmp(bb.data, &a, 2)==0); - // make sure no other entries in DB - assert(ca->c_get(ca, &aa, &ab, DB_NEXT) == DB_NOTFOUND); - assert(cb->c_get(cb, &ba, &bb, DB_NEXT) == DB_NOTFOUND); - fprintf(stderr, "Both verified. Yay!\n"); - } else { - // It wasn't committed (it also wasn't aborted), but a checkpoint happened. - assert(ra==DB_NOTFOUND); - assert(rb==DB_NOTFOUND); - fprintf(stderr, "Neither present. Yay!\n"); - } - r = ca->c_close(ca); CKERR(r); - r = cb->c_close(cb); CKERR(r); - r = txn->commit(txn, 0); CKERR(r); - r = dba->close(dba, 0); CKERR(r); - r = dbb->close(dbb, 0); CKERR(r); - r = env->close(env, 0); CKERR(r); -} - -static void run_recover_only (void) { - DB_ENV *env; - int r; - - r = db_env_create(&env, 0); CKERR(r); - r = env->open(env, ENVDIR, envflags|DB_RECOVER, S_IRWXU+S_IRWXG+S_IRWXO); CKERR(r); - r = env->close(env, 0); CKERR(r); -} - -static void run_no_recover (void) { - DB_ENV *env; - int r; - - r = db_env_create(&env, 0); CKERR(r); - r = env->open(env, ENVDIR, envflags & ~DB_RECOVER, S_IRWXU+S_IRWXG+S_IRWXO); - assert(r == DB_RUNRECOVERY); - r = env->close(env, 0); CKERR(r); -} - -const char *cmd; - - -bool do_commit=false, do_abort=false, do_explicit_abort=false, do_recover_committed=false, do_recover_aborted=false, do_recover_only=false, do_no_recover = false; - -static void test_parse_args (int argc, char * const argv[]) { - int resultcode; - cmd = argv[0]; - argc--; argv++; - while (argc>0) { - if (strcmp(argv[0], "-v") == 0) { - verbose++; - } else if (strcmp(argv[0],"-q")==0) { - verbose--; - if (verbose<0) verbose=0; - } else if (strcmp(argv[0], "--commit")==0 || strcmp(argv[0], "--test") == 0) { - do_commit=true; - } else if (strcmp(argv[0], "--abort")==0) { - do_abort=true; - } else if (strcmp(argv[0], "--explicit-abort")==0) { - do_explicit_abort=true; - } else if (strcmp(argv[0], "--recover-committed")==0 || strcmp(argv[0], "--recover") == 0) { - do_recover_committed=true; - } else if (strcmp(argv[0], "--recover-aborted")==0) { - do_recover_aborted=true; - } else if (strcmp(argv[0], "--recover-only") == 0) { - do_recover_only=true; - } else if (strcmp(argv[0], "--no-recover") == 0) { - do_no_recover=true; - } else if (strcmp(argv[0], "-h")==0) { - resultcode=0; - do_usage: - fprintf(stderr, "Usage:\n%s [-v|-q]* [-h] {--commit | --abort | --explicit-abort | --recover-committed | --recover-aborted } \n", cmd); - exit(resultcode); - } else { - fprintf(stderr, "Unknown arg: %s\n", argv[0]); - resultcode=1; - goto do_usage; - } - argc--; - argv++; - } - { - int n_specified=0; - if (do_commit) n_specified++; - if (do_abort) n_specified++; - if (do_explicit_abort) n_specified++; - if (do_recover_committed) n_specified++; - if (do_recover_aborted) n_specified++; - if (do_recover_only) n_specified++; - if (do_no_recover) n_specified++; - if (n_specified>1) { - printf("Specify only one of --commit or --abort or --recover-committed or --recover-aborted\n"); - resultcode=1; - goto do_usage; - } - } -} - -int test_main (int argc, char * const argv[]) { - test_parse_args(argc, argv); - if (do_commit) { - run_test(true, false); - } else if (do_abort) { - run_test(false, true); - } else if (do_recover_committed) { - run_recover(true); - } else if (do_recover_aborted) { - run_recover(false); - } else if (do_recover_only) { - run_recover_only(); - } else if (do_no_recover) { - run_no_recover(); - } - return 0; -} diff --git a/src/tests/recover-fassociate-dupsort.cc b/src/tests/recover-fassociate-dupsort.cc deleted file mode 100644 index 05c9f5ef9b6..00000000000 --- a/src/tests/recover-fassociate-dupsort.cc +++ /dev/null @@ -1,132 +0,0 @@ -/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */ -// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4: -#ident "$Id$" -#ident "Copyright (c) 2007-2012 Tokutek Inc. All rights reserved." -#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it." -// this test makes sure that fassociate can open nodup and dupsort dictionaries - -#include -#include "test.h" - - -const int envflags = DB_INIT_MPOOL|DB_CREATE|DB_THREAD |DB_INIT_LOCK|DB_INIT_LOG|DB_INIT_TXN|DB_PRIVATE; - -const char *namea="a.db"; -const char *nameb="b.db"; - -static void run_test (void) { - int r; - r = system("rm -rf " ENVDIR); - CKERR(r); - toku_os_mkdir(ENVDIR, S_IRWXU+S_IRWXG+S_IRWXO); - DB_ENV *env; - DB *dba, *dbb; - r = db_env_create(&env, 0); CKERR(r); - r = env->open(env, ENVDIR, envflags, S_IRWXU+S_IRWXG+S_IRWXO); CKERR(r); - - r = db_create(&dba, env, 0); CKERR(r); - r = dba->open(dba, NULL, namea, NULL, DB_BTREE, DB_AUTO_COMMIT|DB_CREATE, 0666); CKERR(r); - - r = db_create(&dbb, env, 0); CKERR(r); - r = dbb->open(dbb, NULL, nameb, NULL, DB_BTREE, DB_AUTO_COMMIT|DB_CREATE, 0666); CKERR(r); - - DB_TXN *txn; - r = env->txn_begin(env, NULL, &txn, 0); CKERR(r); - { - DBT a,b; - dbt_init(&a, "a", 2); - dbt_init(&b, "b", 2); - r = dba->put(dba, txn, &a, &b, 0); CKERR(r); - r = env->txn_checkpoint(env, 0, 0, 0); CKERR(r); - r = dbb->put(dbb, txn, &b, &a, 0); CKERR(r); - } - - r = txn->commit(txn, 0); CKERR(r); - - toku_hard_crash_on_purpose(); -} - -static void run_recover (void) { - DB_ENV *env; - int r; - - r = db_env_create(&env, 0); CKERR(r); - r = env->open(env, ENVDIR, envflags + DB_RECOVER, S_IRWXU+S_IRWXG+S_IRWXO); CKERR(r); - - uint32_t dbflags; - DB *dba; - r = db_create(&dba, env, 0); CKERR(r); - r = dba->open(dba, NULL, namea, NULL, DB_UNKNOWN, DB_AUTO_COMMIT, 0666); CKERR(r); - r = dba->get_flags(dba, &dbflags); CKERR(r); - r = dba->close(dba, 0); CKERR(r); - DB *dbb; - r = db_create(&dbb, env, 0); CKERR(r); - r = dbb->open(dbb, NULL, nameb, NULL, DB_UNKNOWN, DB_AUTO_COMMIT, 0666); CKERR(r); - r = dbb->get_flags(dbb, &dbflags); CKERR(r); - assert(dbflags == 0); - r = dbb->close(dbb, 0); CKERR(r); - - r = env->close(env, 0); CKERR(r); - exit(0); -} - -static void run_no_recover (void) { - DB_ENV *env; - int r; - - r = db_env_create(&env, 0); CKERR(r); - r = env->open(env, ENVDIR, envflags & ~DB_RECOVER, S_IRWXU+S_IRWXG+S_IRWXO); CKERR(r); - r = env->close(env, 0); CKERR(r); - exit(0); -} - -const char *cmd; - -bool do_test=false, do_recover=false, do_recover_only=false, do_no_recover = false; - -static void test_parse_args (int argc, char * const argv[]) { - int resultcode; - cmd = argv[0]; - argc--; argv++; - while (argc>0) { - if (strcmp(argv[0], "-v") == 0) { - verbose++; - } else if (strcmp(argv[0],"-q")==0) { - verbose--; - if (verbose<0) verbose=0; - } else if (strcmp(argv[0], "--test")==0) { - do_test=true; - } else if (strcmp(argv[0], "--recover") == 0) { - do_recover=true; - } else if (strcmp(argv[0], "--recover-only") == 0) { - do_recover_only=true; - } else if (strcmp(argv[0], "--no-recover") == 0) { - do_no_recover=true; - } else if (strcmp(argv[0], "-h")==0) { - resultcode=0; - do_usage: - fprintf(stderr, "Usage:\n%s [-v|-q]* [-h] {--test | --recover } \n", cmd); - exit(resultcode); - } else { - fprintf(stderr, "Unknown arg: %s\n", argv[0]); - resultcode=1; - goto do_usage; - } - argc--; - argv++; - } -} - -int test_main (int argc, char * const argv[]) { - test_parse_args(argc, argv); - if (do_test) { - run_test(); - } else if (do_recover) { - run_recover(); - } else if (do_recover_only) { - run_recover(); - } else if (do_no_recover) { - run_no_recover(); - } - return 0; -} diff --git a/src/tests/recover-fassociate-nodup.cc b/src/tests/recover-fassociate.cc similarity index 100% rename from src/tests/recover-fassociate-nodup.cc rename to src/tests/recover-fassociate.cc diff --git a/src/tests/test_dup_flags.cc b/src/tests/test_dup_flags.cc deleted file mode 100644 index 5bd9ee18cd2..00000000000 --- a/src/tests/test_dup_flags.cc +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */ -// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4: -#ident "$Id$" -#ident "Copyright (c) 2007 Tokutek Inc. All rights reserved." -#include "test.h" - -#include -#include - -#include -#include -#include -#include - - -/* verify that the dup flags are written and read from the database file correctly */ -static void -test_dup_flags (uint32_t dup_flags) { - if (verbose) printf("test_dup_flags:%u\n", dup_flags); - - DB_TXN * const null_txn = 0; - const char * const fname = "test_dup_flags.ft_handle"; - int r; - - r = system("rm -rf " ENVDIR); CKERR(r); - r = toku_os_mkdir(ENVDIR, S_IRWXU+S_IRWXG+S_IRWXO); CKERR(r); - - /* create the dup database file */ - DB_ENV *env; - r = db_env_create(&env, 0); assert(r == 0); - r = env->open(env, ENVDIR, DB_CREATE+DB_PRIVATE+DB_INIT_MPOOL, 0); assert(r == 0); - - DB *db; - r = db_create(&db, env, 0); assert(r == 0); - if (IS_TDB) assert(dup_flags==0); - r = db->set_flags(db, dup_flags); - assert(r == 0); - uint32_t flags; r = db->get_flags(db, &flags); assert(r == 0); assert(flags == dup_flags); - if (IS_TDB) assert(dup_flags==0); - r = db->open(db, null_txn, fname, "main", DB_BTREE, DB_CREATE, 0666); - assert(r == 0); - r = db->close(db, 0); assert(r == 0); - - /* verify dup flags match */ - r = db_create(&db, env, 0); assert(r == 0); - r = db->open(db, null_txn, fname, "main", DB_BTREE, 0, 0666); - if (r == 0 && verbose) - printf("%s:%d: WARNING:open ok:dup_mode:%u\n", __FILE__, __LINE__, dup_flags); - r = db->close(db, 0); assert(r == 0); - - r = db_create(&db, env, 0); assert(r == 0); - r = db->set_flags(db, dup_flags); assert(r == 0); - r = db->open(db, null_txn, fname, "main", DB_BTREE, 0, 0666); assert(r == 0); - r = db->close(db, 0); assert(r == 0); - - /* verify nodesize match */ - r = db_create(&db, env, 0); assert(r == 0); - r = db->set_flags(db, dup_flags); assert(r == 0); - r = db->set_pagesize(db, 4096); assert(r == 0); - r = db->open(db, null_txn, fname, "main", DB_BTREE, 0, 0666); assert(r == 0); - r = db->close(db, 0); assert(r == 0); - r = env->close(env, 0); assert(r == 0); -} - -int -test_main(int argc, char *const argv[]) { - - parse_args(argc, argv); - - int r; - r = system("rm -rf " ENVDIR); - CKERR(r); - toku_os_mkdir(ENVDIR, S_IRWXU+S_IRWXG+S_IRWXO); - - /* test flags */ - test_dup_flags(0); - - return 0; -}