Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
ebfadc24
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看板
提交
ebfadc24
编写于
4月 13, 2023
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
optimize read small tsdb page
上级
e214f93d
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
75 addition
and
69 deletion
+75
-69
source/dnode/vnode/src/inc/tsdb.h
source/dnode/vnode/src/inc/tsdb.h
+8
-7
source/dnode/vnode/src/tsdb/tsdbReaderWriter.c
source/dnode/vnode/src/tsdb/tsdbReaderWriter.c
+67
-62
未找到文件。
source/dnode/vnode/src/inc/tsdb.h
浏览文件 @
ebfadc24
...
@@ -621,13 +621,14 @@ struct SRowMerger {
...
@@ -621,13 +621,14 @@ struct SRowMerger {
};
};
typedef
struct
{
typedef
struct
{
char
*
path
;
const
char
*
path
;
int32_t
szPage
;
int32_t
oflag
;
int32_t
flag
;
int32_t
pageSize
;
TdFilePtr
pFD
;
int32_t
nCachePage
;
int64_t
pgno
;
TdFilePtr
pFD
;
uint8_t
*
pBuf
;
int64_t
pgno
;
int64_t
szFile
;
uint8_t
*
pBuf
;
int64_t
szFile
;
}
STsdbFD
;
}
STsdbFD
;
struct
SDelFWriter
{
struct
SDelFWriter
{
...
...
source/dnode/vnode/src/tsdb/tsdbReaderWriter.c
浏览文件 @
ebfadc24
...
@@ -16,65 +16,65 @@
...
@@ -16,65 +16,65 @@
#include "tsdb.h"
#include "tsdb.h"
// =============== PAGE-WISE FILE ===============
// =============== PAGE-WISE FILE ===============
static
int32_t
tsdbOpenFile
(
const
char
*
path
,
int32_t
szPage
,
int32_t
flag
,
STsdbFD
**
ppFD
)
{
static
int32_t
tsdbOpenFile
(
const
char
*
path
,
int32_t
pageSize
,
int32_t
oflag
,
STsdbFD
**
ppFD
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
STsdbFD
*
pFD
=
NULL
;
*
ppFD
=
NULL
;
p
FD
=
(
STsdbFD
*
)
taosMemoryCalloc
(
1
,
sizeof
(
*
pFD
)
+
strlen
(
path
)
+
1
);
p
pFD
[
0
]
=
(
STsdbFD
*
)
taosMemoryCalloc
(
1
,
sizeof
(
*
ppFD
[
0
]
)
+
strlen
(
path
)
+
1
);
if
(
p
FD
==
NULL
)
{
if
(
p
pFD
[
0
]
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_exit
;
return
code
;
}
strcpy
((
char
*
)(
ppFD
[
0
]
+
1
),
path
);
ppFD
[
0
]
->
path
=
(
char
*
)(
ppFD
[
0
]
+
1
);
ppFD
[
0
]
->
oflag
=
oflag
;
ppFD
[
0
]
->
pageSize
=
pageSize
;
if
(
oflag
==
TD_FILE_READ
)
{
ppFD
[
0
]
->
nCachePage
=
16
;
}
else
{
ppFD
[
0
]
->
nCachePage
=
1
;
}
}
pFD
->
path
=
(
char
*
)
&
pFD
[
1
];
ppFD
[
0
]
->
pFD
=
taosOpenFile
(
path
,
oflag
);
strcpy
(
pFD
->
path
,
path
);
if
(
ppFD
[
0
]
->
pFD
==
NULL
)
{
pFD
->
szPage
=
szPage
;
pFD
->
flag
=
flag
;
pFD
->
pFD
=
taosOpenFile
(
path
,
flag
);
if
(
pFD
->
pFD
==
NULL
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
code
=
TAOS_SYSTEM_ERROR
(
errno
);
taosMemoryFree
(
pFD
);
taosMemoryFree
Clear
(
ppFD
[
0
]
);
goto
_exit
;
return
code
;
}
}
pFD
->
szPage
=
szPage
;
p
FD
->
pgno
=
0
;
p
pFD
[
0
]
->
pgno
=
0
;
p
FD
->
pBuf
=
taosMemoryCalloc
(
1
,
szPag
e
);
p
pFD
[
0
]
->
pBuf
=
taosMemoryCalloc
(
ppFD
[
0
]
->
nCachePage
,
pageSiz
e
);
if
(
p
FD
->
pBuf
==
NULL
)
{
if
(
p
pFD
[
0
]
->
pBuf
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
code
=
TSDB_CODE_OUT_OF_MEMORY
;
taosCloseFile
(
&
p
FD
->
pFD
);
taosCloseFile
(
&
p
pFD
[
0
]
->
pFD
);
taosMemoryFree
(
p
FD
);
taosMemoryFree
(
p
pFD
[
0
]
);
goto
_exit
;
return
code
;
}
}
// not check file size when reading data files.
// not check file size when reading data files.
if
(
flag
!=
TD_FILE_READ
)
{
if
(
oflag
==
TD_FILE_READ
)
return
0
;
if
(
taosStatFile
(
path
,
&
pFD
->
szFile
,
NULL
)
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
taosMemoryFree
(
pFD
->
pBuf
);
taosCloseFile
(
&
pFD
->
pFD
);
taosMemoryFree
(
pFD
);
goto
_exit
;
}
ASSERT
(
pFD
->
szFile
%
szPage
==
0
);
if
(
taosStatFile
(
path
,
&
ppFD
[
0
]
->
szFile
,
NULL
)
<
0
)
{
pFD
->
szFile
=
pFD
->
szFile
/
szPage
;
code
=
TAOS_SYSTEM_ERROR
(
errno
);
taosMemoryFree
(
ppFD
[
0
]
->
pBuf
);
taosCloseFile
(
&
ppFD
[
0
]
->
pFD
);
taosMemoryFree
(
ppFD
[
0
]);
return
code
;
}
}
*
ppFD
=
pFD
;
ASSERT
(
ppFD
[
0
]
->
szFile
%
pageSize
==
0
);
ppFD
[
0
]
->
szFile
=
ppFD
[
0
]
->
szFile
/
pageSize
;
_exit:
_exit:
return
code
;
return
0
;
}
}
static
void
tsdbCloseFile
(
STsdbFD
**
ppFD
)
{
static
void
tsdbCloseFile
(
STsdbFD
**
ppFD
)
{
STsdbFD
*
pFD
=
*
ppFD
;
if
(
ppFD
[
0
])
{
if
(
pFD
)
{
taosMemoryFree
(
ppFD
[
0
]
->
pBuf
);
taosMemoryFree
(
pFD
->
pBuf
);
taosCloseFile
(
&
ppFD
[
0
]
->
pFD
);
taosCloseFile
(
&
pFD
->
pFD
);
taosMemoryFreeClear
(
ppFD
[
0
]);
taosMemoryFree
(
pFD
);
*
ppFD
=
NULL
;
}
}
}
}
...
@@ -82,15 +82,15 @@ static int32_t tsdbWriteFilePage(STsdbFD *pFD) {
...
@@ -82,15 +82,15 @@ static int32_t tsdbWriteFilePage(STsdbFD *pFD) {
int32_t
code
=
0
;
int32_t
code
=
0
;
if
(
pFD
->
pgno
>
0
)
{
if
(
pFD
->
pgno
>
0
)
{
int64_t
n
=
taosLSeekFile
(
pFD
->
pFD
,
PAGE_OFFSET
(
pFD
->
pgno
,
pFD
->
szPag
e
),
SEEK_SET
);
int64_t
n
=
taosLSeekFile
(
pFD
->
pFD
,
PAGE_OFFSET
(
pFD
->
pgno
,
pFD
->
pageSiz
e
),
SEEK_SET
);
if
(
n
<
0
)
{
if
(
n
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_exit
;
goto
_exit
;
}
}
taosCalcChecksumAppend
(
0
,
pFD
->
pBuf
,
pFD
->
szPag
e
);
taosCalcChecksumAppend
(
0
,
pFD
->
pBuf
,
pFD
->
pageSiz
e
);
n
=
taosWriteFile
(
pFD
->
pFD
,
pFD
->
pBuf
,
pFD
->
szPag
e
);
n
=
taosWriteFile
(
pFD
->
pFD
,
pFD
->
pBuf
,
pFD
->
pageSiz
e
);
if
(
n
<
0
)
{
if
(
n
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_exit
;
goto
_exit
;
...
@@ -112,7 +112,7 @@ static int32_t tsdbReadFilePage(STsdbFD *pFD, int64_t pgno) {
...
@@ -112,7 +112,7 @@ static int32_t tsdbReadFilePage(STsdbFD *pFD, int64_t pgno) {
// ASSERT(pgno <= pFD->szFile);
// ASSERT(pgno <= pFD->szFile);
// seek
// seek
int64_t
offset
=
PAGE_OFFSET
(
pgno
,
pFD
->
szPag
e
);
int64_t
offset
=
PAGE_OFFSET
(
pgno
,
pFD
->
pageSiz
e
);
int64_t
n
=
taosLSeekFile
(
pFD
->
pFD
,
offset
,
SEEK_SET
);
int64_t
n
=
taosLSeekFile
(
pFD
->
pFD
,
offset
,
SEEK_SET
);
if
(
n
<
0
)
{
if
(
n
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
code
=
TAOS_SYSTEM_ERROR
(
errno
);
...
@@ -120,19 +120,22 @@ static int32_t tsdbReadFilePage(STsdbFD *pFD, int64_t pgno) {
...
@@ -120,19 +120,22 @@ static int32_t tsdbReadFilePage(STsdbFD *pFD, int64_t pgno) {
}
}
// read
// read
n
=
taosReadFile
(
pFD
->
pFD
,
pFD
->
pBuf
,
pFD
->
sz
Page
);
n
=
taosReadFile
(
pFD
->
pFD
,
pFD
->
pBuf
,
pFD
->
pageSize
*
pFD
->
nCache
Page
);
if
(
n
<
0
)
{
if
(
n
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_exit
;
goto
_exit
;
}
else
if
(
n
<
pFD
->
szPage
)
{
code
=
TSDB_CODE_FILE_CORRUPTED
;
goto
_exit
;
}
}
ASSERT
(
n
%
pFD
->
pageSize
==
0
);
// check
// check
if
(
pgno
>
1
&&
!
taosCheckChecksumWhole
(
pFD
->
pBuf
,
pFD
->
szPage
))
{
if
(
pgno
>
1
)
{
code
=
TSDB_CODE_FILE_CORRUPTED
;
for
(
int32_t
i
=
0
;
i
<
n
/
pFD
->
pageSize
;
++
i
)
{
goto
_exit
;
if
(
!
taosCheckChecksumWhole
(
pFD
->
pBuf
+
i
*
pFD
->
pageSize
,
pFD
->
pageSize
))
{
code
=
TSDB_CODE_FILE_CORRUPTED
;
goto
_exit
;
}
}
}
}
pFD
->
pgno
=
pgno
;
pFD
->
pgno
=
pgno
;
...
@@ -143,9 +146,9 @@ _exit:
...
@@ -143,9 +146,9 @@ _exit:
static
int32_t
tsdbWriteFile
(
STsdbFD
*
pFD
,
int64_t
offset
,
const
uint8_t
*
pBuf
,
int64_t
size
)
{
static
int32_t
tsdbWriteFile
(
STsdbFD
*
pFD
,
int64_t
offset
,
const
uint8_t
*
pBuf
,
int64_t
size
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
int64_t
fOffset
=
LOGIC_TO_FILE_OFFSET
(
offset
,
pFD
->
szPag
e
);
int64_t
fOffset
=
LOGIC_TO_FILE_OFFSET
(
offset
,
pFD
->
pageSiz
e
);
int64_t
pgno
=
OFFSET_PGNO
(
fOffset
,
pFD
->
szPag
e
);
int64_t
pgno
=
OFFSET_PGNO
(
fOffset
,
pFD
->
pageSiz
e
);
int64_t
bOffset
=
fOffset
%
pFD
->
szPag
e
;
int64_t
bOffset
=
fOffset
%
pFD
->
pageSiz
e
;
int64_t
n
=
0
;
int64_t
n
=
0
;
do
{
do
{
...
@@ -161,7 +164,7 @@ static int32_t tsdbWriteFile(STsdbFD *pFD, int64_t offset, const uint8_t *pBuf,
...
@@ -161,7 +164,7 @@ static int32_t tsdbWriteFile(STsdbFD *pFD, int64_t offset, const uint8_t *pBuf,
}
}
}
}
int64_t
nWrite
=
TMIN
(
PAGE_CONTENT_SIZE
(
pFD
->
szPag
e
)
-
bOffset
,
size
-
n
);
int64_t
nWrite
=
TMIN
(
PAGE_CONTENT_SIZE
(
pFD
->
pageSiz
e
)
-
bOffset
,
size
-
n
);
memcpy
(
pFD
->
pBuf
+
bOffset
,
pBuf
+
n
,
nWrite
);
memcpy
(
pFD
->
pBuf
+
bOffset
,
pBuf
+
n
,
nWrite
);
pgno
++
;
pgno
++
;
...
@@ -176,22 +179,24 @@ _exit:
...
@@ -176,22 +179,24 @@ _exit:
static
int32_t
tsdbReadFile
(
STsdbFD
*
pFD
,
int64_t
offset
,
uint8_t
*
pBuf
,
int64_t
size
)
{
static
int32_t
tsdbReadFile
(
STsdbFD
*
pFD
,
int64_t
offset
,
uint8_t
*
pBuf
,
int64_t
size
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
int64_t
n
=
0
;
int64_t
n
=
0
;
int64_t
fOffset
=
LOGIC_TO_FILE_OFFSET
(
offset
,
pFD
->
szPag
e
);
int64_t
fOffset
=
LOGIC_TO_FILE_OFFSET
(
offset
,
pFD
->
pageSiz
e
);
int64_t
pgno
=
OFFSET_PGNO
(
fOffset
,
pFD
->
szPag
e
);
int64_t
pgno
=
OFFSET_PGNO
(
fOffset
,
pFD
->
pageSiz
e
);
int32_t
szPgCont
=
PAGE_CONTENT_SIZE
(
pFD
->
szPag
e
);
int32_t
szPgCont
=
PAGE_CONTENT_SIZE
(
pFD
->
pageSiz
e
);
int64_t
bOffset
=
fOffset
%
pFD
->
szPag
e
;
int64_t
bOffset
=
fOffset
%
pFD
->
pageSiz
e
;
// ASSERT(pgno && pgno <= pFD->szFile);
// ASSERT(pgno && pgno <= pFD->szFile);
ASSERT
(
bOffset
<
szPgCont
);
ASSERT
(
bOffset
<
szPgCont
);
while
(
n
<
size
)
{
while
(
n
<
size
)
{
if
(
pFD
->
pgno
!=
pgno
)
{
if
(
pFD
->
pgno
==
0
//
||
(
pgno
<
pFD
->
pgno
//
||
pgno
>=
pFD
->
pgno
+
pFD
->
nCachePage
))
{
code
=
tsdbReadFilePage
(
pFD
,
pgno
);
code
=
tsdbReadFilePage
(
pFD
,
pgno
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
}
}
int64_t
nRead
=
TMIN
(
szPgCont
-
bOffset
,
size
-
n
);
int64_t
nRead
=
TMIN
(
szPgCont
-
bOffset
,
size
-
n
);
memcpy
(
pBuf
+
n
,
pFD
->
pBuf
+
bOffset
,
nRead
);
memcpy
(
pBuf
+
n
,
pFD
->
pBuf
+
pFD
->
pageSize
*
(
pgno
-
pFD
->
pgno
)
+
bOffset
,
nRead
);
n
+=
nRead
;
n
+=
nRead
;
pgno
++
;
pgno
++
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录