diff --git a/source/dnode/vnode/impl/inc/vnodeCommit.h b/source/dnode/vnode/impl/inc/vnodeCommit.h index 031089ba14..e6568fbd52 100644 --- a/source/dnode/vnode/impl/inc/vnodeCommit.h +++ b/source/dnode/vnode/impl/inc/vnodeCommit.h @@ -23,8 +23,8 @@ extern "C" { #endif #define vnodeShouldCommit vnodeBufPoolIsFull +int vnodeSyncCommit(SVnode *pVnode); int vnodeAsyncCommit(SVnode *pVnode); -int vnodeCommit(void *arg); #ifdef __cplusplus } diff --git a/source/dnode/vnode/impl/src/vnodeCommit.c b/source/dnode/vnode/impl/src/vnodeCommit.c index f5bf60a7e3..bc0a3c6680 100644 --- a/source/dnode/vnode/impl/src/vnodeCommit.c +++ b/source/dnode/vnode/impl/src/vnodeCommit.c @@ -15,10 +15,14 @@ #include "vnodeDef.h" -static int vnodeStartCommit(SVnode *pVnode); -static int vnodeEndCommit(SVnode *pVnode); +static int vnodeStartCommit(SVnode *pVnode); +static int vnodeEndCommit(SVnode *pVnode); +static int vnodeCommit(void *arg); +static void vnodeWaitCommit(SVnode *pVnode); int vnodeAsyncCommit(SVnode *pVnode) { + vnodeWaitCommit(pVnode); + vnodeBufPoolSwitch(pVnode); SVnodeTask *pTask = (SVnodeTask *)malloc(sizeof(*pTask)); @@ -33,7 +37,13 @@ int vnodeAsyncCommit(SVnode *pVnode) { return 0; } -int vnodeCommit(void *arg) { +int vnodeSyncCommit(SVnode *pVnode) { + vnodeAsyncCommit(pVnode); + vnodeWaitCommit(pVnode); + return 0; +} + +static int vnodeCommit(void *arg) { SVnode *pVnode = (SVnode *)arg; metaCommit(pVnode->pMeta); @@ -42,7 +52,6 @@ int vnodeCommit(void *arg) { vnodeBufPoolRecycle(pVnode); tsem_post(&(pVnode->canCommit)); - // TODO return 0; } @@ -54,4 +63,6 @@ static int vnodeStartCommit(SVnode *pVnode) { static int vnodeEndCommit(SVnode *pVnode) { // TODO return 0; -} \ No newline at end of file +} + +static FORCE_INLINE void vnodeWaitCommit(SVnode *pVnode) { tsem_wait(&pVnode->canCommit); } \ No newline at end of file diff --git a/source/dnode/vnode/impl/src/vnodeMain.c b/source/dnode/vnode/impl/src/vnodeMain.c index 2b0363c97f..30962e726e 100644 --- a/source/dnode/vnode/impl/src/vnodeMain.c +++ b/source/dnode/vnode/impl/src/vnodeMain.c @@ -137,6 +137,7 @@ static int vnodeOpenImpl(SVnode *pVnode) { } static void vnodeCloseImpl(SVnode *pVnode) { + vnodeSyncCommit(pVnode); if (pVnode) { vnodeCloseBufPool(pVnode); metaClose(pVnode->pMeta);