Commit 5bdc180c authored by Yoni Fogel's avatar Yoni Fogel

Addresses #2217 refs[t:2217]

Fix r16084, test now correctly shows file size reduces after many inserts and deletes

git-svn-id: file:///svn/toku/tokudb@16108 c7de825b-a66e-492c-adef-691d508d4ae1
parent 83e41731
...@@ -54,13 +54,14 @@ fill_rand(int n, uint64_t * d) { ...@@ -54,13 +54,14 @@ fill_rand(int n, uint64_t * d) {
} }
} }
#define INSERT_BIG 1500
#define INSERT_SMALL 0
static void static void
insert_n (u_int32_t ah) { insert_n (u_int32_t ah, int datasize) {
int datasize = 1500;
uint64_t vdata[datasize]; uint64_t vdata[datasize];
fill_rand(datasize, vdata); fill_rand(datasize, vdata);
u_int32_t an = htonl(ah); u_int32_t an = htonl(ah);
// printf("insert an = %0X (ah = %0X)\n", an, ah); // if (verbose) printf("insert an = %0X (ah = %0X)\n", an, ah);
DBT key = {.size = 4, .data=&an }; DBT key = {.size = 4, .data=&an };
DBT val = {.size = sizeof(vdata), .data=vdata}; DBT val = {.size = sizeof(vdata), .data=vdata};
int r = db->put(db, NULL, &key, &val, DB_YESOVERWRITE); int r = db->put(db, NULL, &key, &val, DB_YESOVERWRITE);
...@@ -72,7 +73,7 @@ static void ...@@ -72,7 +73,7 @@ static void
delete_n (u_int32_t ah) delete_n (u_int32_t ah)
{ {
u_int32_t an = htonl(ah); u_int32_t an = htonl(ah);
// printf("delete an = %0X (ah = %0X)\n", an, ah); // if (verbose) printf("delete an = %0X (ah = %0X)\n", an, ah);
DBT key = {.size = 4, .data=&an }; DBT key = {.size = 4, .data=&an };
int r = db->del(db, NULL, &key, DB_DELETE_ANY); int r = db->del(db, NULL, &key, DB_DELETE_ANY);
if (r == 0) if (r == 0)
...@@ -101,11 +102,11 @@ scan(int n) { ...@@ -101,11 +102,11 @@ scan(int n) {
r = dbc->c_get(dbc, &k, &v, DB_FIRST); r = dbc->c_get(dbc, &k, &v, DB_FIRST);
if (r==0) { if (r==0) {
nread++; nread++;
// printf("First read, r = %0X, key = %0X (size=%d)\n", r, *(uint32_t*)k.data, k.size); // if (verbose) printf("First read, r = %0X, key = %0X (size=%d)\n", r, *(uint32_t*)k.data, k.size);
} }
else if (r == DB_NOTFOUND) { else if (r == DB_NOTFOUND) {
nread_notfound++; nread_notfound++;
// printf("First read failed: %d\n", r); // if (verbose) printf("First read failed: %d\n", r);
} }
else else
nread_failed++; nread_failed++;
...@@ -113,7 +114,7 @@ scan(int n) { ...@@ -113,7 +114,7 @@ scan(int n) {
r = dbc->c_get(dbc, &k, &v, DB_NEXT); r = dbc->c_get(dbc, &k, &v, DB_NEXT);
if (r == 0) { if (r == 0) {
nread++; nread++;
// printf("read key = %0X (size=%d)\n", *(uint32_t*)k.data, k.size); // if (verbose) printf("read key = %0X (size=%d)\n", *(uint32_t*)k.data, k.size);
} }
else if (r == DB_NOTFOUND) else if (r == DB_NOTFOUND)
nread_notfound++; nread_notfound++;
...@@ -135,7 +136,7 @@ get_file_pathname(void) { ...@@ -135,7 +136,7 @@ get_file_pathname(void) {
int r = env->get_iname(env, &dname, &iname); int r = env->get_iname(env, &dname, &iname);
CKERR(r); CKERR(r);
sprintf(path, "%s/%s", ENVDIR, (char*)iname.data); sprintf(path, "%s/%s", ENVDIR, (char*)iname.data);
printf("path = %s\n", path); if (verbose) printf("path = %s\n", path);
} }
...@@ -151,7 +152,7 @@ getsizeM(void) { ...@@ -151,7 +152,7 @@ getsizeM(void) {
static void static void
test_filesize (void) test_filesize (void)
{ {
int N=1<<16; int N=1<<14;
int r, i, sizeM; int r, i, sizeM;
get_file_pathname(); get_file_pathname();
...@@ -160,13 +161,13 @@ test_filesize (void) ...@@ -160,13 +161,13 @@ test_filesize (void)
int offset = N * iter; int offset = N * iter;
for (i=0; i<N; i++) { for (i=0; i<N; i++) {
insert_n(i + offset); insert_n(i + offset, INSERT_BIG);
} }
r = env->txn_checkpoint(env, 0, 0, 0); r = env->txn_checkpoint(env, 0, 0, 0);
CKERR(r); CKERR(r);
sizeM = getsizeM(); int sizefirst = sizeM = getsizeM();
printf("Filesize after iteration %d insertion and checkpoint = %dM\n", iter, sizeM); if (verbose) printf("Filesize after iteration %d insertion and checkpoint = %dM\n", iter, sizeM);
int preserve = 2; int preserve = 2;
for (i = preserve; i<(N); i++) { // leave a little at the beginning for (i = preserve; i<(N); i++) { // leave a little at the beginning
...@@ -177,32 +178,33 @@ test_filesize (void) ...@@ -177,32 +178,33 @@ test_filesize (void)
r = env->txn_checkpoint(env, 0, 0, 0); r = env->txn_checkpoint(env, 0, 0, 0);
CKERR(r); CKERR(r);
sizeM = getsizeM(); sizeM = getsizeM();
printf("Filesize after iteration %d deletion and checkpoint 1 = %dM\n", iter, sizeM); if (verbose) printf("Filesize after iteration %d deletion and checkpoint 1 = %dM\n", iter, sizeM);
insert_n(preserve+offset + 1);
r = env->txn_checkpoint(env, 0, 0, 0);
CKERR(r);
sizeM = getsizeM();
printf("Filesize after iteration %d deletion and checkpoint 2 = %dM\n", iter, sizeM);
insert_n(preserve+offset+2); for (i=0; i<N; i++) {
insert_n(i + offset, INSERT_SMALL);
}
for (i = preserve; i<(N); i++) { // leave a little at the beginning
delete_n(i + offset);
}
scan(N);
r = env->txn_checkpoint(env, 0, 0, 0); r = env->txn_checkpoint(env, 0, 0, 0);
CKERR(r); CKERR(r);
sizeM = getsizeM(); sizeM = getsizeM();
printf("Filesize after iteration %d deletion and checkpoint 3 = %dM\n", iter, sizeM); if (verbose) printf("Filesize after iteration %d deletion and checkpoint 2 = %dM\n", iter, sizeM);
assert(sizeM < sizefirst);
printf("ninsert = %d\n", ninsert); if (verbose) printf("ninsert = %d\n", ninsert);
printf("nread = %d, nread_notfound = %d, nread_failed = %d\n", nread, nread_notfound, nread_failed); if (verbose) printf("nread = %d, nread_notfound = %d, nread_failed = %d\n", nread, nread_notfound, nread_failed);
printf("ndelete = %d, ndelete_notfound = %d, ndelete_failed = %d\n", ndelete, ndelete_notfound, ndelete_failed); if (verbose) printf("ndelete = %d, ndelete_notfound = %d, ndelete_failed = %d\n", ndelete, ndelete_notfound, ndelete_failed);
} }
} }
int test_main (int argc __attribute__((__unused__)), char *argv[] __attribute__((__unused__))) { int test_main (int argc __attribute__((__unused__)), char *argv[] __attribute__((__unused__))) {
parse_args(argc, argv); parse_args(argc, argv);
setup(); setup();
print_engine_status(env); if (verbose) print_engine_status(env);
test_filesize(); test_filesize();
print_engine_status(env); if (verbose) print_engine_status(env);
close_em(); close_em();
return 0; return 0;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment