Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
76dd2bac
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
76dd2bac
编写于
5月 17, 2022
作者:
S
shenglian-zhou
提交者:
GitHub
5月 17, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #12583 from taosdata/feature/udf
feat: fix udf memory memory found by valgrind
上级
d8743b72
2d0b29d2
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
49 addition
and
11 deletion
+49
-11
include/util/tcoding.h
include/util/tcoding.h
+2
-2
source/libs/function/src/tudf.c
source/libs/function/src/tudf.c
+1
-1
source/libs/function/src/udfd.c
source/libs/function/src/udfd.c
+46
-8
未找到文件。
include/util/tcoding.h
浏览文件 @
76dd2bac
...
...
@@ -63,14 +63,14 @@ static FORCE_INLINE void *taosSkipFixedLen(const void *buf, size_t len) { return
static
FORCE_INLINE
int32_t
taosEncodeFixedBool
(
void
**
buf
,
bool
value
)
{
if
(
buf
!=
NULL
)
{
((
int8_t
*
)(
*
buf
))[
0
]
=
value
?
1
:
0
;
((
int8_t
*
)(
*
buf
))[
0
]
=
(
value
?
1
:
0
)
;
*
buf
=
POINTER_SHIFT
(
*
buf
,
sizeof
(
int8_t
));
}
return
(
int32_t
)
sizeof
(
int8_t
);
}
static
FORCE_INLINE
void
*
taosDecodeFixedBool
(
const
void
*
buf
,
bool
*
value
)
{
*
value
=
(
(
int8_t
*
)
buf
)[
0
]
==
0
?
false
:
true
;
*
value
=
(
(((
int8_t
*
)
buf
)[
0
]
==
0
)
?
false
:
true
)
;
return
POINTER_SHIFT
(
buf
,
sizeof
(
int8_t
));
}
...
...
source/libs/function/src/tudf.c
浏览文件 @
76dd2bac
...
...
@@ -1287,7 +1287,7 @@ int32_t doSetupUdf(char udfName[], UdfcFuncHandle *funcHandle) {
task
->
type
=
UDF_TASK_SETUP
;
SUdfSetupRequest
*
req
=
&
task
->
_setup
.
req
;
mem
cpy
(
req
->
udfName
,
udfName
,
TSDB_FUNC_NAME_LEN
);
strn
cpy
(
req
->
udfName
,
udfName
,
TSDB_FUNC_NAME_LEN
);
int32_t
errCode
=
udfcRunUdfUvTask
(
task
,
UV_TASK_CONNECT
);
if
(
errCode
!=
0
)
{
...
...
source/libs/function/src/udfd.c
浏览文件 @
76dd2bac
...
...
@@ -226,7 +226,7 @@ void udfdProcessCallRequest(SUvUdfWork *uvUdf, SUdfRequest *request) {
SUdfDataBlock
input
=
{
0
};
convertDataBlockToUdfDataBlock
(
&
call
->
block
,
&
input
);
code
=
udf
->
scalarProcFunc
(
&
input
,
&
output
);
freeUdfDataDataBlock
(
&
input
);
convertUdfColumnToDataBlock
(
&
output
,
&
response
.
callRsp
.
resultData
);
freeUdfColumn
(
&
output
);
break
;
...
...
@@ -246,6 +246,8 @@ void udfdProcessCallRequest(SUvUdfWork *uvUdf, SUdfRequest *request) {
.
bufLen
=
udf
->
bufSize
,
.
numOfResult
=
0
};
code
=
udf
->
aggProcFunc
(
&
input
,
&
call
->
interBuf
,
&
outBuf
);
freeUdfInterBuf
(
&
call
->
interBuf
);
freeUdfDataDataBlock
(
&
input
);
subRsp
->
resultBuf
=
outBuf
;
break
;
...
...
@@ -255,6 +257,7 @@ void udfdProcessCallRequest(SUvUdfWork *uvUdf, SUdfRequest *request) {
.
bufLen
=
udf
->
bufSize
,
.
numOfResult
=
0
};
code
=
udf
->
aggFinishFunc
(
&
call
->
interBuf
,
&
outBuf
);
freeUdfInterBuf
(
&
call
->
interBuf
);
subRsp
->
resultBuf
=
outBuf
;
break
;
}
...
...
@@ -274,6 +277,30 @@ void udfdProcessCallRequest(SUvUdfWork *uvUdf, SUdfRequest *request) {
encodeUdfResponse
(
&
buf
,
rsp
);
uvUdf
->
output
=
uv_buf_init
(
bufBegin
,
len
);
switch
(
call
->
callType
)
{
case
TSDB_UDF_CALL_SCALA_PROC
:
{
tDeleteSSDataBlock
(
&
call
->
block
);
tDeleteSSDataBlock
(
&
subRsp
->
resultData
);
break
;
}
case
TSDB_UDF_CALL_AGG_INIT
:
{
freeUdfInterBuf
(
&
subRsp
->
resultBuf
);
break
;
}
case
TSDB_UDF_CALL_AGG_PROC
:
{
tDeleteSSDataBlock
(
&
call
->
block
);
freeUdfInterBuf
(
&
subRsp
->
resultBuf
);
break
;
}
case
TSDB_UDF_CALL_AGG_FIN
:
{
freeUdfInterBuf
(
&
subRsp
->
resultBuf
);
break
;
}
default:
break
;
}
taosMemoryFree
(
uvUdf
->
input
.
base
);
return
;
}
...
...
@@ -348,9 +375,8 @@ void udfdProcessRequest(uv_work_t *req) {
void
udfdOnWrite
(
uv_write_t
*
req
,
int
status
)
{
SUvUdfWork
*
work
=
(
SUvUdfWork
*
)
req
->
data
;
if
(
status
<
0
)
{
// TODO:log error and process it.
fnError
(
"udfd send response error, length: %zu code: %s"
,
work
->
output
.
len
,
uv_err_name
(
status
));
}
fnDebug
(
"send response. length:%zu, status: %s"
,
work
->
output
.
len
,
uv_err_name
(
status
));
taosMemoryFree
(
work
->
output
.
base
);
taosMemoryFree
(
work
);
taosMemoryFree
(
req
);
...
...
@@ -549,6 +575,7 @@ void udfdProcessRpcRsp(void *parent, SRpcMsg *pMsg, SEpSet *pEpSet) {
taosWriteFile
(
file
,
pFuncInfo
->
pCode
,
pFuncInfo
->
codeSize
);
taosCloseFile
(
&
file
);
strncpy
(
udf
->
path
,
path
,
strlen
(
path
));
tFreeSFuncInfo
(
pFuncInfo
);
taosArrayDestroy
(
retrieveRsp
.
pFuncInfos
);
msgInfo
->
code
=
0
;
}
...
...
@@ -800,15 +827,26 @@ static int32_t udfdUvInit() {
return
0
;
}
static
void
udfdCloseWalkCb
(
uv_handle_t
*
handle
,
void
*
arg
)
{
if
(
!
uv_is_closing
(
handle
))
{
uv_close
(
handle
,
NULL
);
}
}
static
int32_t
udfdRun
()
{
global
.
udfsHash
=
taosHashInit
(
64
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
HASH_NO_LOCK
);
uv_mutex_init
(
&
global
.
udfsMutex
);
fnInfo
(
"start the udfd"
);
int
code
=
uv_run
(
global
.
loop
,
UV_RUN_DEFAULT
);
fnInfo
(
"udfd stopped. result: %s, code: %d"
,
uv_err_name
(
code
),
code
);
int
codeClose
=
uv_loop_close
(
global
.
loop
);
fnDebug
(
"uv loop close. result: %s"
,
uv_err_name
(
codeClose
));
fnInfo
(
"start udfd event loop"
);
uv_run
(
global
.
loop
,
UV_RUN_DEFAULT
);
fnInfo
(
"udfd event loop stopped."
);
uv_loop_close
(
global
.
loop
);
uv_walk
(
global
.
loop
,
udfdCloseWalkCb
,
NULL
);
uv_run
(
global
.
loop
,
UV_RUN_DEFAULT
);
uv_loop_close
(
global
.
loop
);
uv_mutex_destroy
(
&
global
.
udfsMutex
);
taosHashCleanup
(
global
.
udfsHash
);
return
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录