提交 546bf6ac 编写于 作者: H Hongze Cheng

more TDB

上级 dcdc577b
...@@ -450,12 +450,14 @@ static int tdbBtreeBalanceDeeper(SBTree *pBt, SPage *pRoot, SPage **ppChild) { ...@@ -450,12 +450,14 @@ static int tdbBtreeBalanceDeeper(SBTree *pBt, SPage *pRoot, SPage **ppChild) {
return 0; return 0;
} }
static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, bool isRoot) { static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, bool isRoot) {
#if 0 int nOldPages;
int i; SPage *pOldPages[3];
int nNewPages;
SPage *pNewPages[5];
// Find three or less sibling pages
i = pParent->pPageHdr->nCells + pParent->nOverFlow;
#endif
/* TODO */ /* TODO */
return 0; return 0;
} }
...@@ -500,7 +502,7 @@ static int tdbBtreeBalance(SBtCursor *pCur) { ...@@ -500,7 +502,7 @@ static int tdbBtreeBalance(SBtCursor *pCur) {
// Generalized balance step // Generalized balance step
pParent = pCur->pgStack[pCur->iPage - 1]; pParent = pCur->pgStack[pCur->iPage - 1];
ret = tdbBtreeBalanceNonRoot(pCur->pBt, pParent, (iPage == 1)); ret = tdbBtreeBalanceNonRoot(pCur->pBt, pParent, pCur->idxStack[pCur->iPage - 1], (iPage == 1));
if (ret < 0) { if (ret < 0) {
return -1; return -1;
} }
......
...@@ -188,7 +188,7 @@ static void tdbPCacheUnpinPage(SPage *pPage) { ...@@ -188,7 +188,7 @@ static void tdbPCacheUnpinPage(SPage *pPage) {
tdbPCacheLock(pCache); tdbPCacheLock(pCache);
nRef = TDB_PAGE_REF(pPage); nRef = TDB_GET_PAGE_REF(pPage);
ASSERT(nRef >= 0); ASSERT(nRef >= 0);
if (nRef == 0) { if (nRef == 0) {
// Add the page to LRU list // Add the page to LRU list
......
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "tdbInt.h"
\ No newline at end of file
...@@ -32,26 +32,27 @@ typedef struct SPage SPage; ...@@ -32,26 +32,27 @@ typedef struct SPage SPage;
struct SPage { struct SPage {
pthread_spinlock_t lock; pthread_spinlock_t lock;
// Fields below used by page cache // Fields below used by page cache
void * pData; void *pData;
SPgid pgid; SPgid pgid;
u8 isAnchor; u8 isAnchor;
u8 isLocalPage; u8 isLocalPage;
u8 isDirty; u8 isDirty;
i32 nRef; i32 nRef;
SPCache *pCache; SPCache *pCache;
SPage * pFreeNext; SPage *pFreeNext;
SPage * pHashNext; SPage *pHashNext;
SPage * pLruNext; SPage *pLruNext;
SPage * pLruPrev; SPage *pLruPrev;
SPage * pDirtyNext; SPage *pDirtyNext;
SPager * pPager; SPager *pPager;
// Fields below used by pager and am // Fields below used by pager and am
SPageHdr *pPageHdr; SPageHdr *pPageHdr;
u16 * aCellIdx; u16 *aCellIdx;
int kLen; int kLen;
int vLen; int vLen;
int maxLocal; int maxLocal;
int minLocal; int minLocal;
int nOverflow;
}; };
// For page lock // For page lock
...@@ -76,16 +77,16 @@ struct SPage { ...@@ -76,16 +77,16 @@ struct SPage {
ret; \ ret; \
}) })
// For page ref (TODO: Need atomic operation) // For page ref
#define TDB_INIT_PAGE_REF(pPage) ((pPage)->nRef = 0) #define TDB_INIT_PAGE_REF(pPage) ((pPage)->nRef = 0)
#if 0 #if 0
#define TDB_REF_PAGE(pPage) (++(pPage)->nRef) #define TDB_REF_PAGE(pPage) (++(pPage)->nRef)
#define TDB_UNREF_PAGE(pPage) (--(pPage)->nRef) #define TDB_UNREF_PAGE(pPage) (--(pPage)->nRef)
#define TDB_PAGE_REF(pPage) ((pPage)->nRef) #define TDB_GET_PAGE_REF(pPage) ((pPage)->nRef)
#else #else
#define TDB_REF_PAGE(pPage) atomic_add_fetch_32(&((pPage)->nRef), 1) #define TDB_REF_PAGE(pPage) atomic_add_fetch_32(&((pPage)->nRef), 1)
#define TDB_UNREF_PAGE(pPage) atomic_sub_fetch_32(&((pPage)->nRef), 1) #define TDB_UNREF_PAGE(pPage) atomic_sub_fetch_32(&((pPage)->nRef), 1)
#define TDB_PAGE_REF(pPage) atomic_load_32(&((pPage)->nRef)) #define TDB_GET_PAGE_REF(pPage) atomic_load_32(&((pPage)->nRef))
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册