#include "includes.h" #include "test.h" static void flush (CACHEFILE f __attribute__((__unused__)), int UU(fd), CACHEKEY k __attribute__((__unused__)), void *v __attribute__((__unused__)), void *e __attribute__((__unused__)), long s __attribute__((__unused__)), BOOL w __attribute__((__unused__)), BOOL keep __attribute__((__unused__)), BOOL f_ckpt __attribute__((__unused__)) ) { /* Do nothing */ } static int fetch (CACHEFILE f __attribute__((__unused__)), int UU(fd), CACHEKEY k __attribute__((__unused__)), u_int32_t fullhash __attribute__((__unused__)), void **value __attribute__((__unused__)), long *sizep __attribute__((__unused__)), void *extraargs __attribute__((__unused__)) ) { return 0; } // test simple unpin and remove static void cachetable_unpin_and_remove_test (int n) { if (verbose) printf("%s %d\n", __FUNCTION__, n); const int table_limit = 2*n; int r; int i; CACHETABLE ct; r = toku_create_cachetable(&ct, table_limit, ZERO_LSN, NULL_LOGGER); assert(r == 0); char fname1[] = __FILE__ "test1.dat"; unlink(fname1); CACHEFILE f1; r = toku_cachetable_openf(&f1, ct, fname1, O_RDWR|O_CREAT, 0777); assert(r == 0); // generate some random keys CACHEKEY keys[n]; int nkeys = n; for (i=0; i 0) { i = random() % nkeys; u_int32_t hi = toku_cachetable_hash(f1, make_blocknum(testkeys[i].b)); r = toku_cachetable_unpin_and_remove(f1, testkeys[i]); assert(r == 0); toku_cachefile_verify(f1); // verify that k is removed void *v; r = toku_cachetable_maybe_get_and_pin(f1, make_blocknum(testkeys[i].b), hi, &v); assert(r != 0); testkeys[i] = testkeys[nkeys-1]; nkeys -= 1; } // verify that all are really removed for (i=0; i