提交 95e591ef 编写于 作者: M Minglei Jin

fix: release pages with drop case

上级 ff5c1f1c
...@@ -509,7 +509,7 @@ static int tdbBtreeBalanceDeeper(SBTree *pBt, SPage *pRoot, SPage **ppChild, TXN ...@@ -509,7 +509,7 @@ static int tdbBtreeBalanceDeeper(SBTree *pBt, SPage *pRoot, SPage **ppChild, TXN
static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTxn) { static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTxn) {
int ret; int ret;
int nOlds; int nOlds, pageIdx;
SPage *pOlds[3] = {0}; SPage *pOlds[3] = {0};
SCell *pDivCell[3] = {0}; SCell *pDivCell[3] = {0};
int szDivCell[3]; int szDivCell[3];
...@@ -849,13 +849,11 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx ...@@ -849,13 +849,11 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx
} }
} }
// TODO: here is not corrent for drop case for (pageIdx = 0; pageIdx < nOlds; ++pageIdx) {
for (int i = 0; i < nNews; i++) { tdbPagerReturnPage(pBt->pPager, pOlds[pageIdx], pTxn);
if (i < nOlds) { }
tdbPagerReturnPage(pBt->pPager, pOlds[i], pTxn); for (; pageIdx < nNews; ++pageIdx) {
} else { tdbPagerReturnPage(pBt->pPager, pNews[pageIdx], pTxn);
tdbPagerReturnPage(pBt->pPager, pNews[i], pTxn);
}
} }
return 0; return 0;
......
...@@ -98,6 +98,7 @@ SPage *tdbPCacheFetch(SPCache *pCache, const SPgid *pPgid, TXN *pTxn) { ...@@ -98,6 +98,7 @@ SPage *tdbPCacheFetch(SPCache *pCache, const SPgid *pPgid, TXN *pTxn) {
// printf("thread %" PRId64 " fetch page %d pgno %d pPage %p nRef %d\n", taosGetSelfPthreadId(), pPage->id, // printf("thread %" PRId64 " fetch page %d pgno %d pPage %p nRef %d\n", taosGetSelfPthreadId(), pPage->id,
// TDB_PAGE_PGNO(pPage), pPage, nRef); // TDB_PAGE_PGNO(pPage), pPage, nRef);
tdbDebug("pcache/fetch page %p/%d/%d/%d", pPage, TDB_PAGE_PGNO(pPage), pPage->id, nRef);
return pPage; return pPage;
} }
......
...@@ -166,6 +166,7 @@ int tdbPagerWrite(SPager *pPager, SPage *pPage) { ...@@ -166,6 +166,7 @@ int tdbPagerWrite(SPager *pPager, SPage *pPage) {
// ref page one more time so the page will not be release // ref page one more time so the page will not be release
tdbRefPage(pPage); tdbRefPage(pPage);
tdbDebug("pcache/mdirty page %p/%d/%d", pPage, TDB_PAGE_PGNO(pPage), pPage->id);
// Set page as dirty // Set page as dirty
pPage->isDirty = 1; pPage->isDirty = 1;
......
...@@ -280,13 +280,13 @@ struct SPage { ...@@ -280,13 +280,13 @@ struct SPage {
static inline i32 tdbRefPage(SPage *pPage) { static inline i32 tdbRefPage(SPage *pPage) {
i32 nRef = atomic_add_fetch_32(&((pPage)->nRef), 1); i32 nRef = atomic_add_fetch_32(&((pPage)->nRef), 1);
tdbTrace("ref page %d, nRef %d", pPage->id, nRef); tdbTrace("ref page %p/%d, nRef %d", pPage, pPage->id, nRef);
return nRef; return nRef;
} }
static inline i32 tdbUnrefPage(SPage *pPage) { static inline i32 tdbUnrefPage(SPage *pPage) {
i32 nRef = atomic_sub_fetch_32(&((pPage)->nRef), 1); i32 nRef = atomic_sub_fetch_32(&((pPage)->nRef), 1);
tdbTrace("unref page %d, nRef %d", pPage->id, nRef); tdbTrace("unref page %p/%d, nRef %d", pPage, pPage->id, nRef);
return nRef; return nRef;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册