Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
06af0467
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看板
提交
06af0467
编写于
7月 05, 2022
作者:
M
Minglei Jin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: dirty new allocated non-dirty page (root leaf without writings)
上级
6af95b3b
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
298 addition
and
281 deletion
+298
-281
source/libs/tdb/src/db/tdbBtree.c
source/libs/tdb/src/db/tdbBtree.c
+246
-244
source/libs/tdb/src/db/tdbPager.c
source/libs/tdb/src/db/tdbPager.c
+34
-18
source/libs/tdb/src/inc/tdbInt.h
source/libs/tdb/src/inc/tdbInt.h
+18
-19
未找到文件。
source/libs/tdb/src/db/tdbBtree.c
浏览文件 @
06af0467
...
...
@@ -58,7 +58,7 @@ typedef struct {
static
int
tdbDefaultKeyCmprFn
(
const
void
*
pKey1
,
int
keyLen1
,
const
void
*
pKey2
,
int
keyLen2
);
static
int
tdbBtreeOpenImpl
(
SBTree
*
pBt
);
//static int tdbBtreeInitPage(SPage *pPage, void *arg, int init);
//
static int tdbBtreeInitPage(SPage *pPage, void *arg, int init);
static
int
tdbBtreeEncodeCell
(
SPage
*
pPage
,
const
void
*
pKey
,
int
kLen
,
const
void
*
pVal
,
int
vLen
,
SCell
*
pCell
,
int
*
szCell
,
TXN
*
pTxn
,
SBTree
*
pBt
);
static
int
tdbBtreeDecodeCell
(
SPage
*
pPage
,
const
SCell
*
pCell
,
SCellDecoder
*
pDecoder
,
TXN
*
pTxn
,
SBTree
*
pBt
);
...
...
@@ -321,7 +321,7 @@ static int tdbBtreeOpenImpl(SBTree *pBt) {
{
// 1. TODO: Search the main DB to check if the DB exists
ret
=
tdbPagerOpenDB
(
pBt
->
pPager
,
&
pgno
,
true
);
ret
=
tdbPagerOpenDB
(
pBt
->
pPager
,
&
pgno
,
true
,
pBt
);
ASSERT
(
ret
==
0
);
}
...
...
@@ -721,7 +721,8 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx
int
szNewCell
;
SPgno
pgno
;
pgno
=
TDB_PAGE_PGNO
(
pNews
[
iNew
]);
tdbBtreeEncodeCell
(
pParent
,
cd
.
pKey
,
cd
.
kLen
,
(
void
*
)
&
pgno
,
sizeof
(
SPgno
),
pNewCell
,
&
szNewCell
,
pTxn
,
pBt
);
tdbBtreeEncodeCell
(
pParent
,
cd
.
pKey
,
cd
.
kLen
,
(
void
*
)
&
pgno
,
sizeof
(
SPgno
),
pNewCell
,
&
szNewCell
,
pTxn
,
pBt
);
tdbPageInsertCell
(
pParent
,
sIdx
++
,
pNewCell
,
szNewCell
,
0
);
tdbOsFree
(
pNewCell
);
}
...
...
@@ -916,7 +917,7 @@ static int tdbBtreeEncodePayload(SPage *pPage, SCell *pCell, int nHeader, const
int
surplus
=
minLocal
+
(
nPayload
+
nHeader
-
minLocal
)
%
(
maxLocal
-
sizeof
(
SPgno
));
int
nLocal
=
surplus
<=
maxLocal
?
surplus
:
minLocal
;
//int ofpCap = tdbPageCapacity(pBt->pageSize, sizeof(SIntHdr));
//
int ofpCap = tdbPageCapacity(pBt->pageSize, sizeof(SIntHdr));
// fetch a new ofp and make it dirty
SPgno
pgno
=
0
;
...
...
@@ -988,7 +989,7 @@ static int tdbBtreeEncodePayload(SPage *pPage, SCell *pCell, int nHeader, const
// pack partial key and nextPgno
memcpy
(
pCell
+
nHeader
,
pKey
,
nLocal
-
4
);
nLeft
-=
nLocal
-
4
;
nLeftKey
-=
nLocal
-
4
;
nLeftKey
-=
nLocal
-
4
;
memcpy
(
pCell
+
nHeader
+
nLocal
-
4
,
&
pgno
,
sizeof
(
pgno
));
...
...
@@ -1010,12 +1011,12 @@ static int tdbBtreeEncodePayload(SPage *pPage, SCell *pCell, int nHeader, const
if
(
lastKeyPage
)
{
if
(
lastKeyPageSpace
>=
vLen
)
{
memcpy
(
pBuf
+
kLen
-
nLeftKey
,
pVal
,
vLen
);
memcpy
(
pBuf
+
kLen
-
nLeftKey
,
pVal
,
vLen
);
nLeft
-=
vLen
;
pgno
=
0
;
}
else
{
memcpy
(
pBuf
+
kLen
-
nLeftKey
,
pVal
,
lastKeyPageSpace
);
memcpy
(
pBuf
+
kLen
-
nLeftKey
,
pVal
,
lastKeyPageSpace
);
nLeft
-=
lastKeyPageSpace
;
// fetch next ofp, a new ofp and make it dirty
...
...
@@ -1142,7 +1143,8 @@ static int tdbBtreeEncodeCell(SPage *pPage, const void *pKey, int kLen, const vo
return
0
;
}
static
int
tdbBtreeDecodePayload
(
SPage
*
pPage
,
const
SCell
*
pCell
,
int
nHeader
,
SCellDecoder
*
pDecoder
,
TXN
*
pTxn
,
SBTree
*
pBt
)
{
static
int
tdbBtreeDecodePayload
(
SPage
*
pPage
,
const
SCell
*
pCell
,
int
nHeader
,
SCellDecoder
*
pDecoder
,
TXN
*
pTxn
,
SBTree
*
pBt
)
{
int
ret
=
0
;
int
nPayload
;
int
maxLocal
=
pPage
->
maxLocal
;
...
...
@@ -1228,7 +1230,7 @@ static int tdbBtreeDecodePayload(SPage *pPage, const SCell *pCell, int nHeader,
memcpy
(
pDecoder
->
pKey
,
pCell
+
nHeader
,
nLocal
-
4
);
nLeft
-=
nLocal
-
4
;
nLeftKey
-=
nLocal
-
4
;
nLeftKey
-=
nLocal
-
4
;
memcpy
(
&
pgno
,
pCell
+
nHeader
+
nLocal
-
4
,
sizeof
(
pgno
));
...
...
@@ -1256,7 +1258,7 @@ static int tdbBtreeDecodePayload(SPage *pPage, const SCell *pCell, int nHeader,
if
(
lastKeyPage
)
{
if
(
lastKeyPageSpace
>=
vLen
)
{
pDecoder
->
pVal
=
ofpCell
+
kLen
-
nLeftKey
;
pDecoder
->
pVal
=
ofpCell
+
kLen
-
nLeftKey
;
nLeft
-=
vLen
;
pgno
=
0
;
...
...
@@ -1268,7 +1270,7 @@ static int tdbBtreeDecodePayload(SPage *pPage, const SCell *pCell, int nHeader,
}
TDB_CELLDECODER_SET_FREE_VAL
(
pDecoder
);
memcpy
(
pDecoder
->
pVal
,
ofpCell
+
kLen
-
nLeftKey
,
lastKeyPageSpace
);
memcpy
(
pDecoder
->
pVal
,
ofpCell
+
kLen
-
nLeftKey
,
lastKeyPageSpace
);
nLeft
-=
lastKeyPageSpace
;
}
}
...
...
@@ -1405,7 +1407,7 @@ static int tdbBtreeCellSize(const SPage *pPage, SCell *pCell, int dropOfp, TXN *
// free ofp pages' cells
if
(
dropOfp
)
{
int
ret
=
0
;
SPgno
pgno
=
*
(
SPgno
*
)
(
pCell
+
nHeader
+
nLocal
-
sizeof
(
SPgno
));
SPgno
pgno
=
*
(
SPgno
*
)
(
pCell
+
nHeader
+
nLocal
-
sizeof
(
SPgno
));
int
nLeft
=
nPayload
-
nLocal
+
sizeof
(
SPgno
);
SPage
*
ofp
;
int
bytes
;
...
...
source/libs/tdb/src/db/tdbPager.c
浏览文件 @
06af0467
...
...
@@ -98,7 +98,7 @@ int tdbPagerClose(SPager *pPager) {
return
0
;
}
int
tdbPagerOpenDB
(
SPager
*
pPager
,
SPgno
*
ppgno
,
bool
toCreate
)
{
int
tdbPagerOpenDB
(
SPager
*
pPager
,
SPgno
*
ppgno
,
bool
toCreate
,
SBTree
*
pBt
)
{
SPgno
pgno
;
SPage
*
pPage
;
int
ret
;
...
...
@@ -114,19 +114,35 @@ int tdbPagerOpenDB(SPager *pPager, SPgno *ppgno, bool toCreate) {
// pgno = 0;
}
// if (pgno == 0 && toCreate) {
if
(
pgno
==
0
&&
toCreate
)
{
// allocate a new child page
TXN
txn
;
tdbTxnOpen
(
&
txn
,
0
,
tdbDefaultMalloc
,
tdbDefaultFree
,
NULL
,
0
);
pPager
->
inTran
=
1
;
SBtreeInitPageArg
zArg
;
zArg
.
flags
=
0x1
|
0x2
;
// root leaf node;
zArg
.
pBt
=
pBt
;
ret
=
tdbPagerFetchPage
(
pPager
,
&
pgno
,
&
pPage
,
tdbBtreeInitPage
,
&
zArg
,
&
txn
);
if
(
ret
<
0
)
{
return
-
1
;
}
// 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
;
}
tdbTxnClose
(
&
txn
);
}
*
ppgno
=
pgno
;
return
0
;
...
...
source/libs/tdb/src/inc/tdbInt.h
浏览文件 @
06af0467
...
...
@@ -184,7 +184,7 @@ int tdbBtcUpsert(SBTC *pBtc, const void *pKey, int kLen, const void *pData, int
int
tdbPagerOpen
(
SPCache
*
pCache
,
const
char
*
fileName
,
SPager
**
ppPager
);
int
tdbPagerClose
(
SPager
*
pPager
);
int
tdbPagerOpenDB
(
SPager
*
pPager
,
SPgno
*
ppgno
,
bool
toCreate
);
int
tdbPagerOpenDB
(
SPager
*
pPager
,
SPgno
*
ppgno
,
bool
toCreate
,
SBTree
*
pBt
);
int
tdbPagerWrite
(
SPager
*
pPager
,
SPage
*
pPage
);
int
tdbPagerBegin
(
SPager
*
pPager
,
TXN
*
pTxn
);
int
tdbPagerCommit
(
SPager
*
pPager
,
TXN
*
pTxn
);
...
...
@@ -318,15 +318,14 @@ static inline int tdbTryLockPage(tdb_spinlock_t *pLock) {
#define TDB_PAGE_USABLE_SIZE(pPage) ((u8 *)(pPage)->pPageFtr - (pPage)->pCellIdx)
#define TDB_PAGE_FREE_SIZE(pPage) (*(pPage)->pPageMethods->getFreeBytes)(pPage)
#define TDB_PAGE_PGNO(pPage) ((pPage)->pgid.pgno)
#define TDB_BYTES_CELL_TAKEN(pPage, pCell) ((*(pPage)->xCellSize)(pPage, pCell, 0, NULL, NULL) + (pPage)->pPageMethods->szOffset)
#define TDB_BYTES_CELL_TAKEN(pPage, pCell) \
((*(pPage)->xCellSize)(pPage, pCell, 0, NULL, NULL) + (pPage)->pPageMethods->szOffset)
#define TDB_PAGE_OFFSET_SIZE(pPage) ((pPage)->pPageMethods->szOffset)
int
tdbPageCreate
(
int
pageSize
,
SPage
**
ppPage
,
void
*
(
*
xMalloc
)(
void
*
,
size_t
),
void
*
arg
);
int
tdbPageDestroy
(
SPage
*
pPage
,
void
(
*
xFree
)(
void
*
arg
,
void
*
ptr
),
void
*
arg
);
void
tdbPageZero
(
SPage
*
pPage
,
u8
szAmHdr
,
int
(
*
xCellSize
)(
const
SPage
*
,
SCell
*
,
int
,
TXN
*
,
SBTree
*
pBt
));
void
tdbPageInit
(
SPage
*
pPage
,
u8
szAmHdr
,
int
(
*
xCellSize
)(
const
SPage
*
,
SCell
*
,
int
,
TXN
*
,
SBTree
*
pBt
));
void
tdbPageZero
(
SPage
*
pPage
,
u8
szAmHdr
,
int
(
*
xCellSize
)(
const
SPage
*
,
SCell
*
,
int
,
TXN
*
,
SBTree
*
pBt
));
void
tdbPageInit
(
SPage
*
pPage
,
u8
szAmHdr
,
int
(
*
xCellSize
)(
const
SPage
*
,
SCell
*
,
int
,
TXN
*
,
SBTree
*
pBt
));
int
tdbPageInsertCell
(
SPage
*
pPage
,
int
idx
,
SCell
*
pCell
,
int
szCell
,
u8
asOvfl
);
int
tdbPageDropCell
(
SPage
*
pPage
,
int
idx
,
TXN
*
pTxn
,
SBTree
*
pBt
);
int
tdbPageUpdateCell
(
SPage
*
pPage
,
int
idx
,
SCell
*
pCell
,
int
szCell
,
TXN
*
pTxn
,
SBTree
*
pBt
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录