void lease_state_init(void) { lease_by_root_pathname = hash_create( LEASE_HASHTABLE_SIZE, (Hashfunc) string_hash, (Cmpfunc) strcmp); dir_cache = lru_new( LEASE_DIR_CACHE_SIZE, (Hashfunc) dir_block_hash, (Cmpfunc) dir_block_cmp, NULL, (void (*)(void *)) lease_cleanup_dir_block); }
void object_state_init(void) { object_reserve_next = ~ (u64) 0; object_reserve_remaining = 0; object_reserve_wait = NULL; if (objectroot == NULL) { object_cache_status = NULL; } else { object_cache_status = lru_new( OBJECT_CACHE_STATE_SIZE, (Hashfunc) u64_hash, (Cmpfunc) u64_cmp, NULL, NULL); } }
END_TEST START_TEST(test_eviction_order) { lru_t *lru = lru_new(10, 8); fail_unless(lru != NULL); /* fill up lru and check */ FETCH(0, "aaaaaaaaaa", !CACHED); FETCH(1, "bbbbbbbbbb", !CACHED); FETCH(2, "cccccccccc", !CACHED); FETCH(3, "dddddddddd", !CACHED); FETCH(4, "eeeeeeeeee", !CACHED); FETCH(5, "ffffffffff", !CACHED); FETCH(6, "gggggggggg", !CACHED); FETCH(7, "hhhhhhhhhh", !CACHED); /* another entry evicts 0 */ FETCH(8, "iiiiiiiiii", !CACHED); FETCH(1, "bbbbbbbbbb", CACHED); FETCH(2, "cccccccccc", CACHED); FETCH(3, "dddddddddd", CACHED); FETCH(4, "eeeeeeeeee", CACHED); FETCH(5, "ffffffffff", CACHED); FETCH(6, "gggggggggg", CACHED); FETCH(7, "hhhhhhhhhh", CACHED); FETCH(8, "iiiiiiiiii", CACHED); FETCH(0, "aaaaaaaaaa", !CACHED); /* refetching does not evict */ FETCH(5, "ffffffffff", CACHED); FETCH(5, "ffffffffff", CACHED); FETCH(5, "ffffffffff", CACHED); FETCH(5, "ffffffffff", CACHED); FETCH(5, "ffffffffff", CACHED); FETCH(5, "ffffffffff", CACHED); FETCH(5, "ffffffffff", CACHED); FETCH(5, "ffffffffff", CACHED); FETCH(5, "ffffffffff", CACHED); FETCH(5, "ffffffffff", CACHED); FETCH(5, "ffffffffff", CACHED); /* and doing that didn't change 2 from being LRU */ FETCH(2, "cccccccccc", CACHED); /* but 1 was evicted */ FETCH(1, "bbbbbbbbbb", !CACHED); }