From 6347792a93cbc53d4f731d68000d5e64b2edc46b Mon Sep 17 00:00:00 2001 From: dmchen Date: Sun, 17 Dec 2023 08:47:51 +0000 Subject: [PATCH] TD-27906 --- source/dnode/mnode/impl/src/mndCompact.c | 53 +++++++++++++----------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndCompact.c b/source/dnode/mnode/impl/src/mndCompact.c index c8903fe0a1..ee5331263e 100644 --- a/source/dnode/mnode/impl/src/mndCompact.c +++ b/source/dnode/mnode/impl/src/mndCompact.c @@ -604,6 +604,35 @@ static int32_t mndSaveCompactProgress(SMnode *pMnode, int32_t compactId) { sdbRelease(pMnode->pSdb, pDetail); } + + bool allFinished = true; + while (1) { + SCompactDetailObj *pDetail = NULL; + pIter = sdbFetch(pMnode->pSdb, SDB_COMPACT_DETAIL, pIter, (void **)&pDetail); + if (pIter == NULL) break; + + mInfo("compact:%d, check compact finished, vgId:%d, dnodeId:%d, numberFileset:%d, finished:%d", + pDetail->compactId, pDetail->vgId, pDetail->dnodeId, pDetail->numberFileset, pDetail->finished); + + if(pDetail->numberFileset == -1 && pDetail->finished == -1){ + allFinished = false; + sdbRelease(pMnode->pSdb, pDetail); + break; + } + if (pDetail->numberFileset != -1 && pDetail->finished != -1 && + pDetail->numberFileset != pDetail->finished) { + allFinished = false; + sdbRelease(pMnode->pSdb, pDetail); + break; + } + + sdbRelease(pMnode->pSdb, pDetail); + } + + if(allFinished){ + needSave = true; + } + if(!needSave) { mDebug("compact:%" PRId32 ", no need to save" , compactId); return 0; @@ -645,30 +674,6 @@ static int32_t mndSaveCompactProgress(SMnode *pMnode, int32_t compactId) { sdbRelease(pMnode->pSdb, pDetail); } - bool allFinished = true; - while (1) { - SCompactDetailObj *pDetail = NULL; - pIter = sdbFetch(pMnode->pSdb, SDB_COMPACT_DETAIL, pIter, (void **)&pDetail); - if (pIter == NULL) break; - - mInfo("trans:%d, check compact finished:%d, vgId:%d, dnodeId:%d, numberFileset:%d, finished:%d", - pTrans->id, pDetail->compactId, pDetail->vgId, pDetail->dnodeId, pDetail->numberFileset, pDetail->finished); - - if(pDetail->numberFileset == -1 && pDetail->finished == -1){ - allFinished = false; - sdbRelease(pMnode->pSdb, pDetail); - break; - } - if (pDetail->numberFileset != -1 && pDetail->finished != -1 && - pDetail->numberFileset != pDetail->finished) { - allFinished = false; - sdbRelease(pMnode->pSdb, pDetail); - break; - } - - sdbRelease(pMnode->pSdb, pDetail); - } - if(allFinished){ while (1) { SCompactDetailObj *pDetail = NULL;