diff --git a/src/client/inc/tsclient.h b/src/client/inc/tsclient.h index 10cfe8bcc5053fa9fe44982268d9e8843d071ce6..c5e3cb727f85dafd2b51efe741cd635394908cfd 100644 --- a/src/client/inc/tsclient.h +++ b/src/client/inc/tsclient.h @@ -440,7 +440,7 @@ int tsParseSql(SSqlObj *pSql, bool initial); void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet); int tscBuildAndSendRequest(SSqlObj *pSql, SQueryInfo* pQueryInfo); -int tscRenewTableMeta(SSqlObj *pSql, int32_t tableIndex); +int tscRenewTableMeta(SSqlObj *pSql); void tscAsyncResultOnError(SSqlObj *pSql); void tscQueueAsyncError(void(*fp), void *param, int32_t code); diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 89cf7edd2ed9411009032fc1e7314c210683d89f..3032b27b9cab6005d9cde120ede7fde831df181f 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -9508,7 +9508,7 @@ static int32_t doLoadAllTableMeta(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNod char buf[TSDB_TABLE_FNAME_LEN]; SStrToken sTblToken; sTblToken.z = buf; - + if (validateTableName(oriName->z, oriName->n, &sTblToken, &dbIncluded) != TSDB_CODE_SUCCESS) { return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg1); } diff --git a/src/client/src/tscServer.c b/src/client/src/tscServer.c index 270a408ea03f9041f4854a795b84ffd84aa4a3d7..416190fa95ca3518091ac0278ee4dbe70fa8539b 100644 --- a/src/client/src/tscServer.c +++ b/src/client/src/tscServer.c @@ -444,7 +444,7 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) { } pSql->retryReason = rpcMsg->code; - rpcMsg->code = tscRenewTableMeta(pSql, 0); + rpcMsg->code = tscRenewTableMeta(pSql); // if there is an error occurring, proceed to the following error handling procedure. if (rpcMsg->code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) { taosReleaseRef(tscObjRef, handle); @@ -3074,28 +3074,46 @@ static void freeElem(void* p) { /** * retrieve table meta from mnode, and then update the local table meta hashmap. * @param pSql sql object - * @param tableIndex table index * @return status code */ -int tscRenewTableMeta(SSqlObj *pSql, int32_t tableIndex) { +int tscRenewTableMeta(SSqlObj *pSql) { + int32_t code = TSDB_CODE_SUCCESS; SSqlCmd* pCmd = &pSql->cmd; SQueryInfo *pQueryInfo = tscGetQueryInfo(pCmd); - STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, tableIndex); - char name[TSDB_TABLE_FNAME_LEN] = {0}; - int32_t code = tNameExtractFullName(&pTableMetaInfo->name, name); - if (code != TSDB_CODE_SUCCESS) { - tscError("0x%"PRIx64" failed to generate the table full name", pSql->self); - return TSDB_CODE_TSC_INVALID_OPERATION; - } + SArray* pNameList = taosArrayInit(1, POINTER_BYTES); + SArray* vgroupList = taosArrayInit(1, POINTER_BYTES); - STableMeta* pTableMeta = pTableMetaInfo->pTableMeta; - if (pTableMeta) { - tscDebug("0x%"PRIx64" update table meta:%s, old meta numOfTags:%d, numOfCols:%d, uid:%" PRIu64, pSql->self, name, - tscGetNumOfTags(pTableMeta), tscGetNumOfColumns(pTableMeta), pTableMeta->id.uid); + SHashObj *nameTable = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK); + + while (pQueryInfo) { + STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0); + + char name[TSDB_TABLE_FNAME_LEN] = {0}; + code = tNameExtractFullName(&pTableMetaInfo->name, name); + if (code != TSDB_CODE_SUCCESS) { + tscError("0x%"PRIx64" failed to generate the table full name", pSql->self); + return TSDB_CODE_TSC_INVALID_OPERATION; + } + + //do not add duplicate names + if (!taosHashGet(nameTable, name, strlen(name))) { + STableMeta* pTableMeta = pTableMetaInfo->pTableMeta; + if (pTableMeta) { + tscDebug("0x%"PRIx64" update table meta:%s, old meta numOfTags:%d, numOfCols:%d, uid:%" PRIu64, pSql->self, name, + tscGetNumOfTags(pTableMeta), tscGetNumOfColumns(pTableMeta), pTableMeta->id.uid); + } + + char* n = strdup(name); + taosArrayPush(pNameList, &n); + uint8_t dummy_val = 0; + taosHashPut(nameTable, name, strlen(name), &dummy_val, sizeof(uint8_t)); + } + pQueryInfo = pQueryInfo->sibling; } + taosHashCleanup(nameTable); // remove stored tableMeta info in hash table tscResetSqlCmd(pCmd, true, pSql->self); @@ -3103,18 +3121,13 @@ int tscRenewTableMeta(SSqlObj *pSql, int32_t tableIndex) { SSqlCmd* pCmd2 = &pSql->rootObj->cmd; pCmd2->pTableMetaMap = tscCleanupTableMetaMap(pCmd2->pTableMetaMap); pCmd2->pTableMetaMap = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK); - + pSql->rootObj->retryReason = pSql->retryReason; SSqlObj *tmpSql = pSql->rootObj; tscFreeSubobj(pSql->rootObj); tfree(tmpSql->pSubs); - SArray* pNameList = taosArrayInit(1, POINTER_BYTES); - SArray* vgroupList = taosArrayInit(1, POINTER_BYTES); - - char* n = strdup(name); - taosArrayPush(pNameList, &n); code = getMultiTableMetaFromMnode(tmpSql, pNameList, vgroupList, NULL, tscTableMetaCallBack, true); taosArrayDestroyEx(&pNameList, freeElem); taosArrayDestroyEx(&vgroupList, freeElem); diff --git a/src/mnode/src/mnodeDb.c b/src/mnode/src/mnodeDb.c index 76818ac51c3a7879689f68d9af075601310fdc52..13afd1c29894fea07e5c269eee53b36a386ee442 100644 --- a/src/mnode/src/mnodeDb.c +++ b/src/mnode/src/mnodeDb.c @@ -1003,7 +1003,6 @@ static SDbCfg mnodeGetAlterDbOption(SDbObj *pDb, SAlterDbMsg *pAlter) { newCfg.daysToKeep0 = daysToKeep0; } -#ifdef _STORAGE if (daysToKeep1 > 0 && (daysToKeep1 != pDb->cfg.daysToKeep1 || newCfg.daysToKeep1 != pDb->cfg.daysToKeep1)) { mDebug("db:%s, daysToKeep1:%d change to %d", pDb->name, pDb->cfg.daysToKeep1, daysToKeep1); newCfg.daysToKeep1 = daysToKeep1; @@ -1013,7 +1012,6 @@ static SDbCfg mnodeGetAlterDbOption(SDbObj *pDb, SAlterDbMsg *pAlter) { mDebug("db:%s, daysToKeep2:%d change to %d", pDb->name, pDb->cfg.daysToKeep2, daysToKeep2); newCfg.daysToKeep2 = daysToKeep2; } -#endif if (minRows > 0 && minRows != pDb->cfg.minRowsPerFileBlock) { mError("db:%s, can't alter minRows option", pDb->name); @@ -1102,7 +1100,6 @@ static SDbCfg mnodeGetAlterDbOption(SDbObj *pDb, SAlterDbMsg *pAlter) { // community version can only change daysToKeep // but enterprise version can change all daysToKeep options - #ifndef _STORAGE newCfg.daysToKeep1 = newCfg.daysToKeep0; newCfg.daysToKeep2 = newCfg.daysToKeep0;