From d294014fd2e650a06d1e6b62a69899dc308b66de Mon Sep 17 00:00:00 2001 From: Cary Xu Date: Fri, 24 Dec 2021 19:18:50 +0800 Subject: [PATCH] [TS-983]:create subtable to specific vgroups by _taos_meta_sync_table_name_taos_ --- src/common/inc/tglobal.h | 7 +++++++ src/common/src/tglobal.c | 15 +++++++++++++++ src/mnode/src/mnodeTable.c | 23 ++++++++++++++++++++++- src/mnode/src/mnodeVgroup.c | 35 ++++++++++++++++++++++++++++++++++- src/util/inc/tconfig.h | 2 +- 5 files changed, 79 insertions(+), 3 deletions(-) diff --git a/src/common/inc/tglobal.h b/src/common/inc/tglobal.h index cde5eab487..ae178cfd06 100644 --- a/src/common/inc/tglobal.h +++ b/src/common/inc/tglobal.h @@ -64,6 +64,7 @@ extern int32_t tsCompressMsgSize; extern int32_t tsCompressColData; extern int32_t tsMaxNumOfDistinctResults; extern char tsTempDir[]; +extern int32_t tsMetaSyncOption; // query buffer management extern int32_t tsQueryBufferSize; // maximum allowed usage buffer size in MB for each data node during query processing @@ -223,6 +224,12 @@ extern int32_t debugFlag; extern int8_t tsClientMerge; +// informal +#define META_SYNC_TABLE_NAME "_taos_meta_sync_table_name_taos_" +#define META_SYNC_TABLE_NAME_LEN 32 +extern int32_t tVgId; +// informal + #ifdef TD_TSZ // lossy extern char lossyColumns[]; diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c index 8627a3153c..b2d6438970 100644 --- a/src/common/src/tglobal.c +++ b/src/common/src/tglobal.c @@ -65,6 +65,7 @@ char tsLocale[TSDB_LOCALE_LEN] = {0}; char tsCharset[TSDB_LOCALE_LEN] = {0}; // default encode string int8_t tsEnableCoreFile = 0; int32_t tsMaxBinaryDisplayWidth = 30; +int32_t tsMetaSyncOption = 0; /* * denote if the server needs to compress response message at the application layer to client, including query rsp, @@ -273,6 +274,10 @@ int32_t fsDebugFlag = 135; int8_t tsClientMerge = 0; +// informal +int32_t tVgId = 0; // vgroupd ID +// informal + #ifdef TD_TSZ // // lossy compress 6 @@ -1738,6 +1743,16 @@ static void doInitGlobalConfig(void) { cfg.unitType = TAOS_CFG_UTYPE_MB; taosInitConfigOption(cfg); + cfg.option = "metaSyncOption"; + cfg.ptr = &tsMetaSyncOption; + cfg.valType = TAOS_CFG_VTYPE_INT32; + cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; + cfg.minValue = 0; + cfg.maxValue = 1; + cfg.ptrLength = 0; + cfg.unitType = TAOS_CFG_UTYPE_NONE; + taosInitConfigOption(cfg); + #ifdef TD_TSZ // lossy compress cfg.option = "lossyColumns"; diff --git a/src/mnode/src/mnodeTable.c b/src/mnode/src/mnodeTable.c index 4f277efd34..ee5106d3e5 100644 --- a/src/mnode/src/mnodeTable.c +++ b/src/mnode/src/mnodeTable.c @@ -1726,6 +1726,9 @@ int32_t mnodeRetrieveShowSuperTables(SShowObj *pShow, char *data, int32_t rows, cols++; numOfRows++; + + mDebug("stable: %s, uid: %" PRIu64, prefix, pTable->uid); + mnodeDecTableRef(pTable); } @@ -2227,9 +2230,27 @@ static int32_t mnodeProcessCreateChildTableMsg(SMnodeMsg *pMsg) { if (pMsg->pTable == NULL) { SVgObj *pVgroup = NULL; int32_t tid = 0; + + if (tsMetaSyncOption) { + char tbName[TSDB_TABLE_NAME_LEN] = "\0"; + strncpy(tbName, pCreate->tableName, TSDB_TABLE_NAME_LEN); + char *pTbName = strtok(tbName, "."); + if (pTbName) { + pTbName = strtok(NULL, "."); + if (pTbName) { + pTbName = strtok(NULL, "."); + if (pTbName) { + if (0 == strncmp(META_SYNC_TABLE_NAME, pTbName, META_SYNC_TABLE_NAME_LEN)) { + tVgId = atoi(pTbName + META_SYNC_TABLE_NAME_LEN); + } + } + } + } + } + code = mnodeGetAvailableVgroup(pMsg, &pVgroup, &tid); if (code != TSDB_CODE_SUCCESS) { - mDebug("msg:%p, app:%p table:%s, failed to get available vgroup, reason:%s", pMsg, pMsg->rpcMsg.ahandle, + mError("msg:%p, app:%p table:%s, failed to get available vgroup, reason:%s", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableName, tstrerror(code)); return code; } diff --git a/src/mnode/src/mnodeVgroup.c b/src/mnode/src/mnodeVgroup.c index fd6d60c034..0dd00db33d 100644 --- a/src/mnode/src/mnodeVgroup.c +++ b/src/mnode/src/mnodeVgroup.c @@ -431,7 +431,40 @@ static int32_t mnodeAllocVgroupIdPool(SVgObj *pInputVgroup) { int32_t mnodeGetAvailableVgroup(SMnodeMsg *pMsg, SVgObj **ppVgroup, int32_t *pSid) { SDbObj *pDb = pMsg->pDb; pthread_mutex_lock(&pDb->mutex); - + + if (tVgId > 0) { + for (int32_t v = 0; v < pDb->numOfVgroups; ++v) { + SVgObj *pVgroup = pDb->vgList[v]; + if (pVgroup == NULL) { + mError("db:%s, vgroup: %d is null", pDb->name, v); + pthread_mutex_unlock(&pDb->mutex); + return TSDB_CODE_MND_APP_ERROR; + } + + if (pVgroup->vgId != (uint32_t)tVgId) { // find the target vgId + continue; + } + + int32_t sid = taosAllocateId(pVgroup->idPool); + if (sid <= 0) { + mError("msg:%p, app:%p db:%s, no enough sid in vgId:%d", pMsg, pMsg->rpcMsg.ahandle, pDb->name, pVgroup->vgId); + pthread_mutex_unlock(&pDb->mutex); + return TSDB_CODE_MND_APP_ERROR; + } + mDebug("vgId:%d, alloc tid:%d", pVgroup->vgId, sid); + + *pSid = sid; + *ppVgroup = pVgroup; + pDb->vgListIndex = v; + + pthread_mutex_unlock(&pDb->mutex); + return TSDB_CODE_SUCCESS; + } + pthread_mutex_unlock(&pDb->mutex); + mError("db:%s, vgroup: %d not exist", pDb->name, tVgId); + return TSDB_CODE_MND_APP_ERROR; + } + for (int32_t v = 0; v < pDb->numOfVgroups; ++v) { int vgIndex = (v + pDb->vgListIndex) % pDb->numOfVgroups; SVgObj *pVgroup = pDb->vgList[vgIndex]; diff --git a/src/util/inc/tconfig.h b/src/util/inc/tconfig.h index c52fbf208f..fd9a340a25 100644 --- a/src/util/inc/tconfig.h +++ b/src/util/inc/tconfig.h @@ -20,7 +20,7 @@ extern "C" { #endif -#define TSDB_CFG_MAX_NUM 130 +#define TSDB_CFG_MAX_NUM 131 #define TSDB_CFG_PRINT_LEN 23 #define TSDB_CFG_OPTION_LEN 24 #define TSDB_CFG_VALUE_LEN 41 -- GitLab