Open
Description
The definition of INTERNAL_PAGE_SIZE in BPlusTreeInternalPage is correct, but passing INTERNAL_PAGE_SIZE directly in b_plus_tree.h is incorrect because ValueType in BPlusTree is not the same as the ValueType corresponding to BPlusTreeInternalPage. Therefore, the macro definition of INTERNAL_PAGE_SIZE here leads to incorrect calculation results, which can cause wasted space in internal nodes.
The macro definition of INTERNAL_PAGE_SIZE in b_plus_internal_tree.h.
#define INTERNAL_PAGE_SIZE ((BUSTUB_PAGE_SIZE - INTERNAL_PAGE_HEADER_SIZE) / (sizeof(MappingType)))
INTERNAL_PAGE_SIZE is used in b_plus_tree.h
explicit BPlusTree(std::string name, page_id_t header_page_id, BufferPoolManager *buffer_pool_manager,
const KeyComparator &comparator, int leaf_max_size = LEAF_PAGE_SIZE,
int internal_max_size = INTERNAL_PAGE_SIZE);
Since the ValueType of MappingType in b_plus_tree.h is RID, which is incorrect for InternalPage, the INTERNAL_PAGE_SIZE will be miscalculated.
Metadata
Metadata
Assignees
Labels
No labels