Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
daa29bca
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
提交
daa29bca
编写于
1月 21, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more tdb
上级
e9984c99
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
39 addition
and
8 deletion
+39
-8
source/libs/tdb/src/db/tdb_mpool.c
source/libs/tdb/src/db/tdb_mpool.c
+33
-3
source/libs/tdb/src/inc/tdb_mpool.h
source/libs/tdb/src/inc/tdb_mpool.h
+6
-5
未找到文件。
source/libs/tdb/src/db/tdb_mpool.c
浏览文件 @
daa29bca
...
...
@@ -21,6 +21,7 @@ static void tdbMPoolUnregFile(TDB_MPOOL *mp, TDB_MPFILE *mpf);
static
TDB_MPFILE
*
tdbMPoolGetFile
(
TDB_MPOOL
*
mp
,
uint8_t
*
fileid
);
static
int
tdbMPoolFileReadPage
(
TDB_MPFILE
*
mpf
,
pgno_t
pgno
,
void
*
p
);
static
int
tdbMPoolFileWritePage
(
TDB_MPFILE
*
mpf
,
pgno_t
pgno
,
const
void
*
p
);
static
void
tdbMPoolClockEvictPage
(
TDB_MPOOL
*
mp
,
pg_t
**
pagepp
);
int
tdbMPoolOpen
(
TDB_MPOOL
**
mpp
,
uint64_t
cachesize
,
pgsize_t
pgsize
)
{
TDB_MPOOL
*
mp
=
NULL
;
...
...
@@ -44,6 +45,7 @@ int tdbMPoolOpen(TDB_MPOOL **mpp, uint64_t cachesize, pgsize_t pgsize) {
mp
->
cachesize
=
cachesize
;
mp
->
pgsize
=
pgsize
;
mp
->
npages
=
cachesize
/
pgsize
;
mp
->
clockHand
=
0
;
TD_DLIST_INIT
(
&
mp
->
freeList
);
...
...
@@ -193,10 +195,11 @@ int tdbMPoolFileGetPage(TDB_MPFILE *mpf, pgno_t pgno, void *addr) {
TD_DLIST_POP_WITH_FIELD
(
&
(
mp
->
freeList
),
pagep
,
free
);
}
else
{
// no free page available
// pagep = tdbMpoolEvict(m
p);
tdbMPoolClockEvictPage
(
mp
,
&
page
p
);
if
(
pagep
)
{
}
else
{
// TODO: Cannot find a page to evict
if
(
pagep
->
dirty
)
{
// TODO: Handle dirty page eviction
}
}
}
...
...
@@ -347,3 +350,30 @@ static int tdbMPoolFileWritePage(TDB_MPFILE *mpf, pgno_t pgno, const void *p) {
return
0
;
}
static
void
tdbMPoolClockEvictPage
(
TDB_MPOOL
*
mp
,
pg_t
**
pagepp
)
{
pg_t
*
pagep
;
frame_id_t
och
;
*
pagepp
=
NULL
;
och
=
mp
->
clockHand
;
do
{
pagep
=
mp
->
pages
+
mp
->
clockHand
;
mp
->
clockHand
=
(
mp
->
clockHand
+
1
)
%
mp
->
npages
;
if
(
pagep
->
pinRef
==
0
)
{
if
(
pagep
->
rbit
==
1
)
{
pagep
->
rbit
=
0
;
}
else
{
break
;
}
}
if
(
mp
->
clockHand
==
och
)
{
return
;
}
}
while
(
1
);
*
pagepp
=
pagep
;
}
\ No newline at end of file
source/libs/tdb/src/inc/tdb_mpool.h
浏览文件 @
daa29bca
...
...
@@ -50,6 +50,7 @@ struct TDB_MPOOL {
int32_t
npages
;
pg_t
*
pages
;
pg_list_t
freeList
;
frame_id_t
clockHand
;
struct
{
int32_t
nbucket
;
pg_list_t
*
hashtab
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录