From a1f2ad0daee8ff120dc3965e0eb40fe3b707a880 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Tue, 3 Nov 2020 15:27:25 +0800 Subject: [PATCH 1/2] TD-1894 --- src/inc/twal.h | 1 + src/vnode/src/vnodeMain.c | 4 ++++ src/wal/inc/walInt.h | 1 + src/wal/src/walMgmt.c | 10 ++++++++++ src/wal/src/walWrite.c | 7 ++++++- 5 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/inc/twal.h b/src/inc/twal.h index 94bdcacfce..3a229ed835 100644 --- a/src/inc/twal.h +++ b/src/inc/twal.h @@ -51,6 +51,7 @@ void walCleanUp(); twalh walOpen(char *path, SWalCfg *pCfg); int32_t walAlter(twalh pWal, SWalCfg *pCfg); +void walStop(twalh); void walClose(twalh); int32_t walRenew(twalh); int32_t walWrite(twalh, SWalHead *); diff --git a/src/vnode/src/vnodeMain.c b/src/vnode/src/vnodeMain.c index 2dfa4962a2..8c53c6629b 100644 --- a/src/vnode/src/vnodeMain.c +++ b/src/vnode/src/vnodeMain.c @@ -386,6 +386,10 @@ void vnodeRelease(void *pVnodeRaw) { pVnode->qMgmt = NULL; } + if (pVnode->wal) { + walStop(pVnode->wal); + } + if (pVnode->tsdb) { tsdbCloseRepo(pVnode->tsdb, 1); pVnode->tsdb = NULL; diff --git a/src/wal/inc/walInt.h b/src/wal/inc/walInt.h index 7e731d44db..0bdaf64d05 100644 --- a/src/wal/inc/walInt.h +++ b/src/wal/inc/walInt.h @@ -49,6 +49,7 @@ typedef struct { int32_t level; int32_t fsyncPeriod; int32_t fsyncSeq; + int8_t stop; char path[WAL_PATH_LEN]; char name[WAL_FILE_LEN]; pthread_mutex_t mutex; diff --git a/src/wal/src/walMgmt.c b/src/wal/src/walMgmt.c index 272f44b93a..346e3fe5b8 100644 --- a/src/wal/src/walMgmt.c +++ b/src/wal/src/walMgmt.c @@ -110,6 +110,16 @@ int32_t walAlter(void *handle, SWalCfg *pCfg) { return TSDB_CODE_SUCCESS; } +void walStop(void *handle) { + if (handle == NULL) return; + SWal *pWal = handle; + + pthread_mutex_lock(&pWal->mutex); + pWal->stop = 1; + pthread_mutex_unlock(&pWal->mutex); + wDebug("vgId:%d, stop write wal", pWal->vgId); +} + void walClose(void *handle) { if (handle == NULL) return; diff --git a/src/wal/src/walWrite.c b/src/wal/src/walWrite.c index 00dc3f4744..214642cdf4 100644 --- a/src/wal/src/walWrite.c +++ b/src/wal/src/walWrite.c @@ -29,6 +29,11 @@ int32_t walRenew(void *handle) { SWal * pWal = handle; int32_t code = 0; + if (pWal->stop) { + wDebug("vgId:%d, do not create a new wal file", pWal->vgId); + return 0; + } + pthread_mutex_lock(&pWal->mutex); if (pWal->fd >= 0) { @@ -151,7 +156,7 @@ int32_t walRestore(void *handle, void *pVnode, int32_t (*writeFp)(void *, void * if (!pWal->keep) return TSDB_CODE_SUCCESS; if (count == 0) { - wDebug("vgId:%d, file:%s not exist, renew it", pWal->vgId, pWal->name); + wDebug("vgId:%d, wal file not exist, renew it", pWal->vgId); return walRenew(pWal); } else { // open the existing WAL file in append mode From b8e60b79223e40f730f376009dbef530da6789eb Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Tue, 3 Nov 2020 15:36:59 +0800 Subject: [PATCH 2/2] TD-1894 --- src/wal/inc/walInt.h | 1 + src/wal/src/walMgmt.c | 4 +--- tests/script/general/insert/basic.sim | 31 +++++++++++++-------------- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/wal/inc/walInt.h b/src/wal/inc/walInt.h index 0bdaf64d05..5273eb5b1c 100644 --- a/src/wal/inc/walInt.h +++ b/src/wal/inc/walInt.h @@ -50,6 +50,7 @@ typedef struct { int32_t fsyncPeriod; int32_t fsyncSeq; int8_t stop; + int8_t reserved[3]; char path[WAL_PATH_LEN]; char name[WAL_FILE_LEN]; pthread_mutex_t mutex; diff --git a/src/wal/src/walMgmt.c b/src/wal/src/walMgmt.c index 346e3fe5b8..6944eb583f 100644 --- a/src/wal/src/walMgmt.c +++ b/src/wal/src/walMgmt.c @@ -133,9 +133,7 @@ void walClose(void *handle) { while (walGetNextFile(pWal, &fileId) >= 0) { snprintf(pWal->name, sizeof(pWal->name), "%s/%s%" PRId64, pWal->path, WAL_PREFIX, fileId); - if (fileId == pWal->fileId) { - wDebug("vgId:%d, wal:%p file:%s, it is closed and kept", pWal->vgId, pWal, pWal->name); - } else if (remove(pWal->name) < 0) { + if (remove(pWal->name) < 0) { wError("vgId:%d, wal:%p file:%s, failed to remove", pWal->vgId, pWal, pWal->name); } else { wDebug("vgId:%d, wal:%p file:%s, it is removed", pWal->vgId, pWal, pWal->name); diff --git a/tests/script/general/insert/basic.sim b/tests/script/general/insert/basic.sim index ba8cff83fa..3f0f25a95b 100644 --- a/tests/script/general/insert/basic.sim +++ b/tests/script/general/insert/basic.sim @@ -8,8 +8,8 @@ sleep 3000 sql connect $i = 0 -$dbPrefix = tb_in_db -$tbPrefix = tb_in_tb +$dbPrefix = d +$tbPrefix = t $db = $dbPrefix . $i $tb = $tbPrefix . $i @@ -22,28 +22,27 @@ sql create table $tb (ts timestamp, speed int) $x = 0 while $x < 10 - $ms = $x . m - sql insert into $tb values (now + $ms , $x ) + $cc = $x * 60000 + $ms = 1601481600000 + $cc + + sql insert into $tb values ($ms , $x ) $x = $x + 1 endw print =============== step 2 -sql insert into $tb values (now - 5m , 10) -sql insert into $tb values (now - 6m , 10) -sql insert into $tb values (now - 7m , 10) -sql insert into $tb values (now - 8m , 10) +$x = 0 +while $x < 5 + $cc = $x * 60000 + $ms = 1551481600000 + $cc + + sql insert into $tb values ($ms , $x ) + $x = $x + 1 +endw sql select * from $tb print $rows points data are retrieved -if $rows != 14 then - return -1 -endi - -sql drop database $db -sleep 1000 -sql show databases -if $rows != 0 then +if $rows != 15 then return -1 endi