Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
0271f943
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1187
Star
22018
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看板
提交
0271f943
编写于
7月 31, 2020
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refact FGroup Iter make it multi-thread safe
上级
89c81042
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
51 addition
and
29 deletion
+51
-29
src/tsdb/inc/tsdbMain.h
src/tsdb/inc/tsdbMain.h
+3
-3
src/tsdb/src/tsdbFile.c
src/tsdb/src/tsdbFile.c
+46
-26
src/tsdb/src/tsdbRead.c
src/tsdb/src/tsdbRead.c
+2
-0
未找到文件。
src/tsdb/inc/tsdbMain.h
浏览文件 @
0271f943
...
...
@@ -183,10 +183,10 @@ typedef struct {
}
STsdbFileH
;
typedef
struct
{
int
numOfFGroups
;
SFileGroup
*
base
;
SFileGroup
*
pFileGroup
;
int
direction
;
STsdbFileH
*
pFileH
;
int
fileId
;
int
index
;
}
SFileGroupIter
;
// ------------------ tsdbMain.c
...
...
src/tsdb/src/tsdbFile.c
浏览文件 @
0271f943
...
...
@@ -156,8 +156,10 @@ SFileGroup *tsdbCreateFGroupIfNeed(STsdbRepo *pRepo, char *dataDir, int fid) {
goto
_err
;
}
pthread_rwlock_wrlock
(
&
pFileH
->
fhlock
);
pFileH
->
pFGroup
[
pFileH
->
nFGroups
++
]
=
fGroup
;
qsort
((
void
*
)(
pFileH
->
pFGroup
),
pFileH
->
nFGroups
,
sizeof
(
SFileGroup
),
compFGroup
);
pthread_rwlock_unlock
(
&
pFileH
->
fhlock
);
return
tsdbSearchFGroup
(
pFileH
,
fid
,
TD_EQ
);
}
...
...
@@ -168,54 +170,72 @@ _err:
return
NULL
;
}
void
tsdbInitFileGroupIter
(
STsdbFileH
*
pFileH
,
SFileGroupIter
*
pIter
,
int
direction
)
{
// TODO
void
tsdbInitFileGroupIter
(
STsdbFileH
*
pFileH
,
SFileGroupIter
*
pIter
,
int
direction
)
{
pIter
->
pFileH
=
pFileH
;
pIter
->
direction
=
direction
;
pIter
->
base
=
pFileH
->
pFGroup
;
pIter
->
numOfFGroups
=
pFileH
->
nFGroups
;
if
(
pFileH
->
nFGroups
==
0
)
{
pIter
->
pFileGroup
=
NULL
;
pIter
->
index
=
-
1
;
pIter
->
fileId
=
-
1
;
}
else
{
if
(
direction
==
TSDB_FGROUP_ITER_FORWARD
)
{
pIter
->
pFileGroup
=
pFileH
->
pFGroup
;
pIter
->
index
=
0
;
}
else
{
pIter
->
pFileGroup
=
pFileH
->
pFGroup
+
pFileH
->
nFGroups
-
1
;
pIter
->
index
=
pFileH
->
nFGroups
-
1
;
}
pIter
->
fileId
=
pFileH
->
pFGroup
[
pIter
->
index
].
fileId
;
}
}
void
tsdbSeekFileGroupIter
(
SFileGroupIter
*
pIter
,
int
fid
)
{
// TODO
if
(
pIter
->
numOfFGroups
==
0
)
{
assert
(
pIter
->
pFileGroup
==
NULL
);
void
tsdbSeekFileGroupIter
(
SFileGroupIter
*
pIter
,
int
fid
)
{
STsdbFileH
*
pFileH
=
pIter
->
pFileH
;
if
(
pFileH
->
nFGroups
==
0
)
{
pIter
->
index
=
-
1
;
pIter
->
fileId
=
-
1
;
return
;
}
int
flags
=
(
pIter
->
direction
==
TSDB_FGROUP_ITER_FORWARD
)
?
TD_GE
:
TD_LE
;
void
*
ptr
=
taosbsearch
(
&
fid
,
pIter
->
base
,
pIter
->
numOf
FGroups
,
sizeof
(
SFileGroup
),
keyFGroupCompFunc
,
flags
);
void
*
ptr
=
taosbsearch
(
&
fid
,
(
void
*
)
pFileH
->
pFGroup
,
pFileH
->
n
FGroups
,
sizeof
(
SFileGroup
),
keyFGroupCompFunc
,
flags
);
if
(
ptr
==
NULL
)
{
pIter
->
pFileGroup
=
NULL
;
pIter
->
index
=
-
1
;
pIter
->
fileId
=
-
1
;
}
else
{
pIter
->
pFileGroup
=
(
SFileGroup
*
)
ptr
;
pIter
->
index
=
POINTER_DISTANCE
(
ptr
,
pFileH
->
pFGroup
)
/
sizeof
(
SFileGroup
);
pIter
->
fileId
=
((
SFileGroup
*
)
ptr
)
->
fileId
;
}
}
SFileGroup
*
tsdbGetFileGroupNext
(
SFileGroupIter
*
pIter
)
{
//TODO
SFileGroup
*
ret
=
pIter
->
pFileGroup
;
if
(
ret
==
NULL
)
return
NULL
;
SFileGroup
*
tsdbGetFileGroupNext
(
SFileGroupIter
*
pIter
)
{
STsdbFileH
*
pFileH
=
pIter
->
pFileH
;
SFileGroup
*
pFGroup
=
NULL
;
if
(
pIter
->
index
<
0
||
pIter
->
index
>=
pFileH
->
nFGroups
||
pIter
->
fileId
<
0
)
return
NULL
;
pFGroup
=
&
pFileH
->
pFGroup
[
pIter
->
index
];
if
(
pFGroup
->
fileId
!=
pIter
->
fileId
)
{
tsdbSeekFileGroupIter
(
pIter
,
pIter
->
fileId
);
}
if
(
pIter
->
index
<
0
)
return
NULL
;
pFGroup
=
&
pFileH
->
pFGroup
[
pIter
->
index
];
ASSERT
(
pFGroup
->
fileId
==
pIter
->
fileId
);
if
(
pIter
->
direction
==
TSDB_FGROUP_ITER_FORWARD
)
{
if
((
pIter
->
pFileGroup
+
1
)
==
(
pIter
->
base
+
pIter
->
numOfFGroups
))
{
pIter
->
pFileGroup
=
NULL
;
}
else
{
pIter
->
pFileGroup
+=
1
;
}
pIter
->
index
++
;
}
else
{
if
(
pIter
->
pFileGroup
==
pIter
->
base
)
{
pIter
->
pFileGroup
=
NULL
;
}
else
{
pIter
->
pFileGroup
-=
1
;
}
pIter
->
index
--
;
}
return
ret
;
if
(
pIter
->
index
>=
0
&&
pIter
->
index
<
pFileH
->
nFGroups
)
{
pIter
->
fileId
=
pFileH
->
pFGroup
[
pIter
->
index
].
fileId
;
}
else
{
pIter
->
fileId
=
-
1
;
}
return
pFGroup
;
}
int
tsdbOpenFile
(
SFile
*
pFile
,
int
oflag
)
{
...
...
src/tsdb/src/tsdbRead.c
浏览文件 @
0271f943
...
...
@@ -1539,8 +1539,10 @@ static int32_t getDataBlocksInFiles(STsdbQueryHandle* pQueryHandle, bool* exists
STsdbCfg
*
pCfg
=
&
pQueryHandle
->
pTsdb
->
config
;
int32_t
fid
=
getFileIdFromKey
(
pQueryHandle
->
window
.
skey
,
pCfg
->
daysPerFile
,
pCfg
->
precision
);
pthread_rwlock_rdlock
(
&
pQueryHandle
->
pTsdb
->
tsdbFileH
->
fhlock
);
tsdbInitFileGroupIter
(
pFileHandle
,
&
pQueryHandle
->
fileIter
,
pQueryHandle
->
order
);
tsdbSeekFileGroupIter
(
&
pQueryHandle
->
fileIter
,
fid
);
pthread_rwlock_unlock
(
&
pQueryHandle
->
pTsdb
->
tsdbFileH
->
fhlock
);
return
getDataBlocksInFilesImpl
(
pQueryHandle
,
exists
);
}
else
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录