From 8cfcade69dcfaddc4159972290f5808a2c736ca5 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Wed, 3 Nov 2021 17:55:56 +0800 Subject: [PATCH] more --- include/server/vnode/meta/impl/metaImpl.h | 4 ++ source/dnode/vnode/meta/inc/metaTbOptions.h | 3 +- source/dnode/vnode/meta/src/metaDB.c | 48 ++++++++++++++++++++- source/dnode/vnode/meta/src/metaTbOptions.c | 5 +++ 4 files changed, 58 insertions(+), 2 deletions(-) diff --git a/include/server/vnode/meta/impl/metaImpl.h b/include/server/vnode/meta/impl/metaImpl.h index d6f3bbbcfe..e6cf2de901 100644 --- a/include/server/vnode/meta/impl/metaImpl.h +++ b/include/server/vnode/meta/impl/metaImpl.h @@ -31,6 +31,10 @@ struct SMetaOptions { }; /* ------------------------ STbOptions ------------------------ */ +#define META_NORMAL_TABLE ((uint8_t)1) +#define META_SUPER_TABLE ((uint8_t)2) +#define META_CHILD_TABLE ((uint8_t)3) + typedef struct { } SSMAOptions; diff --git a/source/dnode/vnode/meta/inc/metaTbOptions.h b/source/dnode/vnode/meta/inc/metaTbOptions.h index 1da68ffd52..b0fbd3a463 100644 --- a/source/dnode/vnode/meta/inc/metaTbOptions.h +++ b/source/dnode/vnode/meta/inc/metaTbOptions.h @@ -22,7 +22,8 @@ extern "C" { #endif -int metaValidateTbOptions(SMeta *pMeta, const STbOptions *); +int metaValidateTbOptions(SMeta *pMeta, const STbOptions *); +size_t metaEncodeTbObjFromTbOptions(const STbOptions *, void *pBuf, size_t bsize); #ifdef __cplusplus } diff --git a/source/dnode/vnode/meta/src/metaDB.c b/source/dnode/vnode/meta/src/metaDB.c index 6630eb8a2c..580608e851 100644 --- a/source/dnode/vnode/meta/src/metaDB.c +++ b/source/dnode/vnode/meta/src/metaDB.c @@ -91,7 +91,53 @@ void metaCloseDB(SMeta *pMeta) { } int metaSaveTableToDB(SMeta *pMeta, const STbOptions *pTbOptions) { - // TODO + tb_uid_t uid; + char * err = NULL; + size_t size; + char pBuf[1024]; // TODO + + rocksdb_writeoptions_t *wopt = rocksdb_writeoptions_create(); + + // Generate a uid for child and normal table + if (pTbOptions->type == META_SUPER_TABLE) { + uid = pTbOptions->stbOptions.uid; + } else { + uid = metaGenerateUid(pMeta); + } + + // Save tbname -> uid to tbnameDB + rocksdb_put(pMeta->pDB->nameDb, wopt, pTbOptions->name, strlen(pTbOptions->name), (char *)(&uid), sizeof(uid), &err); + + // Save uid -> tb_obj to tbDB + size = metaEncodeTbObjFromTbOptions(pTbOptions, pBuf, 1024); + rocksdb_put(pMeta->pDB->tbDb, wopt, (char *)(&uid), sizeof(uid), pBuf, size, &err); + + switch (pTbOptions->type) { + case META_NORMAL_TABLE: + // save schemaDB + rocksdb_put(pMeta->pDB->schemaDb, wopt, NULL /* TODO */, NULL /* TODO */, NULL /* TODO */, NULL /* TODO */, &err); + break; + case META_SUPER_TABLE: + // save schemaDB + rocksdb_put(pMeta->pDB->schemaDb, wopt, NULL /* TODO */, NULL /* TODO */, NULL /* TODO */, NULL /* TODO */, &err); + + // save mapDB (really need?) + rocksdb_put(pMeta->pDB->mapDb, wopt, (char *)(&uid), sizeof(uid), "", 0, &err); + break; + case META_CHILD_TABLE: + // save tagDB + rocksdb_put(pMeta->pDB->tagDb, wopt, NULL /* TODO */, 0 /* TODO */, NULL /* TODO */, 0 /* TODO */, &err); + + // save mapDB + rocksdb_put(pMeta->pDB->mapDb, wopt, (char *)(&(pTbOptions->ctbOptions.suid)), sizeof(tb_uid_t), NULL /* TODO */, + 0 /* TODO */, &err); + break; + default: + ASSERT(0); + } + + rocksdb_writeoptions_destroy(wopt); + return 0; } diff --git a/source/dnode/vnode/meta/src/metaTbOptions.c b/source/dnode/vnode/meta/src/metaTbOptions.c index 1f855aef23..2c4093bf44 100644 --- a/source/dnode/vnode/meta/src/metaTbOptions.c +++ b/source/dnode/vnode/meta/src/metaTbOptions.c @@ -18,4 +18,9 @@ int metaValidateTbOptions(SMeta *pMeta, const STbOptions *pTbOptions) { // TODO return 0; +} + +size_t metaEncodeTbObjFromTbOptions(const STbOptions *pTbOptions, void *pBuf, size_t bsize) { + // TODO + return 0; } \ No newline at end of file