diff options
Diffstat (limited to 'src/third_party/wiredtiger/test/csuite/wt2834_join_bloom_fix/main.c')
-rw-r--r-- | src/third_party/wiredtiger/test/csuite/wt2834_join_bloom_fix/main.c | 289 |
1 files changed, 135 insertions, 154 deletions
diff --git a/src/third_party/wiredtiger/test/csuite/wt2834_join_bloom_fix/main.c b/src/third_party/wiredtiger/test/csuite/wt2834_join_bloom_fix/main.c index 1eebcaf665c..a0641416fb8 100644 --- a/src/third_party/wiredtiger/test/csuite/wt2834_join_bloom_fix/main.c +++ b/src/third_party/wiredtiger/test/csuite/wt2834_join_bloom_fix/main.c @@ -39,172 +39,153 @@ * * Failure mode: We get results back from our join. */ -#define N_RECORDS 100000 -#define N_INSERT 1000000 +#define N_RECORDS 100000 +#define N_INSERT 1000000 void populate(TEST_OPTS *opts); int main(int argc, char *argv[]) { - TEST_OPTS *opts, _opts; - WT_CURSOR *balancecur, *flagcur, *joincur, *postcur; - WT_CURSOR *maincur; - WT_SESSION *session; - int balance, count, flag, key, key2, post, ret; - char balanceuri[256]; - char cfg[128]; - char flaguri[256]; - char joinuri[256]; - char posturi[256]; - const char *tablename; - - opts = &_opts; - memset(opts, 0, sizeof(*opts)); - testutil_check(testutil_parse_opts(argc, argv, opts)); - testutil_make_work_dir(opts->home); - testutil_progress(opts, "start"); - - testutil_check(wiredtiger_open(opts->home, NULL, - "create,cache_size=250M", &opts->conn)); - testutil_progress(opts, "wiredtiger_open"); - testutil_check( - opts->conn->open_session(opts->conn, NULL, NULL, &session)); - testutil_progress(opts, "sessions opened"); - - /* - * Note: repeated primary key 'id' as 'id2'. This makes - * it easier to dump an index and know which record we're - * looking at. - */ - testutil_check(session->create(session, opts->uri, - "key_format=i,value_format=iiii," - "columns=(id,post,balance,flag,id2)")); - - tablename = strchr(opts->uri, ':'); - testutil_assert(tablename != NULL); - tablename++; - testutil_check(__wt_snprintf( - posturi, sizeof(posturi), "index:%s:post", tablename)); - testutil_check(__wt_snprintf( - balanceuri, sizeof(balanceuri), "index:%s:balance", tablename)); - testutil_check(__wt_snprintf( - flaguri, sizeof(flaguri), "index:%s:flag", tablename)); - testutil_check(__wt_snprintf( - joinuri, sizeof(joinuri), "join:%s", opts->uri)); - - testutil_check(session->create(session, posturi, "columns=(post)")); - testutil_check(session->create(session, balanceuri, - "columns=(balance)")); - testutil_check(session->create(session, flaguri, "columns=(flag)")); - testutil_progress(opts, "setup complete"); - - /* - * Insert a single record with all items we are search for, - * this makes our logic easier. - */ - testutil_check(session->open_cursor(session, opts->uri, NULL, NULL, - &maincur)); - maincur->set_key(maincur, N_RECORDS); - maincur->set_value(maincur, 54321, 0, "", 0, N_RECORDS); - testutil_check(maincur->insert(maincur)); - testutil_check(maincur->close(maincur)); - testutil_check(session->close(session, NULL)); - - testutil_progress(opts, "populate start"); - populate(opts); - testutil_progress(opts, "populate end"); - - testutil_check(opts->conn->open_session( - opts->conn, NULL, NULL, &session)); - - testutil_check(session->open_cursor(session, - posturi, NULL, NULL, &postcur)); - testutil_check(session->open_cursor(session, - balanceuri, NULL, NULL, &balancecur)); - testutil_check(session->open_cursor(session, - flaguri, NULL, NULL, &flagcur)); - testutil_check(session->open_cursor(session, - joinuri, NULL, NULL, &joincur)); - - postcur->set_key(postcur, 54321); - testutil_check(postcur->search(postcur)); - testutil_check(session->join(session, joincur, postcur, - "compare=eq")); - - balancecur->set_key(balancecur, 0); - testutil_check(balancecur->search(balancecur)); - testutil_check(__wt_snprintf(cfg, sizeof(cfg), - "compare=lt,strategy=bloom,count=%d", N_RECORDS / 100)); - testutil_check(session->join(session, joincur, balancecur, cfg)); - - flagcur->set_key(flagcur, 0); - testutil_check(flagcur->search(flagcur)); - testutil_check(__wt_snprintf(cfg, sizeof(cfg), - "compare=eq,strategy=bloom,count=%d", N_RECORDS / 100)); - testutil_check(session->join(session, joincur, flagcur, cfg)); - - /* Expect no values returned */ - count = 0; - while ((ret = joincur->next(joincur)) == 0) { - /* - * The values may already have been changed, but - * print them for informational purposes. - */ - testutil_check(joincur->get_key(joincur, &key)); - testutil_check(joincur->get_value(joincur, &post, - &balance, &flag, &key2)); - fprintf(stderr, "FAIL: " - "key=%d/%d, postal_code=%d, balance=%d, flag=%d\n", - key, key2, post, balance, flag); - count++; - } - testutil_assert(ret == WT_NOTFOUND); - testutil_assert(count == 0); - - testutil_progress(opts, "cleanup starting"); + TEST_OPTS *opts, _opts; + WT_CURSOR *balancecur, *flagcur, *joincur, *postcur; + WT_CURSOR *maincur; + WT_SESSION *session; + int balance, count, flag, key, key2, post, ret; + char balanceuri[256]; + char cfg[128]; + char flaguri[256]; + char joinuri[256]; + char posturi[256]; + const char *tablename; + + opts = &_opts; + memset(opts, 0, sizeof(*opts)); + testutil_check(testutil_parse_opts(argc, argv, opts)); + testutil_make_work_dir(opts->home); + testutil_progress(opts, "start"); + + testutil_check(wiredtiger_open(opts->home, NULL, "create,cache_size=250M", &opts->conn)); + testutil_progress(opts, "wiredtiger_open"); + testutil_check(opts->conn->open_session(opts->conn, NULL, NULL, &session)); + testutil_progress(opts, "sessions opened"); + + /* + * Note: repeated primary key 'id' as 'id2'. This makes it easier to dump an index and know + * which record we're looking at. + */ + testutil_check(session->create(session, opts->uri, + "key_format=i,value_format=iiii," + "columns=(id,post,balance,flag,id2)")); + + tablename = strchr(opts->uri, ':'); + testutil_assert(tablename != NULL); + tablename++; + testutil_check(__wt_snprintf(posturi, sizeof(posturi), "index:%s:post", tablename)); + testutil_check(__wt_snprintf(balanceuri, sizeof(balanceuri), "index:%s:balance", tablename)); + testutil_check(__wt_snprintf(flaguri, sizeof(flaguri), "index:%s:flag", tablename)); + testutil_check(__wt_snprintf(joinuri, sizeof(joinuri), "join:%s", opts->uri)); + + testutil_check(session->create(session, posturi, "columns=(post)")); + testutil_check(session->create(session, balanceuri, "columns=(balance)")); + testutil_check(session->create(session, flaguri, "columns=(flag)")); + testutil_progress(opts, "setup complete"); + + /* + * Insert a single record with all items we are search for, this makes our logic easier. + */ + testutil_check(session->open_cursor(session, opts->uri, NULL, NULL, &maincur)); + maincur->set_key(maincur, N_RECORDS); + maincur->set_value(maincur, 54321, 0, "", 0, N_RECORDS); + testutil_check(maincur->insert(maincur)); + testutil_check(maincur->close(maincur)); + testutil_check(session->close(session, NULL)); + + testutil_progress(opts, "populate start"); + populate(opts); + testutil_progress(opts, "populate end"); + + testutil_check(opts->conn->open_session(opts->conn, NULL, NULL, &session)); + + testutil_check(session->open_cursor(session, posturi, NULL, NULL, &postcur)); + testutil_check(session->open_cursor(session, balanceuri, NULL, NULL, &balancecur)); + testutil_check(session->open_cursor(session, flaguri, NULL, NULL, &flagcur)); + testutil_check(session->open_cursor(session, joinuri, NULL, NULL, &joincur)); + + postcur->set_key(postcur, 54321); + testutil_check(postcur->search(postcur)); + testutil_check(session->join(session, joincur, postcur, "compare=eq")); + + balancecur->set_key(balancecur, 0); + testutil_check(balancecur->search(balancecur)); + testutil_check( + __wt_snprintf(cfg, sizeof(cfg), "compare=lt,strategy=bloom,count=%d", N_RECORDS / 100)); + testutil_check(session->join(session, joincur, balancecur, cfg)); + + flagcur->set_key(flagcur, 0); + testutil_check(flagcur->search(flagcur)); + testutil_check( + __wt_snprintf(cfg, sizeof(cfg), "compare=eq,strategy=bloom,count=%d", N_RECORDS / 100)); + testutil_check(session->join(session, joincur, flagcur, cfg)); + + /* Expect no values returned */ + count = 0; + while ((ret = joincur->next(joincur)) == 0) { + /* + * The values may already have been changed, but print them for informational purposes. + */ + testutil_check(joincur->get_key(joincur, &key)); + testutil_check(joincur->get_value(joincur, &post, &balance, &flag, &key2)); + fprintf(stderr, + "FAIL: " + "key=%d/%d, postal_code=%d, balance=%d, flag=%d\n", + key, key2, post, balance, flag); + count++; + } + testutil_assert(ret == WT_NOTFOUND); + testutil_assert(count == 0); + + testutil_progress(opts, "cleanup starting"); #if 0 testutil_cleanup(opts); #endif - return (EXIT_SUCCESS); + return (EXIT_SUCCESS); } void populate(TEST_OPTS *opts) { - WT_CURSOR *maincur; - WT_RAND_STATE rnd; - WT_SESSION *session; - uint32_t key; - int balance, i, flag, post; - - __wt_random_init_seed(NULL, &rnd); - - testutil_check(opts->conn->open_session( - opts->conn, NULL, NULL, &session)); - - testutil_check(session->open_cursor(session, opts->uri, NULL, NULL, - &maincur)); - - for (i = 0; i < N_INSERT; i++) { - testutil_check(session->begin_transaction(session, NULL)); - key = (__wt_random(&rnd) % (N_RECORDS)); - maincur->set_key(maincur, key); - if (__wt_random(&rnd) % 11 == 0) - post = 54321; - else - post = i % 100000; - if (__wt_random(&rnd) % 4 == 0) { - balance = -100; - flag = 1; - } else { - balance = 100 * (i + 1); - flag = 0; - } - maincur->set_value(maincur, post, balance, flag, key); - testutil_check(maincur->insert(maincur)); - testutil_check(session->commit_transaction(session, NULL)); - } - testutil_check(maincur->close(maincur)); - testutil_check(session->close(session, NULL)); + WT_CURSOR *maincur; + WT_RAND_STATE rnd; + WT_SESSION *session; + uint32_t key; + int balance, i, flag, post; + + __wt_random_init_seed(NULL, &rnd); + + testutil_check(opts->conn->open_session(opts->conn, NULL, NULL, &session)); + + testutil_check(session->open_cursor(session, opts->uri, NULL, NULL, &maincur)); + + for (i = 0; i < N_INSERT; i++) { + testutil_check(session->begin_transaction(session, NULL)); + key = (__wt_random(&rnd) % (N_RECORDS)); + maincur->set_key(maincur, key); + if (__wt_random(&rnd) % 11 == 0) + post = 54321; + else + post = i % 100000; + if (__wt_random(&rnd) % 4 == 0) { + balance = -100; + flag = 1; + } else { + balance = 100 * (i + 1); + flag = 0; + } + maincur->set_value(maincur, post, balance, flag, key); + testutil_check(maincur->insert(maincur)); + testutil_check(session->commit_transaction(session, NULL)); + } + testutil_check(maincur->close(maincur)); + testutil_check(session->close(session, NULL)); } |