From 88a2c373b35aa849c8c552df4a6add0aa08fd5df Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Thu, 30 May 2024 10:22:26 +0800 Subject: [PATCH 1/2] more fix --- source/dnode/vnode/src/tsdb/tsdbCommit2.c | 80 ++++++++--------------- 1 file changed, 29 insertions(+), 51 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbCommit2.c b/source/dnode/vnode/src/tsdb/tsdbCommit2.c index f6082e60e3..551d4c62b2 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCommit2.c +++ b/source/dnode/vnode/src/tsdb/tsdbCommit2.c @@ -18,7 +18,6 @@ // extern dependencies typedef struct { int32_t fid; - bool hasDataToCommit; STFileSet *fset; } SFileSetCommitInfo; @@ -512,36 +511,25 @@ _exit: return code; } -static int32_t tsdbCommitInfoAdd(STsdb *tsdb, const SFileSetCommitInfo *info) { +static int32_t tsdbCommitInfoAdd(STsdb *tsdb, int32_t fid) { int32_t code = 0; int32_t lino = 0; SFileSetCommitInfo *tinfo; - vHashGet(tsdb->commitInfo->ht, info, (void **)&tinfo); - if (tinfo) { - if (info->hasDataToCommit && !tinfo->hasDataToCommit) { - tinfo->hasDataToCommit = true; - } - } else { - if ((tinfo = taosMemoryCalloc(1, sizeof(*tinfo))) == NULL) { - TSDB_CHECK_CODE(code = TSDB_CODE_OUT_OF_MEMORY, lino, _exit); - } - tinfo->fid = info->fid; - tinfo->hasDataToCommit = info->hasDataToCommit; - if (info->fset) { - code = tsdbTFileSetInitCopy(tsdb, info->fset, &tinfo->fset); - TSDB_CHECK_CODE(code, lino, _exit); - } - - code = vHashPut(tsdb->commitInfo->ht, tinfo); - TSDB_CHECK_CODE(code, lino, _exit); - - if ((taosArrayPush(tsdb->commitInfo->arr, &tinfo)) == NULL) { - TSDB_CHECK_CODE(code = TSDB_CODE_OUT_OF_MEMORY, lino, _exit); - } - taosArraySort(tsdb->commitInfo->arr, tFileSetCommitInfoPCompare); + if ((tinfo = taosMemoryMalloc(sizeof(*tinfo))) == NULL) { + TSDB_CHECK_CODE(code = TSDB_CODE_OUT_OF_MEMORY, lino, _exit); } + tinfo->fid = fid; + tinfo->fset = NULL; + + code = vHashPut(tsdb->commitInfo->ht, tinfo); + TSDB_CHECK_CODE(code, lino, _exit); + + if ((taosArrayPush(tsdb->commitInfo->arr, &tinfo)) == NULL) { + TSDB_CHECK_CODE(code = TSDB_CODE_OUT_OF_MEMORY, lino, _exit); + } + taosArraySort(tsdb->commitInfo->arr, tFileSetCommitInfoPCompare); _exit: if (code) { @@ -585,12 +573,7 @@ static int32_t tsdbCommitInfoBuild(STsdb *tsdb) { fid = tsdbKeyFid(TSDBROW_TS(row), tsdb->keepCfg.days, tsdb->keepCfg.precision); tsdbFidKeyRange(fid, tsdb->keepCfg.days, tsdb->keepCfg.precision, &minKey, &maxKey); - SFileSetCommitInfo info = { - .fid = fid, - .hasDataToCommit = true, - .fset = NULL, - }; - code = tsdbCommitInfoAdd(tsdb, &info); + code = tsdbCommitInfoAdd(tsdb, fid); TSDB_CHECK_CODE(code, lino, _exit); from.key.ts = maxKey + 1; @@ -599,18 +582,13 @@ static int32_t tsdbCommitInfoBuild(STsdb *tsdb) { taosThreadMutexLock(&tsdb->mutex); - // copy existing file set - for (int32_t i = 0; i < taosArrayGetSize(tsdb->commitInfo->arr); i++) { - SFileSetCommitInfo *info = *(SFileSetCommitInfo **)taosArrayGet(tsdb->commitInfo->arr, i); - tsdbFSGetFSet(tsdb->pFS, info->fid, &fset); - if (fset) { - tsdbTFileSetInitCopy(tsdb, fset, &info->fset); - } - } - // scan tomb data if (tsdb->imem->nDel > 0) { TARRAY2_FOREACH(tsdb->pFS->fSetArr, fset) { + if (tsdbTFileSetIsEmpty(fset)) { + continue; + } + SFileSetCommitInfo *info; SFileSetCommitInfo tinfo = { .fid = fset->fid, @@ -623,6 +601,7 @@ static int32_t tsdbCommitInfoBuild(STsdb *tsdb) { } int64_t minKey, maxKey; + bool hasDataToCommit = false; tsdbFidKeyRange(fset->fid, tsdb->keepCfg.days, tsdb->keepCfg.precision, &minKey, &maxKey); iter = tRBTreeIterCreate(tsdb->imem->tbDataTree, 1); for (SRBTreeNode *node = tRBTreeIterNext(&iter); node; node = tRBTreeIterNext(&iter)) { @@ -631,10 +610,8 @@ static int32_t tsdbCommitInfoBuild(STsdb *tsdb) { if (pDelData->sKey > maxKey || pDelData->eKey < minKey) { continue; } else { - tinfo.fid = fset->fid; - tinfo.hasDataToCommit = true; - tinfo.fset = fset; - if ((code = tsdbCommitInfoAdd(tsdb, &tinfo))) { + hasDataToCommit = true; + if ((code = tsdbCommitInfoAdd(tsdb, fset->fid))) { taosThreadMutexUnlock(&tsdb->mutex); TSDB_CHECK_CODE(code, lino, _exit); } @@ -642,7 +619,7 @@ static int32_t tsdbCommitInfoBuild(STsdb *tsdb) { } } - if (tinfo.hasDataToCommit) { + if (hasDataToCommit) { break; } } @@ -653,6 +630,9 @@ static int32_t tsdbCommitInfoBuild(STsdb *tsdb) { for (int i = 0; i < taosArrayGetSize(tsdb->commitInfo->arr); i++) { SFileSetCommitInfo *info = *(SFileSetCommitInfo **)taosArrayGet(tsdb->commitInfo->arr, i); tsdbBeginTaskOnFileSet(tsdb, info->fid, &fset); + if (fset) { + tsdbTFileSetInitCopy(tsdb, fset, &info->fset); + } } taosThreadMutexUnlock(&tsdb->mutex); @@ -756,10 +736,8 @@ int32_t tsdbCommitBegin(STsdb *tsdb, SCommitInfo *info) { for (int32_t i = 0; i < taosArrayGetSize(tsdb->commitInfo->arr); i++) { committer.ctx->info = *(SFileSetCommitInfo **)taosArrayGet(tsdb->commitInfo->arr, i); - if (committer.ctx->info->hasDataToCommit) { - code = tsdbCommitFileSet(&committer); - TSDB_CHECK_CODE(code, lino, _exit); - } + code = tsdbCommitFileSet(&committer); + TSDB_CHECK_CODE(code, lino, _exit); } code = tsdbCloseCommitter(&committer, code); @@ -792,7 +770,7 @@ int32_t tsdbCommitCommit(STsdb *tsdb) { for (int32_t i = 0; i < taosArrayGetSize(tsdb->commitInfo->arr); i++) { SFileSetCommitInfo *info = *(SFileSetCommitInfo **)taosArrayGet(tsdb->commitInfo->arr, i); - if (info->hasDataToCommit && info->fset) { + if (info->fset) { tsdbFinishTaskOnFileSet(tsdb, info->fid); } } @@ -824,7 +802,7 @@ int32_t tsdbCommitAbort(STsdb *pTsdb) { taosThreadMutexLock(&pTsdb->mutex); for (int32_t i = 0; i < taosArrayGetSize(pTsdb->commitInfo->arr); i++) { SFileSetCommitInfo *info = *(SFileSetCommitInfo **)taosArrayGet(pTsdb->commitInfo->arr, i); - if (info->hasDataToCommit && info->fset) { + if (info->fset) { tsdbFinishTaskOnFileSet(pTsdb, info->fid); } } From 91394f2e6dabc2bf4e61b85ccc47c6ae805f9b93 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Thu, 30 May 2024 11:01:44 +0800 Subject: [PATCH 2/2] fix more --- source/dnode/vnode/src/tsdb/tsdbCommit2.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbCommit2.c b/source/dnode/vnode/src/tsdb/tsdbCommit2.c index 551d4c62b2..ffe5c2c1e0 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCommit2.c +++ b/source/dnode/vnode/src/tsdb/tsdbCommit2.c @@ -573,8 +573,15 @@ static int32_t tsdbCommitInfoBuild(STsdb *tsdb) { fid = tsdbKeyFid(TSDBROW_TS(row), tsdb->keepCfg.days, tsdb->keepCfg.precision); tsdbFidKeyRange(fid, tsdb->keepCfg.days, tsdb->keepCfg.precision, &minKey, &maxKey); - code = tsdbCommitInfoAdd(tsdb, fid); - TSDB_CHECK_CODE(code, lino, _exit); + SFileSetCommitInfo *info; + SFileSetCommitInfo tinfo = { + .fid = fid, + }; + vHashGet(tsdb->commitInfo->ht, &tinfo, (void **)&info); + if (info == NULL) { + code = tsdbCommitInfoAdd(tsdb, fid); + TSDB_CHECK_CODE(code, lino, _exit); + } from.key.ts = maxKey + 1; }