more work
This commit is contained in:
parent
9048c77eca
commit
c448c15673
|
@ -17,8 +17,14 @@
|
||||||
|
|
||||||
#include "metaDef.h"
|
#include "metaDef.h"
|
||||||
|
|
||||||
|
#include "tcoding.h"
|
||||||
#include "thash.h"
|
#include "thash.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
tb_uid_t uid;
|
||||||
|
int32_t sver;
|
||||||
|
} SSchemaKey;
|
||||||
|
|
||||||
struct SMetaDB {
|
struct SMetaDB {
|
||||||
// DB
|
// DB
|
||||||
DB * pStbDB;
|
DB * pStbDB;
|
||||||
|
@ -39,9 +45,18 @@ static SMetaDB *metaNewDB();
|
||||||
static void metaFreeDB(SMetaDB *pDB);
|
static void metaFreeDB(SMetaDB *pDB);
|
||||||
static int metaCreateDBEnv(SMetaDB *pDB, const char *path);
|
static int metaCreateDBEnv(SMetaDB *pDB, const char *path);
|
||||||
static void metaDestroyDBEnv(SMetaDB *pDB);
|
static void metaDestroyDBEnv(SMetaDB *pDB);
|
||||||
|
static int metaEncodeSchemaKey(void **buf, SSchemaKey *pSchemaKey);
|
||||||
|
static void * metaDecodeSchemaKey(void *buf, SSchemaKey *pSchemaKey);
|
||||||
|
static int metaNameIdxCb(DB *sdbp, const DBT *pKey, const DBT *pValue, DBT *pSKey);
|
||||||
|
static int metaUidIdxCb(DB *sdbp, const DBT *pKey, const DBT *pValue, DBT *pSKey);
|
||||||
|
static void metaPutSchema(SMeta *pMeta, tb_uid_t uid, STSchema *pSchema);
|
||||||
|
static int metaEncodeTbInfo(void **buf, STbCfg *pTbCfg);
|
||||||
|
static void * metaDecodeTbInfo(void *buf, STbCfg *pTbCfg);
|
||||||
|
static int metaSaveTbInfo(DB *pDB, tb_uid_t uid, STbCfg *pTbCfg);
|
||||||
|
|
||||||
#define META_OPEN_DB(pDB, pEnv, fName) \
|
#define META_OPEN_DB(pDB, pEnv, fName) \
|
||||||
do { \
|
do { \
|
||||||
|
int ret; \
|
||||||
ret = db_create(&((pDB)), (pEnv), 0); \
|
ret = db_create(&((pDB)), (pEnv), 0); \
|
||||||
if (ret != 0) { \
|
if (ret != 0) { \
|
||||||
P_ERROR("Failed to create META DB", ret); \
|
P_ERROR("Failed to create META DB", ret); \
|
||||||
|
@ -59,6 +74,15 @@ static void metaDestroyDBEnv(SMetaDB *pDB);
|
||||||
|
|
||||||
#define META_CLOSE_DB(pDB)
|
#define META_CLOSE_DB(pDB)
|
||||||
|
|
||||||
|
#define META_ASSOCIATE_IDX(pDB, pNameIdx, cbf) \
|
||||||
|
do { \
|
||||||
|
int ret = (pDB)->associate((pDB), NULL, (pNameIdx), (cbf), 0); \
|
||||||
|
if (ret != 0) { \
|
||||||
|
P_ERROR("Failed to associate META DB", ret); \
|
||||||
|
metaCloseDB(pMeta); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
int metaOpenDB(SMeta *pMeta) {
|
int metaOpenDB(SMeta *pMeta) {
|
||||||
int ret;
|
int ret;
|
||||||
SMetaDB *pDB;
|
SMetaDB *pDB;
|
||||||
|
@ -89,6 +113,17 @@ int metaOpenDB(SMeta *pMeta) {
|
||||||
|
|
||||||
META_OPEN_DB(pDB->pUidIdx, pDB->pEvn, "index.db");
|
META_OPEN_DB(pDB->pUidIdx, pDB->pEvn, "index.db");
|
||||||
|
|
||||||
|
// Associate name index
|
||||||
|
META_ASSOCIATE_IDX(pDB->pStbDB, pDB->pNameIdx, metaNameIdxCb);
|
||||||
|
META_ASSOCIATE_IDX(pDB->pStbDB, pDB->pUidIdx, metaUidIdxCb);
|
||||||
|
META_ASSOCIATE_IDX(pDB->pNtbDB, pDB->pNameIdx, metaNameIdxCb);
|
||||||
|
META_ASSOCIATE_IDX(pDB->pNtbDB, pDB->pUidIdx, metaUidIdxCb);
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
// Loop to associate each super table db
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
// TODO: Loop to open index DB for each super table
|
// TODO: Loop to open index DB for each super table
|
||||||
// and create the association between main DB and index
|
// and create the association between main DB and index
|
||||||
|
@ -106,7 +141,56 @@ void metaCloseDB(SMeta *pMeta) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int metaSaveTableToDB(SMeta *pMeta, STbCfg *pTbCfg) {
|
int metaSaveTableToDB(SMeta *pMeta, STbCfg *pTbCfg) {
|
||||||
// TODO
|
char buf[512];
|
||||||
|
void * pBuf;
|
||||||
|
DBT key = {0};
|
||||||
|
DBT value = {0};
|
||||||
|
SSchemaKey schemaKey;
|
||||||
|
tb_uid_t uid;
|
||||||
|
|
||||||
|
if (pTbCfg->type == META_SUPER_TABLE) {
|
||||||
|
// Handle SUPER table
|
||||||
|
uid = pTbCfg->stbCfg.suid;
|
||||||
|
|
||||||
|
// Same table info
|
||||||
|
metaSaveTbInfo(pMeta->pDB->pStbDB, uid, pTbCfg);
|
||||||
|
|
||||||
|
// save schema
|
||||||
|
metaPutSchema(pMeta, uid, pTbCfg->stbCfg.pSchema);
|
||||||
|
|
||||||
|
{
|
||||||
|
// Create a super table DB and corresponding index DB
|
||||||
|
DB *pStbDB;
|
||||||
|
DB *pStbIdxDB;
|
||||||
|
|
||||||
|
META_OPEN_DB(pStbDB, pMeta->pDB->pEvn, "meta.db");
|
||||||
|
|
||||||
|
META_OPEN_DB(pStbIdxDB, pMeta->pDB->pEvn, "index.db");
|
||||||
|
|
||||||
|
// TODO META_ASSOCIATE_IDX();
|
||||||
|
}
|
||||||
|
} else if (pTbCfg->type == META_CHILD_TABLE) {
|
||||||
|
// Handle CHILD table
|
||||||
|
uid = metaGenerateUid(pMeta);
|
||||||
|
|
||||||
|
DB *pCTbDB = taosHashGet(pMeta->pDB->pCtbMap, &(pTbCfg->ctbCfg.suid), sizeof(pTbCfg->ctbCfg.suid));
|
||||||
|
if (pCTbDB == NULL) {
|
||||||
|
ASSERT(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
metaSaveTbInfo(pCTbDB, uid, pTbCfg);
|
||||||
|
|
||||||
|
} else if (pTbCfg->type == META_NORMAL_TABLE) {
|
||||||
|
// Handle NORMAL table
|
||||||
|
uid = metaGenerateUid(pMeta);
|
||||||
|
|
||||||
|
metaSaveTbInfo(pMeta->pDB->pNtbDB, uid, pTbCfg);
|
||||||
|
|
||||||
|
metaPutSchema(pMeta, uid, pTbCfg->stbCfg.pSchema);
|
||||||
|
} else {
|
||||||
|
ASSERT(0);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,4 +259,79 @@ static void metaDestroyDBEnv(SMetaDB *pDB) {
|
||||||
if (pDB->pEvn) {
|
if (pDB->pEvn) {
|
||||||
pDB->pEvn->close(pDB->pEvn, 0);
|
pDB->pEvn->close(pDB->pEvn, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int metaEncodeSchemaKey(void **buf, SSchemaKey *pSchemaKey) {
|
||||||
|
int tsize = 0;
|
||||||
|
|
||||||
|
tsize += taosEncodeFixedU64(buf, pSchemaKey->uid);
|
||||||
|
tsize += taosEncodeFixedI32(buf, pSchemaKey->sver);
|
||||||
|
|
||||||
|
return tsize;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *metaDecodeSchemaKey(void *buf, SSchemaKey *pSchemaKey) {
|
||||||
|
buf = taosDecodeFixedU64(buf, &(pSchemaKey->uid));
|
||||||
|
buf = taosDecodeFixedI32(buf, &(pSchemaKey->sver));
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int metaNameIdxCb(DB *sdbp, const DBT *pKey, const DBT *pValue, DBT *pSKey) {
|
||||||
|
// TODO
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int metaUidIdxCb(DB *sdbp, const DBT *pKey, const DBT *pValue, DBT *pSKey) {
|
||||||
|
// TODO
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void metaPutSchema(SMeta *pMeta, tb_uid_t uid, STSchema *pSchema) {
|
||||||
|
SSchemaKey skey;
|
||||||
|
char buf[256];
|
||||||
|
void * pBuf = buf;
|
||||||
|
DBT key = {0};
|
||||||
|
DBT value = {0};
|
||||||
|
|
||||||
|
skey.uid = uid;
|
||||||
|
skey.sver = schemaVersion(pSchema);
|
||||||
|
|
||||||
|
key.data = &skey;
|
||||||
|
key.size = sizeof(skey);
|
||||||
|
|
||||||
|
tdEncodeSchema(&pBuf, pSchema);
|
||||||
|
value.data = buf;
|
||||||
|
value.size = POINTER_DISTANCE(pBuf, buf);
|
||||||
|
|
||||||
|
pMeta->pDB->pSchemaDB->put(pMeta->pDB->pSchemaDB, NULL, &key, &value, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int metaEncodeTbInfo(void **buf, STbCfg *pTbCfg) {
|
||||||
|
// TODO
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *metaDecodeTbInfo(void *buf, STbCfg *pTbCfg) {
|
||||||
|
// TODO
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int metaSaveTbInfo(DB *pDB, tb_uid_t uid, STbCfg *pTbCfg) {
|
||||||
|
DBT key = {0};
|
||||||
|
DBT value = {0};
|
||||||
|
char buf[512];
|
||||||
|
void *pBuf = buf;
|
||||||
|
|
||||||
|
key.data = &uid;
|
||||||
|
key.size = sizeof(uid);
|
||||||
|
|
||||||
|
metaEncodeTbInfo(&pBuf, pTbCfg);
|
||||||
|
|
||||||
|
value.data = buf;
|
||||||
|
value.size = POINTER_DISTANCE(pBuf, buf);
|
||||||
|
|
||||||
|
pDB->put(pDB, NULL, &key, &value, 0);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
Loading…
Reference in New Issue