Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
57a92869
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22017
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看板
提交
57a92869
编写于
3月 20, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more TDB
上级
d3446a5c
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
17 addition
and
29 deletion
+17
-29
source/libs/tdb/src/page/tdbPage.c
source/libs/tdb/src/page/tdbPage.c
+17
-29
未找到文件。
source/libs/tdb/src/page/tdbPage.c
浏览文件 @
57a92869
...
...
@@ -141,6 +141,7 @@ static int tdbPageAllocate(SPage *pPage, int szCell, SCell **ppCell) {
int
nFree
;
int
ret
;
int
cellFree
;
SCell
*
pCell
=
NULL
;
*
ppCell
=
NULL
;
nFree
=
TDB_PAGE_NFREE
(
pPage
);
...
...
@@ -150,14 +151,10 @@ static int tdbPageAllocate(SPage *pPage, int szCell, SCell **ppCell) {
// 1. Try to allocate from the free space block area
if
(
pPage
->
pFreeEnd
-
pPage
->
pFreeStart
>=
szCell
+
TDB_PAGE_OFFSET_SIZE
(
pPage
))
{
pPage
->
pFreeStart
+=
TDB_PAGE_OFFSET_SIZE
(
pPage
);
pPage
->
pFreeEnd
-=
szCell
;
pCell
=
pPage
->
pFreeEnd
;
TDB_PAGE_CCELLS_SET
(
pPage
,
pPage
->
pFreeEnd
-
pPage
->
pData
);
TDB_PAGE_NFREE_SET
(
pPage
,
nFree
-
szCell
-
TDB_PAGE_OFFSET_SIZE
(
pPage
));
*
ppCell
=
pPage
->
pFreeEnd
;
return
0
;
goto
_alloc_finish
;
}
// 2. Try to allocate from the page free list
...
...
@@ -177,9 +174,7 @@ static int tdbPageAllocate(SPage *pPage, int szCell, SCell **ppCell) {
pPage
->
pPageMethods
->
getFreeCellInfo
(
pFreeCell
,
&
szFreeCell
,
&
nxFreeCell
);
if
(
szFreeCell
>=
szCell
)
{
pPage
->
pFreeStart
+=
TDB_PAGE_OFFSET_SIZE
(
pPage
);
TDB_PAGE_NFREE_SET
(
pPage
,
nFree
-
TDB_PAGE_OFFSET_SIZE
(
pPage
)
-
szCell
);
*
ppCell
=
pFreeCell
;
pCell
=
pFreeCell
;
newSize
=
szFreeCell
-
szCell
;
pFreeCell
+=
szCell
;
...
...
@@ -191,7 +186,7 @@ static int tdbPageAllocate(SPage *pPage, int szCell, SCell **ppCell) {
TDB_PAGE_FCELL_SET
(
pPage
,
pFreeCell
-
pPage
->
pData
);
}
return
0
;
goto
_alloc_finish
;
}
else
{
if
(
pPrevFreeCell
)
{
pPage
->
pPageMethods
->
setFreeCellInfo
(
pPrevFreeCell
,
szPrevFreeCell
,
nxFreeCell
);
...
...
@@ -207,28 +202,21 @@ static int tdbPageAllocate(SPage *pPage, int szCell, SCell **ppCell) {
}
}
// 3. Try to dfragment and allocate again
#if 0
if (pCell == NULL) {
ret = tdbPageDefragment(pPage);
if (ret < 0) {
return -1;
}
ASSERT(pPage->pFreeEnd - pPage->pFreeStart > size + TDB_PAGE_OFFSET_SIZE(pPage));
// ASSERT(pPage->nFree == pPage->pFreeEnd - pPage->pFreeStart);
// Allocate from the free space area again
pPage->pFreeEnd -= size;
pPage->pFreeStart += TDB_PAGE_OFFSET_SIZE(pPage);
pCell = pPage->pFreeEnd;
}
// 3. Try to dfragment and allocate again
tdbPageDefragment
(
pPage
);
ASSERT
(
pPage
->
pFreeEnd
-
pPage
->
pFreeStart
==
nFree
);
ASSERT
(
nFree
==
TDB_PAGE_NFREE
(
pPage
));
ASSERT
(
pPage
->
pFreeEnd
-
pPage
->
pData
==
TDB_PAGE_CCELLS
(
pPage
));
ASSERT(pCell != NULL);
pPage
->
pFreeEnd
-=
szCell
;
pCell
=
pPage
->
pFreeEnd
;
TDB_PAGE_CCELLS_SET
(
pPage
,
pPage
->
pFreeEnd
-
pPage
->
pData
);
// pPage->nFree = pPage->nFree - size - TDB_PAGE_OFFSET_SIZE(pPage);
_alloc_finish:
ASSERT
(
pCell
);
pPage
->
pFreeStart
+=
TDB_PAGE_OFFSET_SIZE
(
pPage
);
TDB_PAGE_NFREE_SET
(
pPage
,
nFree
-
szCell
-
TDB_PAGE_OFFSET_SIZE
(
pPage
));
*
ppCell
=
pCell
;
#endif
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录