From ed3beb248a3e5f67f6d9dcfbf88400a2969c78cd Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Fri, 15 Oct 2021 17:07:37 +0800 Subject: [PATCH] more --- include/server/vnode/meta/meta.h | 7 ++- source/server/vnode/meta/src/metaMain.c | 32 ++++++++-- source/server/vnode/meta/test/metaTests.cpp | 66 +++++++++++++++++++-- 3 files changed, 95 insertions(+), 10 deletions(-) diff --git a/include/server/vnode/meta/meta.h b/include/server/vnode/meta/meta.h index 541f1b0316..ae81f995d7 100644 --- a/include/server/vnode/meta/meta.h +++ b/include/server/vnode/meta/meta.h @@ -58,9 +58,12 @@ SMetaQueryOpts *metaQueryOptionsCreate(); void metaQueryOptionsDestroy(SMetaQueryOpts *); // STableOpts -#define META_TABLE_OPTS_DECLARE(name) STableOpts name = {0}; +#define META_TABLE_OPTS_DECLARE(name) STableOpts name = {0} void metaNormalTableOptsInit(STableOpts *, const char *name, const STSchema *pSchema); -void metaTableOptsDestroy(STableOpts *); +void metaSuperTableOptsInit(STableOpts *, const char *name, tb_uid_t uid, const STSchema *pSchema, + const STSchema *pTagSchema); +void metaChildTableOptsInit(STableOpts *, const char *name, tb_uid_t suid, const SKVRow tags); +void metaTableOptsClear(STableOpts *); /* ------------------------ Impl should hidden ------------------------ */ typedef enum { META_INIT_TABLE = 0, META_SUPER_TABLE = 1, META_CHILD_TABLE = 2, META_NORMAL_TABLE = 3 } EMetaTableT; diff --git a/source/server/vnode/meta/src/metaMain.c b/source/server/vnode/meta/src/metaMain.c index 401ad6ff53..612ef49a04 100644 --- a/source/server/vnode/meta/src/metaMain.c +++ b/source/server/vnode/meta/src/metaMain.c @@ -167,7 +167,7 @@ static int metaCreateChildTable(SMeta *pMeta, const char *tbname, const SChildTa vallen = 0; pBuf = (void *)buffer; vallen += taosEncodeString(&pBuf, tbname); - vallen += taosEncodeFixedU64(pBuf, pChildTableOpts->suid); + vallen += taosEncodeFixedU64(&pBuf, pChildTableOpts->suid); tkvPut(pMeta->tableDb, NULL, (char *)(&uid), sizeof(uid), buffer, vallen); // Put tbname -> uid @@ -218,18 +218,42 @@ void metaNormalTableOptsInit(STableOpts *pTableOpts, const char *name, const STS pTableOpts->normalOpts.pSchema = tdDupSchema(pSchema); } -void metaTableOptsDestroy(STableOpts *pTableOpts) { +void metaSuperTableOptsInit(STableOpts *pTableOpts, const char *name, tb_uid_t uid, const STSchema *pSchema, + const STSchema *pTagSchema) { + pTableOpts->type = META_SUPER_TABLE; + pTableOpts->name = strdup(name); + pTableOpts->superOpts.uid = uid; + pTableOpts->superOpts.pSchema = tdDupSchema(pSchema); + pTableOpts->superOpts.pTagSchema = tdDupSchema(pTagSchema); +} + +void metaChildTableOptsInit(STableOpts *pTableOpts, const char *name, tb_uid_t suid, const SKVRow tags) { + pTableOpts->type = META_CHILD_TABLE; + pTableOpts->name = strdup(name); + pTableOpts->childOpts.suid = suid; + pTableOpts->childOpts.tags = tdKVRowDup(tags); +} + +void metaTableOptsClear(STableOpts *pTableOpts) { switch (pTableOpts->type) { case META_NORMAL_TABLE: tfree(pTableOpts->name); tdFreeSchema(pTableOpts->normalOpts.pSchema); break; + case META_SUPER_TABLE: + tdFreeSchema(pTableOpts->superOpts.pTagSchema); + tdFreeSchema(pTableOpts->superOpts.pSchema); + tfree(pTableOpts->name); + break; + case META_CHILD_TABLE: + kvRowFree(pTableOpts->childOpts.tags); + tfree(pTableOpts->name); + break; default: break; } - // TODO - pTableOpts->type = META_INIT_TABLE; + memset(pTableOpts, 0, sizeof(*pTableOpts)); } void metaDestroy(const char *path) { taosRemoveDir(path); } diff --git a/source/server/vnode/meta/test/metaTests.cpp b/source/server/vnode/meta/test/metaTests.cpp index aa645a143b..727d44f341 100644 --- a/source/server/vnode/meta/test/metaTests.cpp +++ b/source/server/vnode/meta/test/metaTests.cpp @@ -6,7 +6,7 @@ static STSchema *metaGetSimpleSchema() { STSchema * pSchema = NULL; - STSchemaBuilder sb; + STSchemaBuilder sb = {0}; tdInitTSchemaBuilder(&sb, 0); tdAddColToSchema(&sb, TSDB_DATA_TYPE_TIMESTAMP, 0, 8); @@ -18,13 +18,31 @@ static STSchema *metaGetSimpleSchema() { return pSchema; } -TEST(MetaTest, meta_create_1m_normal_tables_test) { +static SKVRow metaGetSimpleTags() { + SKVRowBuilder kvrb = {0}; + SKVRow row; + + tdInitKVRowBuilder(&kvrb); + int64_t ts = 1634287978000; + int32_t a = 10; + + tdAddColToKVRow(&kvrb, 0, TSDB_DATA_TYPE_TIMESTAMP, (void *)(&ts)); + tdAddColToKVRow(&kvrb, 0, TSDB_DATA_TYPE_INT, (void *)(&a)); + + row = tdGetKVRowFromBuilder(&kvrb); + + tdDestroyKVRowBuilder(&kvrb); + + return row; +} + +TEST(MetaTest, DISABLED_meta_create_1m_normal_tables_test) { // Open Meta SMeta *meta = metaOpen(NULL); std::cout << "Meta is opened!" << std::endl; // Create 1000000 normal tables - META_TABLE_OPTS_DECLARE(tbOpts) + META_TABLE_OPTS_DECLARE(tbOpts); STSchema *pSchema = metaGetSimpleSchema(); char tbname[128]; @@ -32,8 +50,48 @@ TEST(MetaTest, meta_create_1m_normal_tables_test) { sprintf(tbname, "ntb%ld", i); metaNormalTableOptsInit(&tbOpts, tbname, pSchema); metaCreateTable(meta, &tbOpts); - metaTableOptsDestroy(&tbOpts); + metaTableOptsClear(&tbOpts); + } + + tdFreeSchema(pSchema); + + // Close Meta + metaClose(meta); + std::cout << "Meta is closed!" << std::endl; + + // Destroy Meta + metaDestroy("meta"); + std::cout << "Meta is destroyed!" << std::endl; +} + +TEST(MetaTest, meta_create_1m_child_tables_test) { + // Open Meta + SMeta *meta = metaOpen(NULL); + std::cout << "Meta is opened!" << std::endl; + + // Create a super tables + tb_uid_t uid = 477529885843758ul; + META_TABLE_OPTS_DECLARE(tbOpts); + STSchema *pSchema = metaGetSimpleSchema(); + STSchema *pTagSchema = metaGetSimpleSchema(); + + metaSuperTableOptsInit(&tbOpts, "st", uid, pSchema, pTagSchema); + metaCreateTable(meta, &tbOpts); + metaTableOptsClear(&tbOpts); + + tdFreeSchema(pSchema); + tdFreeSchema(pTagSchema); + + // Create 1000000 child tables + char name[128]; + SKVRow row = metaGetSimpleTags(); + for (size_t i = 0; i < 1000000; i++) { + sprintf(name, "ctb%ld", i); + metaChildTableOptsInit(&tbOpts, name, uid, row); + metaCreateTable(meta, &tbOpts); + metaTableOptsClear(&tbOpts); } + kvRowFree(row); // Close Meta metaClose(meta); -- GitLab