diff --git a/source/dnode/vnode/src/inc/meta.h b/source/dnode/vnode/src/inc/meta.h index c74ccf6c11..7dbaa66d44 100644 --- a/source/dnode/vnode/src/inc/meta.h +++ b/source/dnode/vnode/src/inc/meta.h @@ -79,6 +79,7 @@ struct SMeta { char* path; SVnode* pVnode; + bool changed; TDB* pEnv; TXN* txn; TTB* pTbDb; diff --git a/source/dnode/vnode/src/meta/metaCommit.c b/source/dnode/vnode/src/meta/metaCommit.c index f5572e68dd..f8b41e413b 100644 --- a/source/dnode/vnode/src/meta/metaCommit.c +++ b/source/dnode/vnode/src/meta/metaCommit.c @@ -56,7 +56,7 @@ int metaPrepareAsyncCommit(SMeta *pMeta) { code = ttlMgrFlush(pMeta->pTtlMgr, pMeta->txn); metaULock(pMeta); code = tdbCommit(pMeta->pEnv, pMeta->txn); - + pMeta->changed = false; return code; } diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c index f600925a0b..fe058018d7 100644 --- a/source/dnode/vnode/src/meta/metaTable.c +++ b/source/dnode/vnode/src/meta/metaTable.c @@ -251,6 +251,7 @@ int metaCreateSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) { ++pMeta->pVnode->config.vndStats.numOfSTables; + pMeta->changed = true; metaDebug("vgId:%d, stb:%s is created, suid:%" PRId64, TD_VID(pMeta->pVnode), pReq->name, pReq->suid); return 0; @@ -325,6 +326,8 @@ _drop_super_table: metaUpdTimeSeriesNum(pMeta); + pMeta->changed = true; + _exit: tdbFree(pKey); tdbFree(pData); @@ -424,6 +427,8 @@ int metaAlterSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) { metaTimeSeriesNotifyCheck(pMeta); } + pMeta->changed = true; + _exit: if (oStbEntry.pBuf) taosMemoryFree(oStbEntry.pBuf); tDecoderClear(&dc); @@ -847,6 +852,7 @@ int metaCreateTable(SMeta *pMeta, int64_t ver, SVCreateTbReq *pReq, STableMetaRs } } + pMeta->changed = true; metaDebug("vgId:%d, table:%s uid %" PRId64 " is created, type:%" PRId8, TD_VID(pMeta->pVnode), pReq->name, pReq->uid, pReq->type); return 0; @@ -895,6 +901,7 @@ int metaDropTable(SMeta *pMeta, int64_t version, SVDropTbReq *pReq, SArray *tbUi *tbUid = uid; } + pMeta->changed = true; _exit: tdbFree(pData); return rc; @@ -938,6 +945,8 @@ void metaDropTables(SMeta *pMeta, SArray *tbUids) { } } tSimpleHashCleanup(suidHash); + + pMeta->changed = true; } static int32_t metaFilterTableByHash(SMeta *pMeta, SArray *uidList) { @@ -1970,6 +1979,7 @@ _err: } int metaAlterTable(SMeta *pMeta, int64_t version, SVAlterTbReq *pReq, STableMetaRsp *pMetaRsp) { + pMeta->changed = true; switch (pReq->action) { case TSDB_ALTER_TABLE_ADD_COLUMN: case TSDB_ALTER_TABLE_DROP_COLUMN: diff --git a/source/dnode/vnode/src/vnd/vnodeCommit.c b/source/dnode/vnode/src/vnd/vnodeCommit.c index f9b5e9168c..a178e1f772 100644 --- a/source/dnode/vnode/src/vnd/vnodeCommit.c +++ b/source/dnode/vnode/src/vnd/vnodeCommit.c @@ -13,9 +13,10 @@ * along with this program. If not, see . */ +#include "meta.h" +#include "sync.h" #include "vnd.h" #include "vnodeInt.h" -#include "sync.h" extern int32_t tsdbPreCommit(STsdb *pTsdb); extern int32_t tsdbCommitBegin(STsdb *pTsdb, SCommitInfo *pInfo); @@ -155,7 +156,8 @@ int vnodeShouldCommit(SVnode *pVnode, bool atExit) { taosThreadMutexLock(&pVnode->mutex); if (pVnode->inUse && diskAvail) { - needCommit = (pVnode->inUse->size > pVnode->inUse->node.size) || (pVnode->inUse->size > 0 && atExit); + needCommit = (pVnode->inUse->size > pVnode->inUse->node.size) || + (atExit && (pVnode->inUse->size > 0 || pVnode->pMeta->changed)); } taosThreadMutexUnlock(&pVnode->mutex); return needCommit;