Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
5b88f0ff
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
5b88f0ff
编写于
1月 03, 2023
作者:
G
Ganlin Zhao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix assert in thistogram.c
上级
09a06ba5
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
52 addition
and
17 deletion
+52
-17
source/libs/function/src/builtinsimpl.c
source/libs/function/src/builtinsimpl.c
+4
-1
source/libs/function/src/thistogram.c
source/libs/function/src/thistogram.c
+48
-16
未找到文件。
source/libs/function/src/builtinsimpl.c
浏览文件 @
5b88f0ff
...
@@ -1768,7 +1768,10 @@ int32_t apercentileFunction(SqlFunctionCtx* pCtx) {
...
@@ -1768,7 +1768,10 @@ int32_t apercentileFunction(SqlFunctionCtx* pCtx) {
double
v
=
0
;
double
v
=
0
;
GET_TYPED_DATA
(
v
,
double
,
type
,
data
);
GET_TYPED_DATA
(
v
,
double
,
type
,
data
);
tHistogramAdd
(
&
pInfo
->
pHisto
,
v
);
int32_t
code
=
tHistogramAdd
(
&
pInfo
->
pHisto
,
v
);
if
(
code
!=
0
)
{
return
TSDB_CODE_FAILED
;
}
}
}
qDebug
(
"%s after add %d elements into histogram, total:%"
PRId64
", numOfEntry:%d, pHisto:%p, elems: %p"
,
qDebug
(
"%s after add %d elements into histogram, total:%"
PRId64
", numOfEntry:%d, pHisto:%p, elems: %p"
,
...
...
source/libs/function/src/thistogram.c
浏览文件 @
5b88f0ff
...
@@ -73,7 +73,10 @@ int32_t tHistogramAdd(SHistogramInfo** pHisto, double val) {
...
@@ -73,7 +73,10 @@ int32_t tHistogramAdd(SHistogramInfo** pHisto, double val) {
#if defined(USE_ARRAYLIST)
#if defined(USE_ARRAYLIST)
int32_t
idx
=
histoBinarySearch
((
*
pHisto
)
->
elems
,
(
*
pHisto
)
->
numOfEntries
,
val
);
int32_t
idx
=
histoBinarySearch
((
*
pHisto
)
->
elems
,
(
*
pHisto
)
->
numOfEntries
,
val
);
assert
(
idx
>=
0
&&
idx
<=
(
*
pHisto
)
->
maxEntries
&&
(
*
pHisto
)
->
elems
!=
NULL
);
if
(
ASSERTS
(
idx
>=
0
&&
idx
<=
(
*
pHisto
)
->
maxEntries
&&
(
*
pHisto
)
->
elems
!=
NULL
,
"tHistogramAdd Error, idx:%d, maxEntries:%d, elems:%p"
,
idx
,
(
*
pHisto
)
->
maxEntries
,
(
*
pHisto
)
->
elems
))
{
return
-
1
;
}
if
((
*
pHisto
)
->
elems
[
idx
].
val
==
val
&&
idx
>=
0
)
{
if
((
*
pHisto
)
->
elems
[
idx
].
val
==
val
&&
idx
>=
0
)
{
(
*
pHisto
)
->
elems
[
idx
].
num
+=
1
;
(
*
pHisto
)
->
elems
[
idx
].
num
+=
1
;
...
@@ -84,15 +87,27 @@ int32_t tHistogramAdd(SHistogramInfo** pHisto, double val) {
...
@@ -84,15 +87,27 @@ int32_t tHistogramAdd(SHistogramInfo** pHisto, double val) {
}
else
{
/* insert a new slot */
}
else
{
/* insert a new slot */
if
((
*
pHisto
)
->
numOfElems
>=
1
&&
idx
<
(
*
pHisto
)
->
numOfEntries
)
{
if
((
*
pHisto
)
->
numOfElems
>=
1
&&
idx
<
(
*
pHisto
)
->
numOfEntries
)
{
if
(
idx
>
0
)
{
if
(
idx
>
0
)
{
assert
((
*
pHisto
)
->
elems
[
idx
-
1
].
val
<=
val
);
if
(
ASSERTS
((
*
pHisto
)
->
elems
[
idx
-
1
].
val
<=
val
,
"tHistogramAdd Error, elems[%d].val:%lf, val:%lf"
,
idx
-
1
,
(
*
pHisto
)
->
elems
[
idx
-
1
].
val
,
val
))
{
return
-
1
;
}
}
else
{
}
else
{
assert
((
*
pHisto
)
->
elems
[
idx
].
val
>
val
);
if
(
ASSERTS
((
*
pHisto
)
->
elems
[
idx
].
val
>
val
,
"tHistogramAdd Error, elems[%d].val:%lf, val:%lf"
,
idx
,
(
*
pHisto
)
->
elems
[
idx
].
val
,
val
))
{
return
-
1
;
}
}
}
}
else
if
((
*
pHisto
)
->
numOfElems
>
0
)
{
}
else
if
((
*
pHisto
)
->
numOfElems
>
0
)
{
assert
((
*
pHisto
)
->
elems
[(
*
pHisto
)
->
numOfEntries
].
val
<=
val
);
if
(
ASSERTS
((
*
pHisto
)
->
elems
[(
*
pHisto
)
->
numOfEntries
].
val
<=
val
,
"tHistogramAdd Error, elems[%d].val:%lf, val:%lf"
,
(
*
pHisto
)
->
numOfEntries
,
(
*
pHisto
)
->
elems
[
idx
].
val
,
val
))
{
return
-
1
;
}
}
}
histogramCreateBin
(
*
pHisto
,
idx
,
val
);
int32_t
code
=
histogramCreateBin
(
*
pHisto
,
idx
,
val
);
if
(
code
!=
0
)
{
return
code
;
}
}
}
#else
#else
tSkipListKey
key
=
tSkipListCreateKey
(
TSDB_DATA_TYPE_DOUBLE
,
&
val
,
tDataTypes
[
TSDB_DATA_TYPE_DOUBLE
].
nSize
);
tSkipListKey
key
=
tSkipListCreateKey
(
TSDB_DATA_TYPE_DOUBLE
,
&
val
,
tDataTypes
[
TSDB_DATA_TYPE_DOUBLE
].
nSize
);
...
@@ -151,7 +166,6 @@ int32_t tHistogramAdd(SHistogramInfo** pHisto, double val) {
...
@@ -151,7 +166,6 @@ int32_t tHistogramAdd(SHistogramInfo** pHisto, double val) {
if
((
*
pHisto
)
->
numOfEntries
>=
(
*
pHisto
)
->
maxEntries
+
1
)
{
if
((
*
pHisto
)
->
numOfEntries
>=
(
*
pHisto
)
->
maxEntries
+
1
)
{
// set the right value for loser-tree
// set the right value for loser-tree
assert
((
*
pHisto
)
->
pLoserTree
!=
NULL
);
if
(
!
(
*
pHisto
)
->
ordered
)
{
if
(
!
(
*
pHisto
)
->
ordered
)
{
SSkipListPrint
((
*
pHisto
)
->
pList
,
1
);
SSkipListPrint
((
*
pHisto
)
->
pList
,
1
);
...
@@ -203,7 +217,10 @@ int32_t tHistogramAdd(SHistogramInfo** pHisto, double val) {
...
@@ -203,7 +217,10 @@ int32_t tHistogramAdd(SHistogramInfo** pHisto, double val) {
tSkipListNode
*
pNext
=
pNode
->
pForward
[
0
];
tSkipListNode
*
pNext
=
pNode
->
pForward
[
0
];
SHistBin
*
pNextEntry
=
(
SHistBin
*
)
pNext
->
pData
;
SHistBin
*
pNextEntry
=
(
SHistBin
*
)
pNext
->
pData
;
assert
(
pNextEntry
->
val
-
pEntry
->
val
==
pEntry
->
delta
);
if
(
ASSERTS
(
pNextEntry
->
val
-
pEntry
->
val
==
pEntry
->
delta
,
"tHistogramAdd Error, pNextEntry->val:%lf, pEntry->val:%lf, pEntry->delta:%lf"
,
pNextEntry
->
val
,
pEntry
->
val
,
pEntry
->
delta
))
{
return
-
1
;
}
double
newVal
=
(
pEntry
->
val
*
pEntry
->
num
+
pNextEntry
->
val
*
pNextEntry
->
num
)
/
(
pEntry
->
num
+
pNextEntry
->
num
);
double
newVal
=
(
pEntry
->
val
*
pEntry
->
num
+
pNextEntry
->
val
*
pNextEntry
->
num
)
/
(
pEntry
->
num
+
pNextEntry
->
num
);
pEntry
->
val
=
newVal
;
pEntry
->
val
=
newVal
;
...
@@ -253,7 +270,9 @@ int32_t tHistogramAdd(SHistogramInfo** pHisto, double val) {
...
@@ -253,7 +270,9 @@ int32_t tHistogramAdd(SHistogramInfo** pHisto, double val) {
}
else
{
}
else
{
SHistBin
*
pEntry
=
(
SHistBin
*
)
pResNode
->
pData
;
SHistBin
*
pEntry
=
(
SHistBin
*
)
pResNode
->
pData
;
assert
(
pEntry
->
val
==
val
);
if
(
ASSERTS
(
pEntry
->
val
==
val
,
"tHistogramAdd Error, pEntry->val:%lf, val:%lf"
))
{
return
-
1
;
}
pEntry
->
num
+=
1
;
pEntry
->
num
+=
1
;
}
}
...
@@ -329,7 +348,10 @@ int32_t histogramCreateBin(SHistogramInfo* pHisto, int32_t index, double val) {
...
@@ -329,7 +348,10 @@ int32_t histogramCreateBin(SHistogramInfo* pHisto, int32_t index, double val) {
memmove
(
&
pHisto
->
elems
[
index
+
1
],
&
pHisto
->
elems
[
index
],
sizeof
(
SHistBin
)
*
remain
);
memmove
(
&
pHisto
->
elems
[
index
+
1
],
&
pHisto
->
elems
[
index
],
sizeof
(
SHistBin
)
*
remain
);
}
}
assert
(
index
>=
0
&&
index
<=
pHisto
->
maxEntries
);
if
(
ASSERTS
(
index
>=
0
&&
index
<=
pHisto
->
maxEntries
,
"histogramCreateBin Error, index:%d, maxEntries:%d"
,
index
,
pHisto
->
maxEntries
))
{
return
-
1
;
}
pHisto
->
elems
[
index
].
num
=
1
;
pHisto
->
elems
[
index
].
num
=
1
;
pHisto
->
elems
[
index
].
val
=
val
;
pHisto
->
elems
[
index
].
val
=
val
;
...
@@ -343,7 +365,11 @@ int32_t histogramCreateBin(SHistogramInfo* pHisto, int32_t index, double val) {
...
@@ -343,7 +365,11 @@ int32_t histogramCreateBin(SHistogramInfo* pHisto, int32_t index, double val) {
pHisto
->
elems
[
pHisto
->
maxEntries
].
num
=
0
;
pHisto
->
elems
[
pHisto
->
maxEntries
].
num
=
0
;
}
}
#endif
#endif
assert
(
pHisto
->
numOfEntries
<=
pHisto
->
maxEntries
);
if
(
ASSERTS
(
pHisto
->
numOfEntries
<=
pHisto
->
maxEntries
,
"histogramCreateBin Error, numOfEntries:%d, maxEntries:%d"
,
pHisto
->
numOfEntries
,
pHisto
->
maxEntries
))
{
return
-
1
;
}
return
0
;
return
0
;
}
}
...
@@ -386,12 +412,14 @@ int64_t tHistogramSum(SHistogramInfo* pHisto, double v) {
...
@@ -386,12 +412,14 @@ int64_t tHistogramSum(SHistogramInfo* pHisto, double v) {
if
(
slotIdx
<
0
)
{
if
(
slotIdx
<
0
)
{
slotIdx
=
0
;
slotIdx
=
0
;
assert
(
v
<=
pHisto
->
elems
[
slotIdx
].
val
);
ASSERTS
(
v
<=
pHisto
->
elems
[
slotIdx
].
val
,
"tHistogramSum Error, elems[%d].val:%lf, v:%lf"
,
slotIdx
,
pHisto
->
elems
[
slotIdx
].
val
,
v
);
}
else
{
}
else
{
assert
(
v
>=
pHisto
->
elems
[
slotIdx
].
val
);
ASSERTS
(
v
>=
pHisto
->
elems
[
slotIdx
].
val
,
"tHistogramSum Error, elems[%d].val:%lf, v:%lf"
,
slotIdx
,
pHisto
->
elems
[
slotIdx
].
val
,
v
);
if
(
slotIdx
+
1
<
pHisto
->
numOfEntries
)
{
if
(
slotIdx
+
1
<
pHisto
->
numOfEntries
)
{
assert
(
v
<
pHisto
->
elems
[
slotIdx
+
1
].
val
);
ASSERTS
(
v
<
pHisto
->
elems
[
slotIdx
+
1
].
val
,
"tHistogramSum Error, elems[%d].val:%lf, v:%lf"
,
slotIdx
+
1
,
pHisto
->
elems
[
slotIdx
+
1
].
val
,
v
);
}
}
}
}
}
}
...
@@ -445,7 +473,9 @@ double* tHistogramUniform(SHistogramInfo* pHisto, double* ratio, int32_t num) {
...
@@ -445,7 +473,9 @@ double* tHistogramUniform(SHistogramInfo* pHisto, double* ratio, int32_t num) {
j
+=
1
;
j
+=
1
;
}
}
assert
(
total
<=
numOfElem
&&
total
+
pHisto
->
elems
[
j
+
1
].
num
>
numOfElem
);
ASSERTS
(
total
<=
numOfElem
&&
total
+
pHisto
->
elems
[
j
+
1
].
num
>
numOfElem
,
"tHistogramUniform Error, total:%d, numOfElem:%d, elems[%d].num:%d"
,
total
,
numOfElem
,
j
+
1
,
pHisto
->
elems
[
j
+
1
].
num
);
double
delta
=
numOfElem
-
total
;
double
delta
=
numOfElem
-
total
;
if
(
fabs
(
delta
)
<
FLT_EPSILON
)
{
if
(
fabs
(
delta
)
<
FLT_EPSILON
)
{
...
@@ -502,7 +532,9 @@ double* tHistogramUniform(SHistogramInfo* pHisto, double* ratio, int32_t num) {
...
@@ -502,7 +532,9 @@ double* tHistogramUniform(SHistogramInfo* pHisto, double* ratio, int32_t num) {
j
+=
1
;
j
+=
1
;
}
}
assert
(
total
<=
numOfElem
&&
total
+
pEntry
->
num
>
numOfElem
);
ASSERTS
(
total
<=
numOfElem
&&
total
+
pEntry
->
num
>
numOfElem
,
"tHistogramUniform Error, total:%d, numOfElem:%d, pEntry->num:%d"
,
total
,
numOfElem
,
pEntry
->
num
);
double
delta
=
numOfElem
-
total
;
double
delta
=
numOfElem
-
total
;
if
(
fabs
(
delta
)
<
FLT_EPSILON
)
{
if
(
fabs
(
delta
)
<
FLT_EPSILON
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录