more TDB
This commit is contained in:
parent
e835a6cc39
commit
7c939b929c
|
@ -1,5 +1,5 @@
|
||||||
set(META_DB_IMPL_LIST "BDB" "TDB")
|
set(META_DB_IMPL_LIST "BDB" "TDB")
|
||||||
set(META_DB_IMPL "TDB" CACHE STRING "Use BDB as the default META implementation")
|
set(META_DB_IMPL "BDB" CACHE STRING "Use BDB as the default META implementation")
|
||||||
set_property(CACHE META_DB_IMPL PROPERTY STRINGS ${META_DB_IMPL_LIST})
|
set_property(CACHE META_DB_IMPL PROPERTY STRINGS ${META_DB_IMPL_LIST})
|
||||||
|
|
||||||
if(META_DB_IMPL IN_LIST META_DB_IMPL_LIST)
|
if(META_DB_IMPL IN_LIST META_DB_IMPL_LIST)
|
||||||
|
|
|
@ -30,15 +30,14 @@ typedef int32_t pgsz_t;
|
||||||
typedef int32_t cachesz_t;
|
typedef int32_t cachesz_t;
|
||||||
|
|
||||||
// TEVN
|
// TEVN
|
||||||
int tdbEnvCreate(TENV **ppEnv);
|
int tdbEnvCreate(TENV **ppEnv, const char *rootDir);
|
||||||
int tdbEnvOpen(TENV **ppEnv);
|
int tdbEnvOpen(TENV *ppEnv);
|
||||||
int tdbEnvClose(TENV *pEnv);
|
int tdbEnvClose(TENV *pEnv);
|
||||||
|
|
||||||
int tdbEnvBeginTxn(TENV *pEnv);
|
int tdbEnvBeginTxn(TENV *pEnv);
|
||||||
int tdbEnvCommit(TENV *pEnv);
|
int tdbEnvCommit(TENV *pEnv);
|
||||||
|
|
||||||
int tdbEnvSetPageSize(TENV *pEnv, pgsz_t szPage);
|
int tdbEnvSetCache(TENV *pEnv, pgsz_t pgSize, cachesz_t cacheSize);
|
||||||
int tdbEnvSetCacheSize(TENV *pEnv, cachesz_t szCache);
|
|
||||||
pgsz_t tdbEnvGetPageSize(TENV *pEnv);
|
pgsz_t tdbEnvGetPageSize(TENV *pEnv);
|
||||||
cachesz_t tdbEnvGetCacheSize(TENV *pEnv);
|
cachesz_t tdbEnvGetCacheSize(TENV *pEnv);
|
||||||
|
|
||||||
|
|
|
@ -64,9 +64,9 @@ int tdbOpen(TDB **ppDb, const char *fname, const char *dbname, TENV *pEnv) {
|
||||||
|
|
||||||
// Create a default ENV if pEnv is not set
|
// Create a default ENV if pEnv is not set
|
||||||
if (pEnv == NULL) {
|
if (pEnv == NULL) {
|
||||||
if ((ret = tdbEnvOpen(&pEnv)) != 0) {
|
// if ((ret = tdbEnvOpen(&pEnv)) != 0) {
|
||||||
return -1;
|
// return -1;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
pDb->pEnv = pEnv;
|
pDb->pEnv = pEnv;
|
||||||
|
|
|
@ -16,8 +16,9 @@
|
||||||
#include "tdbInt.h"
|
#include "tdbInt.h"
|
||||||
|
|
||||||
struct STDbEnv {
|
struct STDbEnv {
|
||||||
pgsz_t pgSize; // Page size
|
char * rootDir; // root directory of the environment
|
||||||
cachesz_t cacheSize; // Total cache size
|
pgsz_t pgSize; // page size
|
||||||
|
cachesz_t cacheSize; // total cache size
|
||||||
STDbList dbList; // TDB List
|
STDbList dbList; // TDB List
|
||||||
SPgFileList pgfList; // SPgFile List
|
SPgFileList pgfList; // SPgFile List
|
||||||
SPgCache * pPgCache; // page cache
|
SPgCache * pPgCache; // page cache
|
||||||
|
@ -28,34 +29,39 @@ struct STDbEnv {
|
||||||
|
|
||||||
static int tdbEnvDestroy(TENV *pEnv);
|
static int tdbEnvDestroy(TENV *pEnv);
|
||||||
|
|
||||||
int tdbEnvCreate(TENV **ppEnv) {
|
int tdbEnvCreate(TENV **ppEnv, const char *rootDir) {
|
||||||
TENV * pEnv;
|
TENV * pEnv;
|
||||||
|
size_t slen;
|
||||||
|
|
||||||
pEnv = (TENV *)calloc(1, sizeof(*pEnv));
|
ASSERT(rootDir != NULL);
|
||||||
|
|
||||||
|
*ppEnv = NULL;
|
||||||
|
slen = strlen(rootDir);
|
||||||
|
pEnv = (TENV *)calloc(1, sizeof(*pEnv) + slen + 1);
|
||||||
if (pEnv == NULL) {
|
if (pEnv == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pEnv->rootDir = (char *)(&pEnv[1]);
|
||||||
pEnv->pgSize = TDB_DEFAULT_PGSIZE;
|
pEnv->pgSize = TDB_DEFAULT_PGSIZE;
|
||||||
pEnv->cacheSize = TDB_DEFAULT_CACHE_SIZE;
|
pEnv->cacheSize = TDB_DEFAULT_CACHE_SIZE;
|
||||||
|
|
||||||
|
memcpy(pEnv->rootDir, rootDir, slen);
|
||||||
|
|
||||||
TD_DLIST_INIT(&(pEnv->dbList));
|
TD_DLIST_INIT(&(pEnv->dbList));
|
||||||
TD_DLIST_INIT(&(pEnv->pgfList));
|
TD_DLIST_INIT(&(pEnv->pgfList));
|
||||||
// TODO
|
|
||||||
|
/* TODO */
|
||||||
|
|
||||||
|
*ppEnv = pEnv;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tdbEnvOpen(TENV **ppEnv) {
|
int tdbEnvOpen(TENV *pEnv) {
|
||||||
TENV * pEnv;
|
|
||||||
SPgCache *pPgCache;
|
SPgCache *pPgCache;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
// Create the ENV with default setting
|
ASSERT(pEnv != NULL);
|
||||||
if (ppEnv == NULL) {
|
|
||||||
TERR_A(ret, tdbEnvCreate(&pEnv), _err);
|
|
||||||
}
|
|
||||||
|
|
||||||
pEnv = *ppEnv;
|
|
||||||
|
|
||||||
TERR_A(ret, pgCacheCreate(&pPgCache, pEnv->pgSize, pEnv->cacheSize / pEnv->pgSize), _err);
|
TERR_A(ret, pgCacheCreate(&pPgCache, pEnv->pgSize, pEnv->cacheSize / pEnv->pgSize), _err);
|
||||||
TERR_A(ret, pgCacheOpen(&pPgCache), _err);
|
TERR_A(ret, pgCacheOpen(&pPgCache), _err);
|
||||||
|
@ -75,15 +81,16 @@ int tdbEnvClose(TENV *pEnv) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tdbEnvSetPageSize(TENV *pEnv, pgsz_t szPage) {
|
int tdbEnvSetCache(TENV *pEnv, pgsz_t pgSize, cachesz_t cacheSize) {
|
||||||
/* TODO */
|
if (!TDB_IS_PGSIZE_VLD(pgSize) || cacheSize / pgSize < 10) {
|
||||||
pEnv->pgSize = szPage;
|
return -1;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int tdbEnvSetCacheSize(TENV *pEnv, cachesz_t szCache) {
|
|
||||||
/* TODO */
|
/* TODO */
|
||||||
pEnv->cacheSize = szCache;
|
|
||||||
|
pEnv->pgSize = pgSize;
|
||||||
|
pEnv->cacheSize = cacheSize;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ typedef int32_t frame_id_t;
|
||||||
typedef pgsz_t pgoff_t;
|
typedef pgsz_t pgoff_t;
|
||||||
|
|
||||||
// cache
|
// cache
|
||||||
#define TDB_DEFAULT_CACHE_SIZE (256 * 1024) // 256K
|
#define TDB_DEFAULT_CACHE_SIZE (256 * 4096) // 1M
|
||||||
|
|
||||||
// tdb_log
|
// tdb_log
|
||||||
#define tdbError(var)
|
#define tdbError(var)
|
||||||
|
|
|
@ -2,21 +2,28 @@
|
||||||
|
|
||||||
#include "tdb.h"
|
#include "tdb.h"
|
||||||
|
|
||||||
#define A_ASSERT(op) GTEST_ASSERT_EQ(op, 0)
|
|
||||||
|
|
||||||
TEST(tdb_test, simple_test) {
|
TEST(tdb_test, simple_test) {
|
||||||
TENV* pEnv;
|
TENV* pEnv;
|
||||||
TDB * pDb1, *pDb2;
|
TDB * pDb1, *pDb2, *pDb3;
|
||||||
|
pgsz_t pgSize = 1024;
|
||||||
|
cachesz_t cacheSize = 10240;
|
||||||
|
|
||||||
// ENV
|
// ENV
|
||||||
tdbEnvCreate(&pEnv);
|
GTEST_ASSERT_EQ(tdbEnvCreate(&pEnv, "./tdbtest"), 0);
|
||||||
tdbEnvSetPageSize(pEnv, 1024);
|
|
||||||
tdbEnvSetCacheSize(pEnv, 10240);
|
|
||||||
tdbEnvOpen(&pEnv);
|
|
||||||
|
|
||||||
|
GTEST_ASSERT_EQ(tdbEnvSetCache(pEnv, pgSize, cacheSize), 0);
|
||||||
|
|
||||||
|
GTEST_ASSERT_EQ(tdbEnvGetCacheSize(pEnv), cacheSize);
|
||||||
|
|
||||||
|
GTEST_ASSERT_EQ(tdbEnvGetPageSize(pEnv), pgSize);
|
||||||
|
|
||||||
|
GTEST_ASSERT_EQ(tdbEnvOpen(pEnv), 0);
|
||||||
|
|
||||||
|
#if 0
|
||||||
// DB
|
// DB
|
||||||
tdbOpen(&pDb1, "db.db", "db1", pEnv);
|
tdbOpen(&pDb1, "db.db", "db1", pEnv);
|
||||||
tdbOpen(&pDb2, "db.db", "db2", pEnv);
|
tdbOpen(&pDb2, "db.db", "db2", pEnv);
|
||||||
|
tdbOpen(&pDb3, "index.db", NULL, pEnv);
|
||||||
|
|
||||||
// Insert
|
// Insert
|
||||||
|
|
||||||
|
@ -29,5 +36,6 @@ TEST(tdb_test, simple_test) {
|
||||||
// Close
|
// Close
|
||||||
tdbClose(pDb1);
|
tdbClose(pDb1);
|
||||||
tdbClose(pDb2);
|
tdbClose(pDb2);
|
||||||
|
#endif
|
||||||
tdbEnvClose(pEnv);
|
tdbEnvClose(pEnv);
|
||||||
}
|
}
|
Loading…
Reference in New Issue