diff --git a/source/dnode/vnode/src/inc/vnd.h b/source/dnode/vnode/src/inc/vnd.h index b1a5ca4709..7da3dcbe5a 100644 --- a/source/dnode/vnode/src/inc/vnd.h +++ b/source/dnode/vnode/src/inc/vnd.h @@ -78,6 +78,7 @@ int32_t vnodeAsyncC(SVAChannelID* channelID, EVAPriority priority, int32_t (*exe void vnodeAWait(SVATaskID* taskID); int32_t vnodeACancel(SVATaskID* taskID); int32_t vnodeAsyncSetWorkers(int64_t async, int32_t numWorkers); +bool vnodeATaskValid(SVATaskID* taskID); const char* vnodeGetATaskName(EVATaskT task); diff --git a/source/dnode/vnode/src/tsdb/tsdbFS2.c b/source/dnode/vnode/src/tsdb/tsdbFS2.c index aa68a8af5c..969b8e9031 100644 --- a/source/dnode/vnode/src/tsdb/tsdbFS2.c +++ b/source/dnode/vnode/src/tsdb/tsdbFS2.c @@ -801,7 +801,6 @@ int32_t tsdbDisableAndCancelAllBgTask(STsdb *pTsdb) { (void)taosThreadMutexUnlock(&pTsdb->mutex); return terrno; } - fset->mergeScheduled = false; tsdbFSSetBlockCommit(fset, false); } @@ -945,7 +944,7 @@ int32_t tsdbFSEditCommit(STFileSystem *fs) { // bool skipMerge = false; int32_t numFile = TARRAY2_SIZE(lvl->fobjArr); - if (numFile >= sttTrigger && (!fset->mergeScheduled)) { + if (numFile >= sttTrigger && (!vnodeATaskValid(&fset->mergeTask))) { SMergeArg *arg = taosMemoryMalloc(sizeof(*arg)); if (arg == NULL) { code = terrno; @@ -957,7 +956,6 @@ int32_t tsdbFSEditCommit(STFileSystem *fs) { code = vnodeAsync(MERGE_TASK_ASYNC, EVA_PRIORITY_HIGH, tsdbMerge, taosAutoMemoryFree, arg, &fset->mergeTask); TSDB_CHECK_CODE(code, lino, _exit); - fset->mergeScheduled = true; } if (numFile >= sttTrigger * BLOCK_COMMIT_FACTOR) { diff --git a/source/dnode/vnode/src/tsdb/tsdbFSet2.h b/source/dnode/vnode/src/tsdb/tsdbFSet2.h index ca9c133e9c..51d13f52ab 100644 --- a/source/dnode/vnode/src/tsdb/tsdbFSet2.h +++ b/source/dnode/vnode/src/tsdb/tsdbFSet2.h @@ -95,7 +95,6 @@ struct STFileSet { TSKEY lastCompact; TSKEY lastCommit; - bool mergeScheduled; SVATaskID mergeTask; SVATaskID compactTask; SVATaskID retentionTask; diff --git a/source/dnode/vnode/src/tsdb/tsdbMerge.c b/source/dnode/vnode/src/tsdb/tsdbMerge.c index 39d8a57692..d6c0259c23 100644 --- a/source/dnode/vnode/src/tsdb/tsdbMerge.c +++ b/source/dnode/vnode/src/tsdb/tsdbMerge.c @@ -484,7 +484,6 @@ static int32_t tsdbMergeGetFSet(SMerger *merger) { return code; } - fset->mergeScheduled = false; (void)taosThreadMutexUnlock(&merger->tsdb->mutex); return 0; } diff --git a/source/dnode/vnode/src/vnd/vnodeAsync.c b/source/dnode/vnode/src/vnd/vnodeAsync.c index 49c1306736..cf0eee62f6 100644 --- a/source/dnode/vnode/src/vnd/vnodeAsync.c +++ b/source/dnode/vnode/src/vnd/vnodeAsync.c @@ -842,4 +842,22 @@ const char *vnodeGetATaskName(EVATaskT taskType) { default: return "unknown"; } +} + +bool vnodeATaskValid(SVATaskID *taskID) { + if (taskID == NULL || taskID->async < MIN_ASYNC_ID || taskID->async > MAX_ASYNC_ID || taskID->id <= 0) { + return false; + } + + SVAsync *async = GVnodeAsyncs[taskID->async].async; + SVATask task2 = { + .taskId = taskID->id, + }; + SVATask *task = NULL; + + (void)taosThreadMutexLock(&async->mutex); + int32_t ret = vHashGet(async->taskTable, &task2, (void **)&task); + (void)taosThreadMutexUnlock(&async->mutex); + + return ret == 0 && task != NULL; } \ No newline at end of file