From 4ecbe41d134bef9e69d93458b83fb4d04a9efe7a Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Wed, 30 Mar 2022 11:07:58 +0000 Subject: [PATCH] adjust some code --- source/libs/tdb/src/db/tdbBtree.c | 2 +- source/libs/tdb/src/db/tdbEnv.c | 25 ++++++++++++++++++++++--- source/libs/tdb/src/db/tdbPager.c | 16 ---------------- source/libs/tdb/src/inc/tdbEnv.h | 5 +++++ source/libs/tdb/src/inc/tdbPager.h | 15 ++++++++++++++- 5 files changed, 42 insertions(+), 21 deletions(-) diff --git a/source/libs/tdb/src/db/tdbBtree.c b/source/libs/tdb/src/db/tdbBtree.c index ef9b03df6c..f7e0d7181a 100644 --- a/source/libs/tdb/src/db/tdbBtree.c +++ b/source/libs/tdb/src/db/tdbBtree.c @@ -101,7 +101,7 @@ int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, FKeyComparator kcmpr, S // pBt->kcmpr pBt->kcmpr = kcmpr ? kcmpr : tdbDefaultKeyCmprFn; // pBt->pageSize - pBt->pageSize = tdbPagerGetPageSize(pPager); + pBt->pageSize = pPager->pageSize; // pBt->maxLocal pBt->maxLocal = tdbPageCapacity(pBt->pageSize, sizeof(SIntHdr)) / 4; // pBt->minLocal: Should not be allowed smaller than 15, which is [nPayload][nKey][nData] diff --git a/source/libs/tdb/src/db/tdbEnv.c b/source/libs/tdb/src/db/tdbEnv.c index 5a5c281ed1..a981e8c99e 100644 --- a/source/libs/tdb/src/db/tdbEnv.c +++ b/source/libs/tdb/src/db/tdbEnv.c @@ -19,6 +19,7 @@ int tdbEnvOpen(const char *rootDir, int pageSize, int cacheSize, TENV **ppEnv) { TENV *pEnv; int dsize; int zsize; + int tsize; u8 *pPtr; int ret; @@ -53,6 +54,14 @@ int tdbEnvOpen(const char *rootDir, int pageSize, int cacheSize, TENV **ppEnv) { return -1; } + pEnv->nHash = 8; + tsize = sizeof(SPager *) * pEnv->nHash; + pEnv->pagerHash = TDB_REALLOC(pEnv->pagerHash, tsize); + if (pEnv->pagerHash == NULL) { + return -1; + } + memset(pEnv->pagerHash, 0, tsize); + mkdir(rootDir, 0755); *ppEnv = pEnv; @@ -65,21 +74,31 @@ int tdbEnvClose(TENV *pEnv) { } int tdbBegin(TENV *pEnv) { - // TODO + ASSERT(0); return 0; } int tdbCommit(TENV *pEnv) { - // TODO + SPager *pPager; + + pPager = pEnv->pagerList; + while (pPager) { + tdbPagerCommit(pPager); + } + return 0; } int tdbRollback(TENV *pEnv) { - // TODO + ASSERT(0); return 0; } SPager *tdbEnvGetPager(TENV *pEnv, const char *fname) { // TODO return NULL; +} + +static void tdbEnvAddPager(TENV *pEnv, SPager *pPager) { + } \ No newline at end of file diff --git a/source/libs/tdb/src/db/tdbPager.c b/source/libs/tdb/src/db/tdbPager.c index b00bba2f66..818b8a371a 100644 --- a/source/libs/tdb/src/db/tdbPager.c +++ b/source/libs/tdb/src/db/tdbPager.c @@ -15,20 +15,6 @@ #include "tdbInt.h" -struct SPager { - char *dbFileName; - char *jFileName; - int pageSize; - uint8_t fid[TDB_FILE_ID_LEN]; - tdb_fd_t fd; - tdb_fd_t jfd; - SPCache *pCache; - SPgno dbFileSize; - SPgno dbOrigSize; - SPage *pDirty; - u8 inTran; -}; - typedef struct __attribute__((__packed__)) { u8 hdrString[16]; u16 pageSize; @@ -229,8 +215,6 @@ static int tdbPagerReadPage(SPager *pPager, SPage *pPage) { return 0; } -int tdbPagerGetPageSize(SPager *pPager) { return pPager->pageSize; } - int tdbPagerFetchPage(SPager *pPager, SPgno pgno, SPage **ppPage, int (*initPage)(SPage *, void *), void *arg) { SPage *pPage; SPgid pgid; diff --git a/source/libs/tdb/src/inc/tdbEnv.h b/source/libs/tdb/src/inc/tdbEnv.h index 693be86cd8..3eb3ebb328 100644 --- a/source/libs/tdb/src/inc/tdbEnv.h +++ b/source/libs/tdb/src/inc/tdbEnv.h @@ -20,11 +20,16 @@ extern "C" { #endif +#define TDB_PAGER_ENV_FIELDS \ + SPager *pNext; \ + SPager *pHashNext; + typedef struct STEnv { char *rootDir; char *jfname; int jfd; SPCache *pCache; + SPager *pagerList; int nHash; SPager **pagerHash; } TENV; diff --git a/source/libs/tdb/src/inc/tdbPager.h b/source/libs/tdb/src/inc/tdbPager.h index f4cc822f27..7ae86eb3ac 100644 --- a/source/libs/tdb/src/inc/tdbPager.h +++ b/source/libs/tdb/src/inc/tdbPager.h @@ -20,13 +20,26 @@ extern "C" { #endif +struct SPager { + char *dbFileName; + char *jFileName; + int pageSize; + uint8_t fid[TDB_FILE_ID_LEN]; + tdb_fd_t fd; + tdb_fd_t jfd; + SPCache *pCache; + SPgno dbFileSize; + SPgno dbOrigSize; + SPage *pDirty; + u8 inTran; +}; + int tdbPagerOpen(SPCache *pCache, const char *fileName, SPager **ppPager); int tdbPagerClose(SPager *pPager); int tdbPagerOpenDB(SPager *pPager, SPgno *ppgno, bool toCreate); int tdbPagerWrite(SPager *pPager, SPage *pPage); int tdbPagerBegin(SPager *pPager); int tdbPagerCommit(SPager *pPager); -int tdbPagerGetPageSize(SPager *pPager); int tdbPagerFetchPage(SPager *pPager, SPgno pgno, SPage **ppPage, int (*initPage)(SPage *, void *), void *arg); int tdbPagerNewPage(SPager *pPager, SPgno *ppgno, SPage **ppPage, int (*initPage)(SPage *, void *), void *arg); void tdbPagerReturnPage(SPager *pPager, SPage *pPage);