From 211ab7f3673b6769c2ac86473a8d3faac5de41cb Mon Sep 17 00:00:00 2001 From: slzhou Date: Tue, 25 Oct 2022 13:34:51 +0800 Subject: [PATCH 1/5] fix: set var meta length to data length when decode data block --- source/common/src/tdatablock.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index 64f56212af..4bc91eec64 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -1707,8 +1707,6 @@ void* tDecodeDataBlock(const void* buf, SSDataBlock* pBlock) { if (IS_VAR_DATA_TYPE(data.info.type)) { buf = taosDecodeBinary(buf, (void**)&data.varmeta.offset, pBlock->info.rows * sizeof(int32_t)); - data.varmeta.length = pBlock->info.rows * sizeof(int32_t); - data.varmeta.allocLen = data.varmeta.length; } else { buf = taosDecodeBinary(buf, (void**)&data.nullbitmap, BitmapLen(pBlock->info.rows)); } @@ -1717,6 +1715,10 @@ void* tDecodeDataBlock(const void* buf, SSDataBlock* pBlock) { buf = taosDecodeFixedI32(buf, &len); buf = taosDecodeBinary(buf, (void**)&data.pData, len); taosArrayPush(pBlock->pDataBlock, &data); + if (IS_VAR_DATA_TYPE(data.info.type)) { + data.varmeta.length = len; + data.varmeta.allocLen = len; + } } return (void*)buf; } From bc0f120fb0f5b1ea33452f800a497be7ffea655e Mon Sep 17 00:00:00 2001 From: slzhou Date: Tue, 25 Oct 2022 14:16:31 +0800 Subject: [PATCH 2/5] fix: set values before add it to array --- source/common/src/tdatablock.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index 4bc91eec64..0c38d43543 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -1714,11 +1714,11 @@ void* tDecodeDataBlock(const void* buf, SSDataBlock* pBlock) { int32_t len = 0; buf = taosDecodeFixedI32(buf, &len); buf = taosDecodeBinary(buf, (void**)&data.pData, len); - taosArrayPush(pBlock->pDataBlock, &data); if (IS_VAR_DATA_TYPE(data.info.type)) { data.varmeta.length = len; data.varmeta.allocLen = len; } + taosArrayPush(pBlock->pDataBlock, &data); } return (void*)buf; } From c3653e3d136cc24f29fd67e712b3c431fbaf105e Mon Sep 17 00:00:00 2001 From: slzhou Date: Tue, 25 Oct 2022 14:57:53 +0800 Subject: [PATCH 3/5] fix: udfd ctrl pipe functions only udfd is started by taosd --- source/libs/function/src/udfd.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source/libs/function/src/udfd.c b/source/libs/function/src/udfd.c index f8c4f171ba..56eab35496 100644 --- a/source/libs/function/src/udfd.c +++ b/source/libs/function/src/udfd.c @@ -888,10 +888,11 @@ static int32_t udfdUvInit() { } global.loop = loop; - uv_pipe_init(global.loop, &global.ctrlPipe, 1); - uv_pipe_open(&global.ctrlPipe, 0); - uv_read_start((uv_stream_t *)&global.ctrlPipe, udfdCtrlAllocBufCb, udfdCtrlReadCb); - + if (tsStartUdfd) { // udfd is started by taosd, which shall exit when taosd exit + uv_pipe_init(global.loop, &global.ctrlPipe, 1); + uv_pipe_open(&global.ctrlPipe, 0); + uv_read_start((uv_stream_t *)&global.ctrlPipe, udfdCtrlAllocBufCb, udfdCtrlReadCb); + } getUdfdPipeName(global.listenPipeName, sizeof(global.listenPipeName)); removeListeningPipe(); From 90ed32c43d156f0e510cbfb97498115327eb8008 Mon Sep 17 00:00:00 2001 From: slzhou Date: Tue, 25 Oct 2022 15:16:31 +0800 Subject: [PATCH 4/5] fix: fix memory usage error --- source/libs/function/src/udfd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/function/src/udfd.c b/source/libs/function/src/udfd.c index 56eab35496..088aa62248 100644 --- a/source/libs/function/src/udfd.c +++ b/source/libs/function/src/udfd.c @@ -980,13 +980,13 @@ int32_t udfdDeinitResidentFuncs() { char* funcName = taosArrayGet(global.residentFuncs, i); SUdf** udfInHash = taosHashGet(global.udfsHash, funcName, strlen(funcName)); if (udfInHash) { - taosHashRemove(global.udfsHash, funcName, strlen(funcName)); SUdf* udf = *udfInHash; if (udf->destroyFunc) { (udf->destroyFunc)(); } uv_dlclose(&udf->lib); taosMemoryFree(udf); + taosHashRemove(global.udfsHash, funcName, strlen(funcName)); } } taosArrayDestroy(global.residentFuncs); From bf0a93e8d0414d01da85ad2073c423e3d2c8a3f5 Mon Sep 17 00:00:00 2001 From: slzhou Date: Tue, 25 Oct 2022 15:24:13 +0800 Subject: [PATCH 5/5] fix: compute udf funcs with all const arguments on server side --- source/libs/scalar/src/scalar.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/libs/scalar/src/scalar.c b/source/libs/scalar/src/scalar.c index 7c59c70f30..70d1bb2685 100644 --- a/source/libs/scalar/src/scalar.c +++ b/source/libs/scalar/src/scalar.c @@ -1085,7 +1085,8 @@ EDealRes sclRewriteNonConstOperator(SNode **pNode, SScalarCtx *ctx) { EDealRes sclRewriteFunction(SNode **pNode, SScalarCtx *ctx) { SFunctionNode *node = (SFunctionNode *)*pNode; SNode *tnode = NULL; - if (!fmIsScalarFunc(node->funcId) && (!ctx->dual)) { + if ((!fmIsScalarFunc(node->funcId) && (!ctx->dual)) || + fmIsUserDefinedFunc(node->funcId)) { return DEAL_RES_CONTINUE; }