more TDB
This commit is contained in:
parent
dcdc577b12
commit
546bf6acdb
|
@ -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) {
|
||||||
// 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) {
|
||||||
|
|
||||||
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
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
/*
|
||||||
|
* 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"
|
|
@ -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 {
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue