From 8ba797fae16c685b5cdff3923eee99659b4d0ffc Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Wed, 17 Apr 2013 00:00:01 -0400 Subject: [PATCH] #4305 remove this test from the mainline and move it to 4306 refs[t:4305] git-svn-id: file:///svn/toku/tokudb@38045 c7de825b-a66e-492c-adef-691d508d4ae1 --- src/tests/Makefile | 1 - src/tests/keyrange-merge.c | 197 ------------------------------------- 2 files changed, 198 deletions(-) delete mode 100644 src/tests/keyrange-merge.c diff --git a/src/tests/Makefile b/src/tests/Makefile index 64cf81f0ae..4564ec7fe1 100644 --- a/src/tests/Makefile +++ b/src/tests/Makefile @@ -139,7 +139,6 @@ BDB_DONTRUN_TESTS = \ isolation \ isolation-read-committed \ keyrange \ - keyrange-merge \ last-verify-time \ loader-cleanup-test \ loader-create-abort \ diff --git a/src/tests/keyrange-merge.c b/src/tests/keyrange-merge.c deleted file mode 100644 index 06950b6e4f..0000000000 --- a/src/tests/keyrange-merge.c +++ /dev/null @@ -1,197 +0,0 @@ -/* -*- mode: C; c-basic-offset: 4 -*- */ -#ident "Copyright (c) 2007-2011 Tokutek Inc. All rights reserved." -#include "test.h" - -// verify that key_range64 returns reasonable results after leaf merges - -// create a tree with 2 child nodes and large rows -// replace the rows in the left leaf with small rows. -// this should cause a leaf node merge. -// verify stats after the merge. - -#include <db.h> -#include <unistd.h> -#include <sys/stat.h> - -static DB_ENV *env = NULL; -static DB_TXN *txn = NULL; -static DB *db = NULL; -static u_int32_t db_page_size = 4096; -static u_int32_t db_basement_size = 4096; -static char *envdir = ENVDIR; -static u_int64_t nrows = 0; - -static u_int64_t -max64(u_int64_t a, u_int64_t b) { - return a < b ? b : a; -} - -static void -run_test(void) { - if (verbose) printf("%s %" PRIu64 "\n", __FUNCTION__, nrows); - - // create a tree with 2 children - size_t key_size = 9; - size_t val_size = db_basement_size / 4; - size_t est_row_size_with_overhead = 8 + key_size + 4 + val_size + 4; // xid + key + key_len + val + val)len - size_t rows_per_basement = db_basement_size / est_row_size_with_overhead; - - if (nrows == 0) - nrows = 2 * (db_page_size / est_row_size_with_overhead); - - int r; - r = db_env_create(&env, 0); CKERR(r); - env->set_errfile(env, stderr); - r = env->set_redzone(env, 0); CKERR(r); - r = env->open(env, envdir, DB_INIT_LOCK|DB_INIT_LOG|DB_INIT_MPOOL|DB_INIT_TXN|DB_CREATE|DB_PRIVATE, S_IRWXU+S_IRWXG+S_IRWXO); CKERR(r); - - r = db_create(&db, env, 0); CKERR(r); - r = db->set_pagesize(db, db_page_size); - r = env->txn_begin(env, 0, &txn, 0); CKERR(r); - r = db->open(db, txn, "foo.db", 0, DB_BTREE, DB_CREATE, S_IRWXU+S_IRWXG+S_IRWXO); CKERR(r); - r = txn->commit(txn, 0); CKERR(r); - - // insert keys 1, 3, 5, ... 2*(nrows-1) + 1 - r = env->txn_begin(env, 0, &txn, 0); CKERR(r); - for (u_int64_t i=0; i<nrows; i++) { - char key[100]; - snprintf(key, sizeof key, "%08llu", (unsigned long long)2*i+1); - char val[val_size]; - memset(val, 0, val_size); - DBT k = { .data = key, .size = key_size }; - DBT v = { .data = val, .size = val_size }; - r = db->put(db, txn, &k, &v, 0); CKERR(r); - } - - DB_BTREE_STAT64 s64; - r = db->stat64(db, txn, &s64); CKERR(r); - if (verbose) - printf("stats %" PRId64 " %" PRId64 "\n", s64.bt_nkeys, s64.bt_dsize); - assert(0 < s64.bt_nkeys && s64.bt_nkeys <= nrows); - assert(0 < s64.bt_dsize && s64.bt_dsize <= nrows * (key_size + val_size)); - - r = txn->commit(txn, 0); CKERR(r); - - // lose the seqinsert bit by flushing the tree from the cache table - r = db->close(db, 0); CKERR(r); - r = db_create(&db, env, 0); CKERR(r); - r = env->txn_begin(env, 0, &txn, 0); CKERR(r); - r = db->open(db, txn, "foo.db", 0, DB_BTREE, 0, S_IRWXU+S_IRWXG+S_IRWXO); CKERR(r); - r = txn->commit(txn, 0); CKERR(r); - - // replace the rows with small values. this should shrink the leaf node and induce merging. - // do this until a leaf node merge occurs. - int t; - for (t = 0; t<100; t++) { - r = env->txn_begin(env, 0, &txn, 0); CKERR(r); - // replace in reverse order to disable the sequential insertion code - for (u_int64_t i=nrows; i>0; i--) { - char key[100]; - snprintf(key, sizeof key, "%08llu", (unsigned long long)2*(i-1)+1); - assert(1+strlen(key) == key_size); - DBT k = { .data = key, .size = 1+strlen(key), }; - DBT v = { .data = NULL, .size = 0, }; - r = db->put(db, txn, &k, &v, 0); CKERR(r); - } - r = txn->commit(txn, 0); CKERR(r); - ENGINE_STATUS es; - r = env->get_engine_status(env, &es, NULL, 0); - CKERR(r); - if (es.merge_leaf > 0) { - if (verbose) printf("t=%d\n", t); - break; - } - } - assert(t < 100); // if this asserts, then no leaf merge occurred - - // verify key_range for keys that exist in the tree - r = env->txn_begin(env, 0, &txn, 0); CKERR(r); - for (u_int64_t i=0; i<nrows; i++) { - char key[100]; - snprintf(key, 100, "%08llu", (unsigned long long)2*i+1); - DBT k; - u_int64_t less,equal,greater; - int is_exact; - r = db->key_range64(db, txn, dbt_init(&k, key, 1+strlen(key)), &less, &equal, &greater, &is_exact); CKERR(r); - if (verbose) - printf("key %llu/%llu %llu %llu %llu %llu\n", (unsigned long long)2*i, (unsigned long long)2*nrows, (unsigned long long)less, (unsigned long long)equal, (unsigned long long)greater, - (unsigned long long)(less+equal+greater)); - assert(is_exact == 0); - assert(0 < less + equal + greater); - assert(less + equal + greater < 2*nrows); - assert(equal == 1); - u_int64_t est_i = max64(i, i + rows_per_basement/2); - assert(less <= est_i + est_i / 1); - assert(greater <= nrows - i + rows_per_basement/2); - } - r = txn->commit(txn, 0); CKERR(r); - - // verify key range for keys that do not exist in the tree - r = env->txn_begin(env, 0, &txn, 0); CKERR(r); - for (u_int64_t i=0; i<1+nrows; i++) { - char key[100]; - snprintf(key, 100, "%08llu", (unsigned long long)2*i); - DBT k; - u_int64_t less,equal,greater; - int is_exact; - r = db->key_range64(db, txn, dbt_init(&k, key, 1+strlen(key)), &less, &equal, &greater, &is_exact); CKERR(r); - if (verbose) - printf("key %llu/%llu %llu %llu %llu %llu\n", (unsigned long long)2*i, (unsigned long long)2*nrows, (unsigned long long)less, (unsigned long long)equal, (unsigned long long)greater, - (unsigned long long)(less+equal+greater)); - assert(is_exact == 0); - assert(0 < less + equal + greater); - assert(less + equal + greater < 2*nrows); - assert(equal == 0); - u_int64_t est_i = max64(i, i + rows_per_basement/2); - assert(less <= est_i + est_i / 1); - assert(greater <= nrows - i + rows_per_basement/2); - } - r = txn->commit(txn, 0); CKERR(r); - - r = db->close(db, 0); CKERR(r); - r = env->close(env, 0); CKERR(r); -} - -static int -usage(void) { - fprintf(stderr, "-v (verbose)\n"); - fprintf(stderr, "-q (quiet)\n"); - fprintf(stderr, "--envdir %s\n", envdir); - fprintf(stderr, "--nrows %" PRIu64 " (number of rows)\n", nrows); - fprintf(stderr, "--nrows %" PRIu64 " (number of rows)\n", nrows); - return 1; -} - -int -test_main (int argc , char * const argv[]) { - for (int i = 1 ; i < argc; i++) { - if (strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "--verbose") == 0) { - verbose++; - continue; - } - if (strcmp(argv[i], "-q") == 0) { - if (verbose > 0) - verbose--; - continue; - } - if (strcmp(argv[i], "--envdir") == 0 && i+1 < argc) { - envdir = argv[++i]; - continue; - } - if (strcmp(argv[i], "--nrows") == 0 && i+1 < argc) { - nrows = atoll(argv[++i]); - continue; - } - return usage(); - } - - char rmcmd[32 + strlen(envdir)]; - snprintf(rmcmd, sizeof rmcmd, "rm -rf %s", envdir); - int r; - r = system(rmcmd); CKERR(r); - r = toku_os_mkdir(envdir, S_IRWXU+S_IRWXG+S_IRWXO); CKERR(r); - - run_test(); - - return 0; -} -- 2.30.9