more TDB
This commit is contained in:
parent
9c984f9a90
commit
a0d7e2a155
|
@ -156,7 +156,7 @@ int tdbMPoolFileGet(TDB_MPFILE *mpf, pgno_t pgno, void *addr) {
|
||||||
|
|
||||||
mp = mpf->mp;
|
mp = mpf->mp;
|
||||||
|
|
||||||
// get page in the cache
|
// check if the page already in pool
|
||||||
pglist = mp->pgtab.hashtab + MPF_GET_PAGE_BUCKETID(mpf->fileid, pgno, mp->pgtab.nbucket);
|
pglist = mp->pgtab.hashtab + MPF_GET_PAGE_BUCKETID(mpf->fileid, pgno, mp->pgtab.nbucket);
|
||||||
pagep = TD_DLIST_HEAD(pglist);
|
pagep = TD_DLIST_HEAD(pglist);
|
||||||
while (pagep) {
|
while (pagep) {
|
||||||
|
@ -168,25 +168,38 @@ int tdbMPoolFileGet(TDB_MPFILE *mpf, pgno_t pgno, void *addr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pagep) {
|
if (pagep) {
|
||||||
// page is found in the page table
|
// page is found
|
||||||
// todo: pin the page and return
|
// todo: pin the page and return
|
||||||
*(void **)addr = pagep->data;
|
*(void **)addr = pagep->data;
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// page not found
|
||||||
|
pagep = TD_DLIST_HEAD(&mp->freeList);
|
||||||
|
if (pagep) {
|
||||||
|
// has free page
|
||||||
|
TD_DLIST_POP_WITH_FIELD(&(mp->freeList), pagep, free);
|
||||||
|
// todo: load the page from file and pin the page
|
||||||
} else {
|
} else {
|
||||||
// page not found
|
// no free page available
|
||||||
pagep = TD_DLIST_HEAD(&mp->freeList);
|
// pagep = tdbMpoolEvict(mp);
|
||||||
if (pagep) {
|
if (pagep) {
|
||||||
// TD_DLIST_POP(&(mp->freeList), pagep);
|
|
||||||
} else {
|
} else {
|
||||||
// no page found in the freelist, need to evict
|
// TODO: Cannot find a page to evict
|
||||||
// pagep = tdbMpoolEvict(mp);
|
|
||||||
if (pagep) {
|
|
||||||
} else {
|
|
||||||
// TODO: Cannot find a page to evict
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pagep == NULL) {
|
||||||
|
// no available container page
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// load page from the disk if a container page is available
|
||||||
|
// TODO: load the page from the disk
|
||||||
|
|
||||||
|
// add current page to page table
|
||||||
|
TD_DLIST_APPEND_WITH_FIELD(pglist, pagep, hash);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue