END_C_DECLS void dataPage::register_stasis_page_impl() { static page_impl pi = { DATA_PAGE, 1, 0, //slottedRead, 0, //slottedWrite, 0,// readDone 0,// writeDone 0,//slottedGetType, 0,//slottedSetType, 0,//slottedGetLength, 0,//slottedFirst, 0,//slottedNext, 0,//slottedLast, notSupported, // is block supported stasis_block_first_default_impl, stasis_block_next_default_impl, stasis_block_done_default_impl, 0,//slottedFreespace, 0,//slottedCompact, 0,//slottedCompactSlotIDs, 0,//slottedPreRalloc, 0,//slottedPostRalloc, 0,//slottedSpliceSlot, 0,//slottedFree, 0,//XXX page_impl_dereference_identity, dataPageLoaded, //dataPageLoaded, dataPageFlushed, //dataPageFlushed, 0,//slottedCleanup }; stasis_page_impl_register(pi); }
/** * initializes all the important variables needed in * all the functions dealing with pages. */ void stasis_page_init(stasis_dirty_page_table_t * dpt) { dirtyPages = dpt; stasis_page_slotted_init(); stasis_page_fixed_init(); stasis_page_impl_register(stasis_page_uninitialized_impl()); stasis_page_impl_register(stasis_page_slotted_impl()); stasis_page_impl_register(stasis_page_fixed_impl()); stasis_page_impl_register(stasis_page_boundary_tag_impl()); stasis_page_impl_register(stasis_page_array_list_impl()); stasis_page_impl_register(stasis_page_blob_impl()); stasis_page_impl_register(slottedLsnFreeImpl()); stasis_page_impl_register(segmentImpl()); stasis_page_impl_register(stasis_page_slotted_latch_free_impl()); }
void insertProbeIter(lsmkey_t NUM_ENTRIES) { int intcmp = 0; lsmTreeRegisterComparator(intcmp,cmp); TlsmRegionAllocConf_t alloc_conf = LSM_REGION_ALLOC_STATIC_INITIALIZER; stasis_page_impl_register(lsmRootImpl()); Tinit(); int xid = Tbegin(); recordid tree = TlsmCreate(xid, intcmp, TlsmRegionAlloc, &alloc_conf, sizeof(lsmkey_t)); long oldpagenum = -1; for(lsmkey_t i = 0; i < NUM_ENTRIES; i++) { long pagenum = TlsmFindPage(xid, tree, (byte*)&i); assert(pagenum == -1 || pagenum == oldpagenum || oldpagenum == -1); DEBUG("TlsmAppendPage %d\n",i); TlsmAppendPage(xid, tree, (const byte*)&i, TlsmRegionAlloc, &alloc_conf, i + OFFSET); pagenum = TlsmFindPage(xid, tree, (byte*)&i); oldpagenum = pagenum; assert(pagenum == i + OFFSET); } for(lsmkey_t i = 0; i < NUM_ENTRIES; i++) { long pagenum = TlsmFindPage(xid, tree, (byte*)&i); assert(pagenum == i + OFFSET); } int64_t count = 0; lladdIterator_t * it = lsmTreeIterator_open(xid, tree); while(lsmTreeIterator_next(xid, it)) { lsmkey_t * key; lsmkey_t **key_ptr = &key; int size = lsmTreeIterator_key(xid, it, (byte**)key_ptr); assert(size == sizeof(lsmkey_t)); long *value; long **value_ptr = &value; size = lsmTreeIterator_value(xid, it, (byte**)value_ptr); assert(size == sizeof(pageid_t)); assert(*key + OFFSET == *value); assert(*key == count); count++; } assert(count == NUM_ENTRIES); lsmTreeIterator_close(xid, it); Tcommit(xid); Tdeinit(); }