more tdb
This commit is contained in:
parent
2f2b7d2f53
commit
9c984f9a90
|
@ -143,13 +143,30 @@ int tdbMPoolFileClose(TDB_MPFILE *mpf) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tdbMPoolFileGet(TDB_MPFILE *mpf, pgno_t pgid, void *addr) {
|
#define MPF_GET_PAGE_BUCKETID(fileid, pgno, nbuckets) \
|
||||||
|
({ \
|
||||||
|
uint64_t *tmp = (uint64_t *)fileid; \
|
||||||
|
(tmp[0] + tmp[1] + tmp[2] + (pgno)) % (nbuckets); \
|
||||||
|
})
|
||||||
|
|
||||||
|
int tdbMPoolFileGet(TDB_MPFILE *mpf, pgno_t pgno, void *addr) {
|
||||||
pg_t * pagep;
|
pg_t * pagep;
|
||||||
TDB_MPOOL *mp;
|
TDB_MPOOL *mp;
|
||||||
|
pg_list_t *pglist;
|
||||||
|
|
||||||
mp = mpf->mp;
|
mp = mpf->mp;
|
||||||
|
|
||||||
// get page in the cache
|
// get page in the cache
|
||||||
|
pglist = mp->pgtab.hashtab + MPF_GET_PAGE_BUCKETID(mpf->fileid, pgno, mp->pgtab.nbucket);
|
||||||
|
pagep = TD_DLIST_HEAD(pglist);
|
||||||
|
while (pagep) {
|
||||||
|
if (memcmp(mpf->fileid, pagep->pgid.fileid, TDB_FILE_ID_LEN) == 0 && pgno == pagep->pgid.pgno) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
pagep = TD_DLIST_NODE_NEXT_WITH_FIELD(pagep, hash);
|
||||||
|
}
|
||||||
|
|
||||||
if (pagep) {
|
if (pagep) {
|
||||||
// page is found in the page table
|
// page is found in the page table
|
||||||
// todo: pin the page and return
|
// todo: pin the page and return
|
||||||
|
@ -173,7 +190,7 @@ int tdbMPoolFileGet(TDB_MPFILE *mpf, pgno_t pgid, void *addr) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tdbMPoolFilePut(TDB_MPOOL *mpf, pgno_t pgid, void *addr) {
|
int tdbMPoolFilePut(TDB_MPOOL *mpf, pgno_t pgno, void *addr) {
|
||||||
// TODO
|
// TODO
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ typedef int32_t pgno_t;
|
||||||
// pgid_t
|
// pgid_t
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t fileid[TDB_FILE_ID_LEN];
|
uint8_t fileid[TDB_FILE_ID_LEN];
|
||||||
pgno_t pgid;
|
pgno_t pgno;
|
||||||
} pgid_t;
|
} pgid_t;
|
||||||
#define TDB_IVLD_PGID (pgid_t){0, TDB_IVLD_PGNO};
|
#define TDB_IVLD_PGID (pgid_t){0, TDB_IVLD_PGNO};
|
||||||
|
|
||||||
|
|
|
@ -80,8 +80,8 @@ int tdbMPoolClose(TDB_MPOOL *mp);
|
||||||
// TDB_MPFILE
|
// TDB_MPFILE
|
||||||
int tdbMPoolFileOpen(TDB_MPFILE **mpfp, const char *fname, TDB_MPOOL *mp);
|
int tdbMPoolFileOpen(TDB_MPFILE **mpfp, const char *fname, TDB_MPOOL *mp);
|
||||||
int tdbMPoolFileClose(TDB_MPFILE *mpf);
|
int tdbMPoolFileClose(TDB_MPFILE *mpf);
|
||||||
int tdbMPoolFileGet(TDB_MPFILE *mpf, pgno_t pgid, void *addr);
|
int tdbMPoolFileGet(TDB_MPFILE *mpf, pgno_t pgno, void *addr);
|
||||||
int tdbMPoolFilePut(TDB_MPOOL *mpf, pgno_t pgid, void *addr);
|
int tdbMPoolFilePut(TDB_MPOOL *mpf, pgno_t pgno, void *addr);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue