refact
This commit is contained in:
parent
4824ec7d7a
commit
e9984c992d
|
@ -47,24 +47,24 @@ int tdbMPoolOpen(TDB_MPOOL **mpp, uint64_t cachesize, pgsize_t pgsize) {
|
||||||
|
|
||||||
TD_DLIST_INIT(&mp->freeList);
|
TD_DLIST_INIT(&mp->freeList);
|
||||||
|
|
||||||
mp->pages = (pg_t **)calloc(mp->npages, sizeof(pg_t *));
|
mp->pages = (pg_t *)calloc(mp->npages, sizeof(pg_t));
|
||||||
if (mp->pages == NULL) {
|
if (mp->pages == NULL) {
|
||||||
tdbError("failed to malloc memory pool pages");
|
tdbError("failed to malloc memory pool pages");
|
||||||
goto _err;
|
goto _err;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (frame_id_t i = 0; i < mp->npages; i++) {
|
for (frame_id_t i = 0; i < mp->npages; i++) {
|
||||||
mp->pages[i] = (pg_t *)calloc(1, MP_PAGE_SIZE(pgsize));
|
mp->pages[i].p = malloc(pgsize);
|
||||||
if (mp->pages[i] == NULL) {
|
if (mp->pages[i].p == NULL) {
|
||||||
goto _err;
|
goto _err;
|
||||||
}
|
}
|
||||||
|
|
||||||
taosInitRWLatch(&mp->pages[i]->rwLatch);
|
taosInitRWLatch(&mp->pages[i].rwLatch);
|
||||||
mp->pages[i]->frameid = i;
|
mp->pages[i].frameid = i;
|
||||||
mp->pages[i]->pgid = TDB_IVLD_PGID;
|
mp->pages[i].pgid = TDB_IVLD_PGID;
|
||||||
|
|
||||||
// add new page to the free list
|
// add new page to the free list
|
||||||
TD_DLIST_APPEND_WITH_FIELD(&(mp->freeList), mp->pages[i], free);
|
TD_DLIST_APPEND_WITH_FIELD(&(mp->freeList), &(mp->pages[i]), free);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define PGTAB_FACTOR 1.0
|
#define PGTAB_FACTOR 1.0
|
||||||
|
@ -90,7 +90,7 @@ int tdbMPoolClose(TDB_MPOOL *mp) {
|
||||||
tfree(mp->pgtab.hashtab);
|
tfree(mp->pgtab.hashtab);
|
||||||
if (mp->pages) {
|
if (mp->pages) {
|
||||||
for (int i = 0; i < mp->npages; i++) {
|
for (int i = 0; i < mp->npages; i++) {
|
||||||
tfree(mp->pages[i]);
|
tfree(mp->pages[i].p);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(mp->pages);
|
free(mp->pages);
|
||||||
|
@ -182,7 +182,7 @@ int tdbMPoolFileGetPage(TDB_MPFILE *mpf, pgno_t pgno, void *addr) {
|
||||||
if (pagep) {
|
if (pagep) {
|
||||||
// page is found
|
// page is found
|
||||||
// todo: pin the page and return
|
// todo: pin the page and return
|
||||||
*(void **)addr = pagep->data;
|
*(void **)addr = pagep->p;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,7 +191,6 @@ int tdbMPoolFileGetPage(TDB_MPFILE *mpf, pgno_t pgno, void *addr) {
|
||||||
if (pagep) {
|
if (pagep) {
|
||||||
// has free page
|
// has free page
|
||||||
TD_DLIST_POP_WITH_FIELD(&(mp->freeList), pagep, free);
|
TD_DLIST_POP_WITH_FIELD(&(mp->freeList), pagep, free);
|
||||||
// todo: load the page from file and pin the page
|
|
||||||
} else {
|
} else {
|
||||||
// no free page available
|
// no free page available
|
||||||
// pagep = tdbMpoolEvict(mp);
|
// pagep = tdbMpoolEvict(mp);
|
||||||
|
@ -208,7 +207,7 @@ int tdbMPoolFileGetPage(TDB_MPFILE *mpf, pgno_t pgno, void *addr) {
|
||||||
|
|
||||||
// load page from the disk if a container page is available
|
// load page from the disk if a container page is available
|
||||||
// TODO: load the page from the disk
|
// TODO: load the page from the disk
|
||||||
if (tdbMPoolFileReadPage(mpf, pgno, pagep->data) < 0) {
|
if (tdbMPoolFileReadPage(mpf, pgno, pagep->p) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,14 +32,13 @@ typedef struct pg_t {
|
||||||
frame_id_t frameid;
|
frame_id_t frameid;
|
||||||
pgid_t pgid;
|
pgid_t pgid;
|
||||||
uint8_t dirty;
|
uint8_t dirty;
|
||||||
|
uint8_t rbit;
|
||||||
int32_t pinRef;
|
int32_t pinRef;
|
||||||
pg_free_dlist_node_t free;
|
pg_free_dlist_node_t free;
|
||||||
pg_hash_dlist_node_t hash;
|
pg_hash_dlist_node_t hash;
|
||||||
uint8_t data[];
|
void * p;
|
||||||
} pg_t;
|
} pg_t;
|
||||||
|
|
||||||
#define MP_PAGE_SIZE(pgsize) (sizeof(pg_t) + (pgsize))
|
|
||||||
|
|
||||||
typedef TD_DLIST(pg_t) pg_list_t;
|
typedef TD_DLIST(pg_t) pg_list_t;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SRWLatch latch;
|
SRWLatch latch;
|
||||||
|
@ -49,7 +48,7 @@ struct TDB_MPOOL {
|
||||||
int64_t cachesize;
|
int64_t cachesize;
|
||||||
pgsize_t pgsize;
|
pgsize_t pgsize;
|
||||||
int32_t npages;
|
int32_t npages;
|
||||||
pg_t ** pages;
|
pg_t * pages;
|
||||||
pg_list_t freeList;
|
pg_list_t freeList;
|
||||||
struct {
|
struct {
|
||||||
int32_t nbucket;
|
int32_t nbucket;
|
||||||
|
|
Loading…
Reference in New Issue