From 6a8424b671d7be40f67950c6014f62a0396bfcfe Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Fri, 18 Mar 2022 09:07:52 +0000 Subject: [PATCH] more TDB --- source/libs/tdb/src/page/tdbPage.c | 11 ++++----- source/libs/tdb/src/page/tdbPage.h | 38 ++++++++++++++--------------- source/libs/tdb/src/page/tdbPageL.c | 27 +++++++++++--------- 3 files changed, 39 insertions(+), 37 deletions(-) diff --git a/source/libs/tdb/src/page/tdbPage.c b/source/libs/tdb/src/page/tdbPage.c index 3b00808884..67ce1de184 100644 --- a/source/libs/tdb/src/page/tdbPage.c +++ b/source/libs/tdb/src/page/tdbPage.c @@ -49,13 +49,9 @@ int tdbPageCreate(int pageSize, SPage **ppPage, void *(*xMalloc)(void *, size_t) pPage->pData = ptr; pPage->pageSize = pageSize; if (pageSize < 65536) { - pPage->szOffset = 2; - pPage->szPageHdr = sizeof(SPageHdr); - pPage->szFreeCell = sizeof(SFreeCell); + pPage->pPageMethods = &pageMethods; } else { - pPage->szOffset = 3; - pPage->szPageHdr = sizeof(SPageHdrL); - pPage->szFreeCell = sizeof(SFreeCellL); + pPage->pPageMethods = &pageLargeMethods; } TDB_INIT_PAGE_LOCK(pPage); @@ -249,6 +245,9 @@ static inline void setPageCellOffset(SPage *pPage, int idx, int offset) { } SPageMethods pageMethods = { + 2, // szOffset + sizeof(SPageHdr), // szPageHdr + sizeof(SFreeCell), // szFreeCell getPageFlags, // getPageFlags setPageFlags, // setFlagsp getPageCellNum, // getCellNum diff --git a/source/libs/tdb/src/page/tdbPage.h b/source/libs/tdb/src/page/tdbPage.h index 3b9174e45d..fe5b65827a 100644 --- a/source/libs/tdb/src/page/tdbPage.h +++ b/source/libs/tdb/src/page/tdbPage.h @@ -24,6 +24,9 @@ typedef u8 SCell; // PAGE APIS implemented typedef struct { + int szOffset; + int szPageHdr; + int szFreeCell; // flags u16 (*getFlags)(SPage *); void (*setFlags)(SPage *, u16); @@ -56,26 +59,23 @@ struct SPage { pthread_spinlock_t lock; u8 *pData; int pageSize; - u8 szOffset; - u8 szPageHdr; - u8 szFreeCell; + SPageMethods *pPageMethods; // Fields below used by pager and am - u8 szAmHdr; - u8 *pPageHdr; - u8 *pAmHdr; - u8 *pCellIdx; - u8 *pFreeStart; - u8 *pFreeEnd; - SPageFtr *pPageFtr; - int kLen; // key length of the page, -1 for unknown - int vLen; // value length of the page, -1 for unknown - int nFree; - int maxLocal; - int minLocal; - int nOverflow; - SCell *apOvfl[4]; - int aiOvfl[4]; - SPageMethods *pPageMethods; + u8 szAmHdr; + u8 *pPageHdr; + u8 *pAmHdr; + u8 *pCellIdx; + u8 *pFreeStart; + u8 *pFreeEnd; + SPageFtr *pPageFtr; + int kLen; // key length of the page, -1 for unknown + int vLen; // value length of the page, -1 for unknown + int nFree; + int maxLocal; + int minLocal; + int nOverflow; + SCell *apOvfl[4]; + int aiOvfl[4]; // Fields used by SPCache TDB_PCACHE_PAGE }; diff --git a/source/libs/tdb/src/page/tdbPageL.c b/source/libs/tdb/src/page/tdbPageL.c index 8e50903fff..e7c60118d2 100644 --- a/source/libs/tdb/src/page/tdbPageL.c +++ b/source/libs/tdb/src/page/tdbPageL.c @@ -67,16 +67,19 @@ static inline void setPageCellOffset(SPage *pPage, int idx, int offset) { } SPageMethods pageLargeMethods = { - getPageFlags, // getPageFlags - setPageFlags, // setFlagsp - getPageCellNum, // getCellNum - setPageCellNum, // setCellNum - getPageCellBody, // getCellBody - setPageCellBody, // setCellBody - getPageCellFree, // getCellFree - setPageCellFree, // setCellFree - getPageNFree, // getFreeBytes - setPageNFree, // setFreeBytes - getPageCellOffset, // getCellOffset - setPageCellOffset // setCellOffset + 3, // szOffset + sizeof(SPageHdrL), // szPageHdr + sizeof(SFreeCellL), // szFreeCell + getPageFlags, // getPageFlags + setPageFlags, // setFlagsp + getPageCellNum, // getCellNum + setPageCellNum, // setCellNum + getPageCellBody, // getCellBody + setPageCellBody, // setCellBody + getPageCellFree, // getCellFree + setPageCellFree, // setCellFree + getPageNFree, // getFreeBytes + setPageNFree, // setFreeBytes + getPageCellOffset, // getCellOffset + setPageCellOffset // setCellOffset }; \ No newline at end of file