Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
64f29040
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
提交
64f29040
编写于
3月 03, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more
上级
081677b2
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
119 addition
and
36 deletion
+119
-36
source/libs/tdb/src/db/tdbPager.c
source/libs/tdb/src/db/tdbPager.c
+119
-35
source/libs/tdb/src/inc/tdbPager.h
source/libs/tdb/src/inc/tdbPager.h
+0
-1
未找到文件。
source/libs/tdb/src/db/tdbPager.c
浏览文件 @
64f29040
...
...
@@ -108,19 +108,19 @@ int tdbPagerOpenDB(SPager *pPager, SPgno *ppgno, bool toCreate) {
pgno
=
0
;
}
if
(
pgno
==
0
&&
toCreate
)
{
ret
=
tdbPagerAllocPage
(
pPager
,
&
pPage
,
&
pgno
);
if
(
ret
<
0
)
{
return
-
1
;
}
//
if (pgno == 0 && toCreate) {
//
ret = tdbPagerAllocPage(pPager, &pPage, &pgno);
//
if (ret < 0) {
//
return -1;
//
}
// TODO: Need to zero the page
//
// TODO: Need to zero the page
ret
=
tdbPagerWrite
(
pPager
,
pPage
);
if
(
ret
<
0
)
{
return
-
1
;
}
}
//
ret = tdbPagerWrite(pPager, pPage);
//
if (ret < 0) {
//
return -1;
//
}
//
}
*
ppgno
=
pgno
;
return
0
;
...
...
@@ -186,23 +186,23 @@ int tdbPagerWrite(SPager *pPager, SPage *pPage) {
return
0
;
}
int
tdbPagerAllocPage
(
SPager
*
pPager
,
SPage
**
ppPage
,
SPgno
*
ppgno
)
{
SPage
*
pPage
;
SPgno
pgno
;
//
int tdbPagerAllocPage(SPager *pPager, SPage **ppPage, SPgno *ppgno) {
//
SPage *pPage;
//
SPgno pgno;
if
(
1
/*TODO: no free page*/
)
{
pgno
=
++
pPager
->
dbFileSize
;
pPage
=
tdbPagerGet
(
pPager
,
pgno
,
false
);
ASSERT
(
pPage
!=
NULL
);
}
else
{
/* TODO: allocate from the free list */
ASSERT
(
0
);
}
//
if (1 /*TODO: no free page*/) {
//
pgno = ++pPager->dbFileSize;
//
pPage = tdbPagerGet(pPager, pgno, false);
//
ASSERT(pPage != NULL);
//
} else {
//
/* TODO: allocate from the free list */
//
ASSERT(0);
//
}
*
ppPage
=
pPage
;
*
ppgno
=
pgno
;
return
0
;
}
//
*ppPage = pPage;
//
*ppgno = pgno;
//
return 0;
//
}
int
tdbPagerBegin
(
SPager
*
pPager
)
{
if
(
pPager
->
inTran
)
{
...
...
@@ -244,17 +244,101 @@ static int tdbPagerReadPage(SPager *pPager, SPage *pPage) {
int
tdbPagerGetPageSize
(
SPager
*
pPager
)
{
return
pPager
->
pageSize
;
}
static
void
tdbPagerZeroPage
(
SPage
*
pPage
,
int
flags
)
{
SPager
*
pPager
;
int
tdbPagerFetchPage
(
SPager
*
pPager
,
SPgno
pgno
,
SPage
**
ppPage
)
{
SPage
*
pPage
;
SPgid
pgid
;
int
ret
;
// Fetch a page container from the page cache
memcpy
(
&
pgid
,
pPager
->
fid
,
TDB_FILE_ID_LEN
);
pgid
.
pgno
=
pgno
;
pPage
=
tdbPCacheFetch
(
pPager
->
pCache
,
&
pgid
,
1
);
if
(
pPage
==
NULL
)
{
return
-
1
;
}
if
(
pPage
->
pPager
==
NULL
)
{
ASSERT
(
pgno
<
pPager
->
dbOrigSize
);
ret
=
tdbPagerReadPage
(
pPager
,
pPage
);
if
(
ret
<
0
)
{
return
-
1
;
}
pPager
=
pPage
->
pPager
;
memset
(
pPage
->
pData
,
0
,
pPager
->
pageSize
);
pPage
->
pPageHdr
=
(
SPageHdr
*
)(
pPage
->
pData
);
pPage
->
aCellIdx
=
(
u16
*
)(
&
(
pPage
->
pPageHdr
[
1
]));
/* TODO */
// ret = (*initPage)(pPage);
// if (ret < 0) {
// return -1;
// }
pPage
->
pPager
=
pPager
;
}
else
{
ASSERT
(
pPage
->
pPager
==
pPager
);
}
*
ppPage
=
pPage
;
return
0
;
}
static
int
tdbPagerInitPage
(
SPage
*
pPage
)
{
// TODO
int
tdbPagerNewPage
(
SPager
*
pPager
,
SPgno
*
ppgno
,
SPage
**
ppPage
)
{
int
ret
;
SPage
*
pPage
;
SPgid
pgid
;
// Allocate a page number
ret
=
tdbPagerAllocPage
(
pPager
,
ppgno
);
if
(
ret
<
0
)
{
return
-
1
;
}
ASSERT
(
*
ppgno
!=
0
);
// Fetch a page container from the page cache
memcpy
(
&
pgid
,
pPager
->
fid
,
TDB_FILE_ID_LEN
);
pgid
.
pgno
=
*
ppgno
;
pPage
=
tdbPCacheFetch
(
pPager
->
pCache
,
&
pgid
,
1
);
if
(
pPage
==
NULL
)
{
return
-
1
;
}
ASSERT
(
pPage
->
pPager
==
NULL
);
// TODO: zero init the new page
// (*initNewPage)(pPage, arg);
*
ppPage
=
pPage
;
return
0
;
}
static
int
tdbPagerAllocFreePage
(
SPager
*
pPager
,
SPgno
*
ppgno
)
{
// TODO: Allocate a page from the free list
return
0
;
}
static
int
tdbPagerAllocNewPage
(
SPager
*
pPager
,
SPgno
*
ppgno
)
{
*
ppgno
=
++
pPager
->
dbFileSize
;
return
0
;
}
static
int
tdbPagerAllocPage
(
SPager
*
pPager
,
SPgno
*
ppgno
)
{
int
ret
;
*
ppgno
=
0
;
// Try to allocate from the free list of the pager
ret
=
tdbPagerAllocFreePage
(
pPager
,
ppgno
);
if
(
ret
<
0
)
{
return
-
1
;
}
if
(
*
ppgno
!=
0
)
return
0
;
// Allocate the page by extending the pager
ret
=
tdbPagerAllocNewPage
(
pPager
,
ppgno
);
if
(
ret
<
0
)
{
return
-
1
;
}
ASSERT
(
*
ppgno
!=
0
);
return
0
;
}
\ No newline at end of file
source/libs/tdb/src/inc/tdbPager.h
浏览文件 @
64f29040
...
...
@@ -25,7 +25,6 @@ int tdbPagerClose(SPager *pPager);
int
tdbPagerOpenDB
(
SPager
*
pPager
,
SPgno
*
ppgno
,
bool
toCreate
);
SPage
*
tdbPagerGet
(
SPager
*
pPager
,
SPgno
pgno
,
bool
toLoad
);
int
tdbPagerWrite
(
SPager
*
pPager
,
SPage
*
pPage
);
int
tdbPagerAllocPage
(
SPager
*
pPager
,
SPage
**
ppPage
,
SPgno
*
ppgno
);
int
tdbPagerBegin
(
SPager
*
pPager
);
int
tdbPagerCommit
(
SPager
*
pPager
);
int
tdbPagerGetPageSize
(
SPager
*
pPager
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录