Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
acea9ee3
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看板
提交
acea9ee3
编写于
12月 22, 2021
作者:
A
Alex Duan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[TS-445] merge memory test passed
上级
7da7390d
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
39 addition
and
23 deletion
+39
-23
src/tsdb/src/tsdbRead.c
src/tsdb/src/tsdbRead.c
+19
-23
src/util/inc/tutil.h
src/util/inc/tutil.h
+7
-0
src/util/src/tutil.c
src/util/src/tutil.c
+13
-0
未找到文件。
src/tsdb/src/tsdbRead.c
浏览文件 @
acea9ee3
...
@@ -1073,7 +1073,13 @@ static int32_t binarySearchForBlock(SBlock* pBlock, int32_t numOfBlocks, TSKEY s
...
@@ -1073,7 +1073,13 @@ static int32_t binarySearchForBlock(SBlock* pBlock, int32_t numOfBlocks, TSKEY s
// array :1 2 3 5 7 -2 (8 9) skip 4 and 6
// array :1 2 3 5 7 -2 (8 9) skip 4 and 6
int32_t
memMoveByArray
(
SBlock
*
blocks
,
SArray
*
pArray
)
{
int32_t
memMoveByArray
(
SBlock
*
blocks
,
SArray
*
pArray
)
{
// pArray is NULL or size is zero , no need block to move
if
(
pArray
==
NULL
)
return
0
;
size_t
count
=
taosArrayGetSize
(
pArray
);
size_t
count
=
taosArrayGetSize
(
pArray
);
if
(
count
==
0
)
return
0
;
int32_t
*
idxs
=
(
int32_t
*
)
TARRAY_GET_START
(
pArray
);
int32_t
*
idxs
=
(
int32_t
*
)
TARRAY_GET_START
(
pArray
);
size_t
i
=
0
;
size_t
i
=
0
;
assert
(
count
>
0
);
assert
(
count
>
0
);
...
@@ -1122,42 +1128,27 @@ int32_t memMoveByArray(SBlock *blocks, SArray *pArray) {
...
@@ -1122,42 +1128,27 @@ int32_t memMoveByArray(SBlock *blocks, SArray *pArray) {
// if block data in memory return false else true
// if block data in memory return false else true
bool
blockNoItemInMem
(
STsdbQueryHandle
*
q
,
SBlock
*
pBlock
)
{
bool
blockNoItemInMem
(
STsdbQueryHandle
*
q
,
SBlock
*
pBlock
)
{
TSKEY
key
;
if
(
q
->
pMemRef
==
NULL
)
{
if
(
q
->
pMemRef
==
NULL
)
{
return
false
;
return
false
;
}
}
// mem
// mem
if
(
q
->
pMemRef
->
snapshot
.
mem
)
{
if
(
q
->
pMemRef
->
snapshot
.
mem
)
{
// first
SMemTable
*
mem
=
q
->
pMemRef
->
snapshot
.
mem
;
key
=
q
->
pMemRef
->
snapshot
.
mem
->
keyFirst
;
if
(
timeIntersect
(
mem
->
keyFirst
,
mem
->
keyLast
,
pBlock
->
keyFirst
,
pBlock
->
keyLast
))
if
(
key
>=
pBlock
->
keyFirst
&&
key
<=
pBlock
->
keyLast
)
{
return
false
;
return
false
;
}
}
// last
key
=
q
->
pMemRef
->
snapshot
.
mem
->
keyLast
;
if
(
key
>=
pBlock
->
keyFirst
&&
key
<=
pBlock
->
keyLast
)
{
return
false
;
}
}
// imem
// imem
if
(
q
->
pMemRef
->
snapshot
.
imem
)
{
if
(
q
->
pMemRef
->
snapshot
.
imem
)
{
// first
SMemTable
*
imem
=
q
->
pMemRef
->
snapshot
.
imem
;
key
=
q
->
pMemRef
->
snapshot
.
imem
->
keyFirst
;
if
(
timeIntersect
(
imem
->
keyFirst
,
imem
->
keyLast
,
pBlock
->
keyFirst
,
pBlock
->
keyLast
))
if
(
key
>=
pBlock
->
keyFirst
&&
key
<=
pBlock
->
keyLast
)
{
return
false
;
return
false
;
}
}
// last
key
=
q
->
pMemRef
->
snapshot
.
imem
->
keyLast
;
if
(
key
>=
pBlock
->
keyFirst
&&
key
<=
pBlock
->
keyLast
)
{
return
false
;
}
}
return
true
;
return
true
;
}
}
#define MAYBE_IN_MEMORY_ROWS 4000 // approximately the capacity of one block
// skip blocks . return value is skip blocks number, skip rows reduce from *pOffset
// skip blocks . return value is skip blocks number, skip rows reduce from *pOffset
static
int32_t
offsetSkipBlock
(
STsdbQueryHandle
*
q
,
SBlockInfo
*
pBlockInfo
,
int64_t
skey
,
int64_t
ekey
,
static
int32_t
offsetSkipBlock
(
STsdbQueryHandle
*
q
,
SBlockInfo
*
pBlockInfo
,
int64_t
skey
,
int64_t
ekey
,
int32_t
sblock
,
int32_t
eblock
,
SArray
**
ppArray
)
{
int32_t
sblock
,
int32_t
eblock
,
SArray
**
ppArray
)
{
...
@@ -1179,7 +1170,7 @@ static int32_t offsetSkipBlock(STsdbQueryHandle* q, SBlockInfo* pBlockInfo, int6
...
@@ -1179,7 +1170,7 @@ static int32_t offsetSkipBlock(STsdbQueryHandle* q, SBlockInfo* pBlockInfo, int6
q
->
frows
+=
pBlock
->
numOfRows
;
// some rows time < s
q
->
frows
+=
pBlock
->
numOfRows
;
// some rows time < s
}
else
{
}
else
{
// check can skip
// check can skip
if
(
q
->
srows
+
q
->
frows
+
pBlock
->
numOfRows
<=
q
->
offset
)
{
// approximately calculate
if
(
q
->
srows
+
q
->
frows
+
pBlock
->
numOfRows
+
MAYBE_IN_MEMORY_ROWS
<
q
->
offset
)
{
// approximately calculate
if
(
blockNoItemInMem
(
q
,
pBlock
))
{
if
(
blockNoItemInMem
(
q
,
pBlock
))
{
// can skip
// can skip
q
->
srows
+=
pBlock
->
numOfRows
;
q
->
srows
+=
pBlock
->
numOfRows
;
...
@@ -1286,13 +1277,19 @@ static void shrinkBlocksByQuery(STsdbQueryHandle *pQueryHandle, STableCheckInfo
...
@@ -1286,13 +1277,19 @@ static void shrinkBlocksByQuery(STsdbQueryHandle *pQueryHandle, STableCheckInfo
int32_t
end
=
start
;
int32_t
end
=
start
;
// locate e index of blocks -> end
// locate e index of blocks -> end
while
(
end
<
(
int32_t
)
compIndex
->
numOfBlocks
)
{
while
(
1
)
{
// check time
if
(
pCompInfo
->
blocks
[
end
].
keyFirst
<=
e
)
{
if
(
pCompInfo
->
blocks
[
end
].
keyFirst
<=
e
)
{
end
+=
1
;
end
+=
1
;
}
else
{
}
else
{
end
-=
1
;
end
-=
1
;
break
;
break
;
}
}
// check numOfBlock
if
(
end
==
(
int32_t
)
compIndex
->
numOfBlocks
)
{
end
-=
1
;
break
;
}
}
}
// calc offset can skip blocks number
// calc offset can skip blocks number
...
@@ -1303,7 +1300,6 @@ static void shrinkBlocksByQuery(STsdbQueryHandle *pQueryHandle, STableCheckInfo
...
@@ -1303,7 +1300,6 @@ static void shrinkBlocksByQuery(STsdbQueryHandle *pQueryHandle, STableCheckInfo
}
}
if
(
nSkip
>
0
)
{
// have offset and can skip
if
(
nSkip
>
0
)
{
// have offset and can skip
assert
(
pArray
);
pCheckInfo
->
numOfBlocks
=
memMoveByArray
(
pCompInfo
->
blocks
,
pArray
);
pCheckInfo
->
numOfBlocks
=
memMoveByArray
(
pCompInfo
->
blocks
,
pArray
);
}
else
{
// no offset
}
else
{
// no offset
pCheckInfo
->
numOfBlocks
=
end
-
start
+
1
;
pCheckInfo
->
numOfBlocks
=
end
-
start
+
1
;
...
...
src/util/inc/tutil.h
浏览文件 @
acea9ee3
...
@@ -54,6 +54,13 @@ static FORCE_INLINE void taosEncryptPass(uint8_t *inBuf, size_t inLen, char *tar
...
@@ -54,6 +54,13 @@ static FORCE_INLINE void taosEncryptPass(uint8_t *inBuf, size_t inLen, char *tar
memcpy
(
target
,
context
.
digest
,
TSDB_KEY_LEN
);
memcpy
(
target
,
context
.
digest
,
TSDB_KEY_LEN
);
}
}
//
// TSKEY util
//
// if time area(s1,e1) intersect with time area(s2,e2) then return true else return false
bool
timeIntersect
(
TSKEY
s1
,
TSKEY
e1
,
TSKEY
s2
,
TSKEY
e2
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
#endif
#endif
...
...
src/util/src/tutil.c
浏览文件 @
acea9ee3
...
@@ -470,3 +470,16 @@ FORCE_INLINE double taos_align_get_double(const char* pBuf) {
...
@@ -470,3 +470,16 @@ FORCE_INLINE double taos_align_get_double(const char* pBuf) {
memcpy
(
&
dv
,
pBuf
,
sizeof
(
dv
));
// in ARM, return *((const double*)(pBuf)) may cause problem
memcpy
(
&
dv
,
pBuf
,
sizeof
(
dv
));
// in ARM, return *((const double*)(pBuf)) may cause problem
return
dv
;
return
dv
;
}
}
//
// TSKEY util
//
// if time area(s1,e1) intersect with time area(s2,e2) then return true else return false
bool
timeIntersect
(
TSKEY
s1
,
TSKEY
e1
,
TSKEY
s2
,
TSKEY
e2
)
{
// s1,e1 and s2,e2 have 7 scenarios, 5 is intersection, 2 is no intersection, so we pick up 2.
if
(
e2
<
s1
||
s2
>
e1
)
return
false
;
else
return
true
;
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录