From 442f01652918b38f70b574473a9fd9fa658af5c5 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 17 May 2022 12:11:03 +0000 Subject: [PATCH] tdb debug --- source/libs/tdb/src/db/tdbPCache.c | 44 +++++++++++++++++++----------- source/libs/tdb/src/inc/tdbInt.h | 15 +++++++++- source/util/src/tlog.c | 3 +- 3 files changed, 44 insertions(+), 18 deletions(-) diff --git a/source/libs/tdb/src/db/tdbPCache.c b/source/libs/tdb/src/db/tdbPCache.c index 84b8688ade..661412b567 100644 --- a/source/libs/tdb/src/db/tdbPCache.c +++ b/source/libs/tdb/src/db/tdbPCache.c @@ -15,10 +15,10 @@ #include "tdbInt.h" struct SPCache { - int pageSize; - int cacheSize; + int szPage; + int nPages; + SPage **aPage; tdb_mutex_t mutex; - SPage *pList; int nFree; SPage *pFree; int nPage; @@ -52,13 +52,14 @@ int tdbPCacheOpen(int pageSize, int cacheSize, SPCache **ppCache) { void *pPtr; SPage *pPgHdr; - pCache = (SPCache *)tdbOsCalloc(1, sizeof(*pCache)); + pCache = (SPCache *)tdbOsCalloc(1, sizeof(*pCache) + sizeof(SPage *) * cacheSize); if (pCache == NULL) { return -1; } - pCache->pageSize = pageSize; - pCache->cacheSize = cacheSize; + pCache->szPage = pageSize; + pCache->nPages = cacheSize; + pCache->aPage = (SPage **)&pCache[1]; if (tdbPCacheOpenImpl(pCache) < 0) { tdbOsFree(pCache); @@ -123,7 +124,7 @@ void tdbPCacheRelease(SPCache *pCache, SPage *pPage, TXN *pTxn) { } } -int tdbPCacheGetPageSize(SPCache *pCache) { return pCache->pageSize; } +int tdbPCacheGetPageSize(SPCache *pCache) { return pCache->szPage; } static SPage *tdbPCacheFetchImpl(SPCache *pCache, const SPgid *pPgid, TXN *pTxn) { int ret = 0; @@ -168,7 +169,7 @@ static SPage *tdbPCacheFetchImpl(SPCache *pCache, const SPgid *pPgid, TXN *pTxn) // 4. Try a create new page if (!pPage) { - ret = tdbPageCreate(pCache->pageSize, &pPage, pTxn->xMalloc, pTxn->xArg); + ret = tdbPageCreate(pCache->szPage, &pPage, pTxn->xMalloc, pTxn->xArg); if (ret < 0) { // TODO ASSERT(0); @@ -218,12 +219,15 @@ static void tdbPCachePinPage(SPCache *pCache, SPage *pPage) { pPage->pLruNext = NULL; pCache->nRecyclable--; + + tdbDebug("pin page %d", pPage->id); } } static void tdbPCacheUnpinPage(SPCache *pCache, SPage *pPage) { i32 nRef; + ASSERT(pPage->isLocal); ASSERT(!pPage->isDirty); ASSERT(TDB_GET_PAGE_REF(pPage) == 0); @@ -235,6 +239,8 @@ static void tdbPCacheUnpinPage(SPCache *pCache, SPage *pPage) { pCache->lru.pLruNext = pPage; pCache->nRecyclable++; + + tdbDebug("unpin page %d", pPage->id); } static void tdbPCacheRemovePageFromHash(SPCache *pCache, SPage *pPage) { @@ -248,6 +254,8 @@ static void tdbPCacheRemovePageFromHash(SPCache *pCache, SPage *pPage) { *ppPage = pPage->pHashNext; pCache->nPage--; + + tdbDebug("remove page %d to hash", pPage->id); } static void tdbPCacheAddPageToHash(SPCache *pCache, SPage *pPage) { @@ -259,6 +267,8 @@ static void tdbPCacheAddPageToHash(SPCache *pCache, SPage *pPage) { pCache->pgHash[h] = pPage; pCache->nPage++; + + tdbDebug("add page %d to hash", pPage->id); } static int tdbPCacheOpenImpl(SPCache *pCache) { @@ -272,8 +282,8 @@ static int tdbPCacheOpenImpl(SPCache *pCache) { // Open the free list pCache->nFree = 0; pCache->pFree = NULL; - for (int i = 0; i < pCache->cacheSize; i++) { - ret = tdbPageCreate(pCache->pageSize, &pPage, tdbDefaultMalloc, NULL); + for (int i = 0; i < pCache->nPages; i++) { + ret = tdbPageCreate(pCache->szPage, &pPage, tdbDefaultMalloc, NULL); if (ret < 0) { // TODO: handle error return -1; @@ -294,13 +304,13 @@ static int tdbPCacheOpenImpl(SPCache *pCache) { pCache->nFree++; // add to local list - pPage->pCacheNext = pCache->pList; - pCache->pList = pPage; + pPage->id = i; + pCache->aPage[i] = pPage; } // Open the hash table pCache->nPage = 0; - pCache->nHash = pCache->cacheSize < 8 ? 8 : pCache->cacheSize; + pCache->nHash = pCache->nPages < 8 ? 8 : pCache->nPages; pCache->pgHash = (SPage **)tdbOsCalloc(pCache->nHash, sizeof(SPage *)); if (pCache->pgHash == NULL) { // TODO @@ -319,9 +329,11 @@ static int tdbPCacheOpenImpl(SPCache *pCache) { static int tdbPCacheCloseImpl(SPCache *pCache) { SPage *pPage; - for (pPage = pCache->pList; pPage; pPage = pCache->pList) { - pCache->pList = pPage->pCacheNext; - tdbPageDestroy(pPage, tdbDefaultFree, NULL); + for (i32 iPage = 0; iPage < pCache->nPages; iPage++) { + if (pCache->aPage[iPage]) { + tdbPageDestroy(pPage, tdbDefaultFree, NULL); + pCache->aPage[iPage] = NULL; + } } tdbOsFree(pCache->pgHash); diff --git a/source/libs/tdb/src/inc/tdbInt.h b/source/libs/tdb/src/inc/tdbInt.h index ee431ac638..c0253909f4 100644 --- a/source/libs/tdb/src/inc/tdbInt.h +++ b/source/libs/tdb/src/inc/tdbInt.h @@ -18,10 +18,23 @@ #include "tdb.h" +#include "tlog.h" + #ifdef __cplusplus extern "C" { #endif +// clang-format off +extern int32_t tdbDebugFlag; + +#define tdbFatal(...) do { if (tdbDebugFlag & DEBUG_FATAL) { taosPrintLog("TDB FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }} while(0) +#define tdbError(...) do { if (tdbDebugFlag & DEBUG_ERROR) { taosPrintLog("TDB ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }} while(0) +#define tdbWarn(...) do { if (tdbDebugFlag & DEBUG_WARN) { taosPrintLog("TDB WARN ", DEBUG_WARN, 255, __VA_ARGS__); }} while(0) +#define tdbInfo(...) do { if (tdbDebugFlag & DEBUG_INFO) { taosPrintLog("TDB ", DEBUG_INFO, 255, __VA_ARGS__); }} while(0) +#define tdbDebug(...) do { if (tdbDebugFlag & DEBUG_DEBUG) { taosPrintLog("TDB ", DEBUG_DEBUG, tdbDebugFlag, __VA_ARGS__); }} while(0) +#define tdbTrace(...) do { if (tdbDebugFlag & DEBUG_TRACE) { taosPrintLog("TDB ", DEBUG_TRACE, tdbDebugFlag, __VA_ARGS__); }} while(0) +// clang-format on + typedef int8_t i8; typedef int16_t i16; typedef int32_t i32; @@ -166,7 +179,7 @@ int tdbPagerAllocPage(SPager *pPager, SPgno *ppgno); u8 isLocal; \ u8 isDirty; \ i32 nRef; \ - SPage *pCacheNext; \ + i32 id; \ SPage *pFreeNext; \ SPage *pHashNext; \ SPage *pLruNext; \ diff --git a/source/util/src/tlog.c b/source/util/src/tlog.c index 9970ac24d7..46403833f1 100644 --- a/source/util/src/tlog.c +++ b/source/util/src/tlog.c @@ -14,8 +14,8 @@ */ #define _DEFAULT_SOURCE -#include "os.h" #include "tlog.h" +#include "os.h" #include "tutil.h" #define LOG_MAX_LINE_SIZE (1024) @@ -90,6 +90,7 @@ int32_t qDebugFlag = 131; int32_t wDebugFlag = 135; int32_t sDebugFlag = 135; int32_t tsdbDebugFlag = 131; +int32_t tdbDebugFlag = 131; int32_t tqDebugFlag = 135; int32_t fsDebugFlag = 135; int32_t metaDebugFlag = 135; -- GitLab