reduce the possible of first tag index name

This commit is contained in:
yihaoDeng 2023-09-15 17:41:04 +08:00
parent e958e18726
commit a66145a494
3 changed files with 86 additions and 78 deletions

View File

@ -15,6 +15,7 @@
#define _DEFAULT_SOURCE #define _DEFAULT_SOURCE
#include "mndStb.h" #include "mndStb.h"
#include "audit.h"
#include "mndDb.h" #include "mndDb.h"
#include "mndDnode.h" #include "mndDnode.h"
#include "mndIndex.h" #include "mndIndex.h"
@ -31,7 +32,6 @@
#include "mndUser.h" #include "mndUser.h"
#include "mndVgroup.h" #include "mndVgroup.h"
#include "tname.h" #include "tname.h"
#include "audit.h"
#define STB_VER_NUMBER 1 #define STB_VER_NUMBER 1
#define STB_RESERVE_SIZE 64 #define STB_RESERVE_SIZE 64
@ -858,7 +858,19 @@ int32_t mndBuildStbFromReq(SMnode *pMnode, SStbObj *pDst, SMCreateStbReq *pCreat
} }
return 0; return 0;
} }
static int32_t mndGenIdxNameForFirstTag(char *fullname, char *dbname, char *tagname) {
char randStr[24] = {0};
int8_t start = 8;
int8_t end = sizeof(randStr) - 1;
// gen rand str len [base:end]
// note: ignore rand performance issues
int64_t len = taosRand() % (end - start + 1) + start;
taosRandStr2(randStr, len);
sprintf(fullname, "%s.%s_%s", dbname, tagname, randStr);
return 0;
}
static int32_t mndCreateStb(SMnode *pMnode, SRpcMsg *pReq, SMCreateStbReq *pCreate, SDbObj *pDb) { static int32_t mndCreateStb(SMnode *pMnode, SRpcMsg *pReq, SMCreateStbReq *pCreate, SDbObj *pDb) {
SStbObj stbObj = {0}; SStbObj stbObj = {0};
int32_t code = -1; int32_t code = -1;
@ -871,11 +883,8 @@ static int32_t mndCreateStb(SMnode *pMnode, SRpcMsg *pReq, SMCreateStbReq *pCrea
mInfo("trans:%d, used to create stb:%s", pTrans->id, pCreate->name); mInfo("trans:%d, used to create stb:%s", pTrans->id, pCreate->name);
if (mndBuildStbFromReq(pMnode, &stbObj, pCreate, pDb) != 0) goto _OVER; if (mndBuildStbFromReq(pMnode, &stbObj, pCreate, pDb) != 0) goto _OVER;
char randStr[24] = {0};
taosRandStr2(randStr, tListLen(randStr) - 1);
SSchema *pSchema = &(stbObj.pTags[0]); SSchema *pSchema = &(stbObj.pTags[0]);
sprintf(fullIdxName, "%s.%s_%s", pDb->name, pSchema->name, randStr); mndGenIdxNameForFirstTag(fullIdxName, pDb->name, pSchema->name);
SSIdx idx = {0}; SSIdx idx = {0};
if (mndAcquireGlobalIdx(pMnode, fullIdxName, SDB_IDX, &idx) == 0 && idx.pIdx != NULL) { if (mndAcquireGlobalIdx(pMnode, fullIdxName, SDB_IDX, &idx) == 0 && idx.pIdx != NULL) {
terrno = TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST; terrno = TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST;
@ -1066,78 +1075,75 @@ static int32_t mndBuildStbFromAlter(SStbObj *pStb, SStbObj *pDst, SMCreateStbReq
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
static char* mndAuditFieldTypeStr(int32_t type){ static char *mndAuditFieldTypeStr(int32_t type) {
switch (type) switch (type) {
{ case TSDB_DATA_TYPE_NULL:
case TSDB_DATA_TYPE_NULL: return "null";
return "null"; case TSDB_DATA_TYPE_BOOL:
case TSDB_DATA_TYPE_BOOL: return "bool";
return "bool"; case TSDB_DATA_TYPE_TINYINT:
case TSDB_DATA_TYPE_TINYINT: return "tinyint";
return "tinyint"; case TSDB_DATA_TYPE_SMALLINT:
case TSDB_DATA_TYPE_SMALLINT: return "smallint";
return "smallint"; case TSDB_DATA_TYPE_INT:
case TSDB_DATA_TYPE_INT: return "int";
return "int"; case TSDB_DATA_TYPE_BIGINT:
case TSDB_DATA_TYPE_BIGINT: return "bigint";
return "bigint"; case TSDB_DATA_TYPE_FLOAT:
case TSDB_DATA_TYPE_FLOAT: return "float";
return "float"; case TSDB_DATA_TYPE_DOUBLE:
case TSDB_DATA_TYPE_DOUBLE: return "double";
return "double"; case TSDB_DATA_TYPE_VARCHAR:
case TSDB_DATA_TYPE_VARCHAR: return "varchar";
return "varchar"; case TSDB_DATA_TYPE_TIMESTAMP:
case TSDB_DATA_TYPE_TIMESTAMP: return "timestamp";
return "timestamp"; case TSDB_DATA_TYPE_NCHAR:
case TSDB_DATA_TYPE_NCHAR: return "nchar";
return "nchar"; case TSDB_DATA_TYPE_UTINYINT:
case TSDB_DATA_TYPE_UTINYINT: return "utinyint";
return "utinyint"; case TSDB_DATA_TYPE_USMALLINT:
case TSDB_DATA_TYPE_USMALLINT: return "usmallint";
return "usmallint"; case TSDB_DATA_TYPE_UINT:
case TSDB_DATA_TYPE_UINT: return "uint";
return "uint"; case TSDB_DATA_TYPE_UBIGINT:
case TSDB_DATA_TYPE_UBIGINT: return "ubigint";
return "ubigint"; case TSDB_DATA_TYPE_JSON:
case TSDB_DATA_TYPE_JSON: return "json";
return "json"; case TSDB_DATA_TYPE_VARBINARY:
case TSDB_DATA_TYPE_VARBINARY: return "varbinary";
return "varbinary"; case TSDB_DATA_TYPE_DECIMAL:
case TSDB_DATA_TYPE_DECIMAL: return "decimal";
return "decimal"; case TSDB_DATA_TYPE_BLOB:
case TSDB_DATA_TYPE_BLOB: return "blob";
return "blob"; case TSDB_DATA_TYPE_MEDIUMBLOB:
case TSDB_DATA_TYPE_MEDIUMBLOB: return "mediumblob";
return "mediumblob"; case TSDB_DATA_TYPE_GEOMETRY:
case TSDB_DATA_TYPE_GEOMETRY: return "geometry";
return "geometry";
default: default:
return "error"; return "error";
} }
} }
static void mndAuditFieldStr(char* detail, SArray *arr, int32_t len, int32_t max){ static void mndAuditFieldStr(char *detail, SArray *arr, int32_t len, int32_t max) {
int32_t detialLen = strlen(detail); int32_t detialLen = strlen(detail);
int32_t fieldLen = 0; int32_t fieldLen = 0;
for (int32_t i = 0; i < len; ++i) { for (int32_t i = 0; i < len; ++i) {
SField *pField = taosArrayGet(arr, i); SField *pField = taosArrayGet(arr, i);
char field[TSDB_COL_NAME_LEN + 20] = {0}; char field[TSDB_COL_NAME_LEN + 20] = {0};
fieldLen = strlen(", "); fieldLen = strlen(", ");
if(detialLen > 0 && detialLen < max-fieldLen-1) { if (detialLen > 0 && detialLen < max - fieldLen - 1) {
strcat(detail, ", "); strcat(detail, ", ");
detialLen += fieldLen; detialLen += fieldLen;
} } else {
else{
break; break;
} }
sprintf(field, "%s:%s", pField->name, mndAuditFieldTypeStr(pField->type)); sprintf(field, "%s:%s", pField->name, mndAuditFieldTypeStr(pField->type));
fieldLen = strlen(field); fieldLen = strlen(field);
if(detialLen < max-fieldLen-1) { if (detialLen < max - fieldLen - 1) {
strcat(detail, field); strcat(detail, field);
detialLen += fieldLen; detialLen += fieldLen;
} } else {
else{
break; break;
} }
} }
@ -1252,14 +1258,17 @@ static int32_t mndProcessCreateStbReq(SRpcMsg *pReq) {
if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS; if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS;
char detail[AUDIT_DETAIL_MAX] = {0}; char detail[AUDIT_DETAIL_MAX] = {0};
sprintf(detail, "colVer:%d, delay1:%" PRId64 ", delay2:%" PRId64 ", deleteMark1:%" PRId64 ", " sprintf(detail,
"deleteMark2:%" PRId64 ", igExists:%d, numOfColumns:%d, numOfFuncs:%d, numOfTags:%d, " "colVer:%d, delay1:%" PRId64 ", delay2:%" PRId64 ", deleteMark1:%" PRId64
"source:%d, suid:%" PRId64 ", tagVer:%d, ttl:%d, " ", "
"deleteMark2:%" PRId64
", igExists:%d, numOfColumns:%d, numOfFuncs:%d, numOfTags:%d, "
"source:%d, suid:%" PRId64
", tagVer:%d, ttl:%d, "
"watermark1:%" PRId64 ", watermark2:%" PRId64, "watermark1:%" PRId64 ", watermark2:%" PRId64,
createReq.colVer, createReq.delay1, createReq.delay2, createReq.deleteMark1, createReq.colVer, createReq.delay1, createReq.delay2, createReq.deleteMark1, createReq.deleteMark2,
createReq.deleteMark2, createReq.igExists, createReq.numOfColumns, createReq.numOfFuncs, createReq.numOfTags, createReq.igExists, createReq.numOfColumns, createReq.numOfFuncs, createReq.numOfTags, createReq.source,
createReq.source, createReq.suid, createReq.tagVer, createReq.ttl, createReq.suid, createReq.tagVer, createReq.ttl, createReq.watermark1, createReq.watermark2);
createReq.watermark1, createReq.watermark2);
mndAuditFieldStr(detail, createReq.pColumns, createReq.numOfColumns, AUDIT_DETAIL_MAX); mndAuditFieldStr(detail, createReq.pColumns, createReq.numOfColumns, AUDIT_DETAIL_MAX);
mndAuditFieldStr(detail, createReq.pTags, createReq.numOfTags, AUDIT_DETAIL_MAX); mndAuditFieldStr(detail, createReq.pTags, createReq.numOfTags, AUDIT_DETAIL_MAX);
@ -2338,8 +2347,7 @@ static int32_t mndProcessAlterStbReq(SRpcMsg *pReq) {
if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS; if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS;
char detail[2000] = {0}; char detail[2000] = {0};
sprintf(detail, "alterType:%d, numOfFields:%d, ttl:%d" , sprintf(detail, "alterType:%d, numOfFields:%d, ttl:%d", alterReq.alterType, alterReq.numOfFields, alterReq.ttl);
alterReq.alterType, alterReq.numOfFields, alterReq.ttl);
SName name = {0}; SName name = {0};
tNameFromString(&name, alterReq.name, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE); tNameFromString(&name, alterReq.name, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE);
@ -2608,8 +2616,7 @@ static int32_t mndProcessDropStbReq(SRpcMsg *pReq) {
if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS; if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS;
char detail[2000] = {0}; char detail[2000] = {0};
sprintf(detail, "igNotExists:%d, source:%d" , sprintf(detail, "igNotExists:%d, source:%d", dropReq.igNotExists, dropReq.source);
dropReq.igNotExists, dropReq.source);
SName name = {0}; SName name = {0};
tNameFromString(&name, dropReq.name, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE); tNameFromString(&name, dropReq.name, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE);
@ -3369,7 +3376,7 @@ static int32_t buildSysDbColsInfo(SSDataBlock *p, int8_t buildWhichDBs, char *tb
return p->info.rows; return p->info.rows;
} }
static int8_t determineBuildColForWhichDBs(const char* db) { static int8_t determineBuildColForWhichDBs(const char *db) {
int8_t buildWhichDBs; int8_t buildWhichDBs;
if (!db[0]) if (!db[0])
buildWhichDBs = BUILD_COL_FOR_ALL_DB; buildWhichDBs = BUILD_COL_FOR_ALL_DB;
@ -3387,11 +3394,11 @@ static int8_t determineBuildColForWhichDBs(const char* db) {
} }
static int32_t mndRetrieveStbCol(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) { static int32_t mndRetrieveStbCol(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) {
uint8_t buildWhichDBs; uint8_t buildWhichDBs;
SMnode *pMnode = pReq->info.node; SMnode *pMnode = pReq->info.node;
SSdb *pSdb = pMnode->pSdb; SSdb *pSdb = pMnode->pSdb;
SStbObj *pStb = NULL; SStbObj *pStb = NULL;
int32_t numOfRows = 0; int32_t numOfRows = 0;
buildWhichDBs = determineBuildColForWhichDBs(pShow->db); buildWhichDBs = determineBuildColForWhichDBs(pShow->db);

View File

@ -86,8 +86,9 @@ void taosRandStr(char* str, int32_t size) {
} }
void taosRandStr2(char* str, int32_t size) { void taosRandStr2(char* str, int32_t size) {
const char* set = "abcdefghijklmnopqrstuvwxyz0123456789";
int32_t len = 36; const char* set = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ@";
int32_t len = strlen(set);
for (int32_t i = 0; i < size; ++i) { for (int32_t i = 0; i < size; ++i) {
str[i] = set[taosRand() % len]; str[i] = set[taosRand() % len];

View File

@ -216,7 +216,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_BUFSIZE, "Invalid func bufSize"
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_COMMENT, "Invalid func comment") TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_COMMENT, "Invalid func comment")
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_RETRIEVE, "Invalid func retrieve msg") TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_RETRIEVE, "Invalid func retrieve msg")
TAOS_DEFINE_ERROR(TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST, "index already exists") TAOS_DEFINE_ERROR(TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST, "index already exists in db")
TAOS_DEFINE_ERROR(TSDB_CODE_MND_TAG_INDEX_NOT_EXIST, "index not exist") TAOS_DEFINE_ERROR(TSDB_CODE_MND_TAG_INDEX_NOT_EXIST, "index not exist")
@ -307,7 +307,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_TOO_MANY_STREAMS, "Too many streams")
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_TARGET_TABLE, "Cannot write the same stable as other stream") TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_TARGET_TABLE, "Cannot write the same stable as other stream")
// mnode-sma // mnode-sma
TAOS_DEFINE_ERROR(TSDB_CODE_MND_SMA_ALREADY_EXIST, "index already exists") TAOS_DEFINE_ERROR(TSDB_CODE_MND_SMA_ALREADY_EXIST, "index already exists in db")
TAOS_DEFINE_ERROR(TSDB_CODE_MND_SMA_NOT_EXIST, "index not exist") TAOS_DEFINE_ERROR(TSDB_CODE_MND_SMA_NOT_EXIST, "index not exist")
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_SMA_OPTION, "Invalid sma index option") TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_SMA_OPTION, "Invalid sma index option")