fix mem leak
This commit is contained in:
parent
97e08abe8c
commit
4d857b0149
|
@ -352,7 +352,6 @@ typedef enum ENodeType {
|
||||||
QUERY_NODE_CREATE_ANODE_STMT,
|
QUERY_NODE_CREATE_ANODE_STMT,
|
||||||
QUERY_NODE_DROP_ANODE_STMT,
|
QUERY_NODE_DROP_ANODE_STMT,
|
||||||
QUERY_NODE_UPDATE_ANODE_STMT,
|
QUERY_NODE_UPDATE_ANODE_STMT,
|
||||||
QUERY_NODE_ALTER_TABLE_MULTI_STMT,
|
|
||||||
|
|
||||||
// show statement nodes
|
// show statement nodes
|
||||||
// see 'sysTableShowAdapter', 'SYSTABLE_SHOW_TYPE_OFFSET'
|
// see 'sysTableShowAdapter', 'SYSTABLE_SHOW_TYPE_OFFSET'
|
||||||
|
|
|
@ -267,18 +267,6 @@ typedef struct SAlterTableStmt {
|
||||||
SNodeList* pNodeListTagValue;
|
SNodeList* pNodeListTagValue;
|
||||||
} SAlterTableStmt;
|
} SAlterTableStmt;
|
||||||
|
|
||||||
|
|
||||||
typedef struct SAlterTableStmt2 {
|
|
||||||
ENodeType type;
|
|
||||||
int8_t alterType;
|
|
||||||
char colName[TSDB_COL_NAME_LEN];
|
|
||||||
STableOptions* pOptions;
|
|
||||||
SDataType dataType;
|
|
||||||
SValueNode* pVal;
|
|
||||||
SColumnOptions* pColOptions;
|
|
||||||
|
|
||||||
} SAlterTableStmt2;
|
|
||||||
|
|
||||||
typedef struct SAlterTableMultiStmt {
|
typedef struct SAlterTableMultiStmt {
|
||||||
ENodeType type;
|
ENodeType type;
|
||||||
char dbName[TSDB_DB_NAME_LEN];
|
char dbName[TSDB_DB_NAME_LEN];
|
||||||
|
|
|
@ -10521,7 +10521,7 @@ int32_t tEncodeSVAlterTbReq(SEncoder *pEncoder, const SVAlterTbReq *pReq) {
|
||||||
TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pTag->isNull));
|
TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pTag->isNull));
|
||||||
TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pTag->tagType));
|
TAOS_CHECK_EXIT(tEncodeI8(pEncoder, pTag->tagType));
|
||||||
if (!pTag->isNull) {
|
if (!pTag->isNull) {
|
||||||
TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pTag->pTagVal, pReq->nTagVal));
|
TAOS_CHECK_EXIT(tEncodeBinary(pEncoder, pTag->pTagVal, pTag->nTagVal));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -2109,7 +2109,7 @@ static int metaUpdateTableMultiTagVal(SMeta *pMeta, int64_t version, SVAlterTbRe
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t nTagVals = taosArrayGetSize(pAlterTbReq->pMultiTag);
|
int32_t nTagVals = taosArrayGetSize(pAlterTbReq->pMultiTag);
|
||||||
pTagTable = taosHashInit(nTagVals, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK);
|
pTagTable = taosHashInit(nTagVals, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
|
||||||
if (pTagTable == NULL) {
|
if (pTagTable == NULL) {
|
||||||
ret = terrno;
|
ret = terrno;
|
||||||
goto _err;
|
goto _err;
|
||||||
|
@ -2143,7 +2143,7 @@ static int metaUpdateTableMultiTagVal(SMeta *pMeta, int64_t version, SVAlterTbRe
|
||||||
}
|
}
|
||||||
iCol++;
|
iCol++;
|
||||||
}
|
}
|
||||||
if (taosArrayGetSize(updateTagColumnIds) == nUpdateTagVal) {
|
if (taosArrayGetSize(updateTagColumnIds) != nUpdateTagVal) {
|
||||||
terrno = TSDB_CODE_VND_COL_NOT_EXISTS;
|
terrno = TSDB_CODE_VND_COL_NOT_EXISTS;
|
||||||
goto _err;
|
goto _err;
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,8 +145,12 @@ static int32_t vnodePreProcessAlterTableMsg(SVnode *pVnode, SRpcMsg *pMsg) {
|
||||||
SVAlterTbReq vAlterTbReq = {0};
|
SVAlterTbReq vAlterTbReq = {0};
|
||||||
int64_t ctimeMs = taosGetTimestampMs();
|
int64_t ctimeMs = taosGetTimestampMs();
|
||||||
if (tDecodeSVAlterTbReqSetCtime(&dc, &vAlterTbReq, ctimeMs) < 0) {
|
if (tDecodeSVAlterTbReqSetCtime(&dc, &vAlterTbReq, ctimeMs) < 0) {
|
||||||
|
taosArrayDestroy(vAlterTbReq.pMultiTag);
|
||||||
|
vAlterTbReq.pMultiTag = NULL;
|
||||||
goto _exit;
|
goto _exit;
|
||||||
}
|
}
|
||||||
|
taosArrayDestroy(vAlterTbReq.pMultiTag);
|
||||||
|
vAlterTbReq.pMultiTag = NULL;
|
||||||
|
|
||||||
code = 0;
|
code = 0;
|
||||||
|
|
||||||
|
@ -666,10 +670,9 @@ int32_t vnodeProcessWriteMsg(SVnode *pVnode, SRpcMsg *pMsg, int64_t ver, SRpcMsg
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case TDMT_VND_STREAM_TASK_RESET: {
|
case TDMT_VND_STREAM_TASK_RESET: {
|
||||||
if (pVnode->restored && vnodeIsLeader(pVnode) &&
|
if (pVnode->restored && vnodeIsLeader(pVnode) && (code = tqProcessTaskResetReq(pVnode->pTq, pMsg)) < 0) {
|
||||||
(code = tqProcessTaskResetReq(pVnode->pTq, pMsg)) < 0) {
|
goto _err;
|
||||||
goto _err;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case TDMT_VND_ALTER_CONFIRM:
|
case TDMT_VND_ALTER_CONFIRM:
|
||||||
|
@ -690,7 +693,7 @@ int32_t vnodeProcessWriteMsg(SVnode *pVnode, SRpcMsg *pMsg, int64_t ver, SRpcMsg
|
||||||
case TDMT_VND_DROP_INDEX:
|
case TDMT_VND_DROP_INDEX:
|
||||||
vnodeProcessDropIndexReq(pVnode, ver, pReq, len, pRsp);
|
vnodeProcessDropIndexReq(pVnode, ver, pReq, len, pRsp);
|
||||||
break;
|
break;
|
||||||
case TDMT_VND_STREAM_CHECK_POINT_SOURCE: // always return true
|
case TDMT_VND_STREAM_CHECK_POINT_SOURCE: // always return true
|
||||||
tqProcessTaskCheckPointSourceReq(pVnode->pTq, pMsg, pRsp);
|
tqProcessTaskCheckPointSourceReq(pVnode->pTq, pMsg, pRsp);
|
||||||
break;
|
break;
|
||||||
case TDMT_VND_STREAM_TASK_UPDATE: // always return true
|
case TDMT_VND_STREAM_TASK_UPDATE: // always return true
|
||||||
|
@ -1367,6 +1370,7 @@ static int32_t vnodeProcessAlterTbReq(SVnode *pVnode, int64_t ver, void *pReq, i
|
||||||
}
|
}
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
|
taosArrayDestroy(vAlterTbReq.pMultiTag);
|
||||||
tEncodeSize(tEncodeSVAlterTbRsp, &vAlterTbRsp, pRsp->contLen, ret);
|
tEncodeSize(tEncodeSVAlterTbRsp, &vAlterTbRsp, pRsp->contLen, ret);
|
||||||
pRsp->pCont = rpcMallocCont(pRsp->contLen);
|
pRsp->pCont = rpcMallocCont(pRsp->contLen);
|
||||||
tEncoderInit(&ec, pRsp->pCont, pRsp->contLen);
|
tEncoderInit(&ec, pRsp->pCont, pRsp->contLen);
|
||||||
|
|
|
@ -519,9 +519,6 @@ int32_t nodesMakeNode(ENodeType type, SNode** ppNodeOut) {
|
||||||
case QUERY_NODE_ALTER_SUPER_TABLE_STMT:
|
case QUERY_NODE_ALTER_SUPER_TABLE_STMT:
|
||||||
code = makeNode(type, sizeof(SAlterTableStmt), &pNode);
|
code = makeNode(type, sizeof(SAlterTableStmt), &pNode);
|
||||||
break;
|
break;
|
||||||
case QUERY_NODE_ALTER_TABLE_MULTI_STMT:
|
|
||||||
code = makeNode(type, sizeof(SAlterTableMultiStmt), &pNode);
|
|
||||||
break;
|
|
||||||
case QUERY_NODE_CREATE_USER_STMT:
|
case QUERY_NODE_CREATE_USER_STMT:
|
||||||
code = makeNode(type, sizeof(SCreateUserStmt), &pNode);
|
code = makeNode(type, sizeof(SCreateUserStmt), &pNode);
|
||||||
break;
|
break;
|
||||||
|
@ -1360,13 +1357,15 @@ void nodesDestroyNode(SNode* pNode) {
|
||||||
SAlterTableStmt* pStmt = (SAlterTableStmt*)pNode;
|
SAlterTableStmt* pStmt = (SAlterTableStmt*)pNode;
|
||||||
nodesDestroyNode((SNode*)pStmt->pOptions);
|
nodesDestroyNode((SNode*)pStmt->pOptions);
|
||||||
nodesDestroyNode((SNode*)pStmt->pVal);
|
nodesDestroyNode((SNode*)pStmt->pVal);
|
||||||
break;
|
if (pStmt->pNodeListTagValue != NULL) {
|
||||||
}
|
SNodeList* pNodeList = pStmt->pNodeListTagValue;
|
||||||
case QUERY_NODE_ALTER_TABLE_MULTI_STMT: {
|
SNode* pSubNode = NULL;
|
||||||
SAlterTableMultiStmt* pStmt = (SAlterTableMultiStmt*)pNode;
|
FOREACH(pSubNode, pNodeList) {
|
||||||
// nodesDestroyList(pStmt->pTables);
|
SAlterTableStmt* pSubAlterTable = (SAlterTableStmt*)pSubNode;
|
||||||
// nodesDestroyNode((SNode*)pStmt->pOptions);
|
nodesDestroyNode((SNode*)pSubAlterTable->pOptions);
|
||||||
// nodesDestroyNode((SNode*)pStmt->pVal);
|
nodesDestroyNode((SNode*)pSubAlterTable->pVal);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case QUERY_NODE_CREATE_USER_STMT: {
|
case QUERY_NODE_CREATE_USER_STMT: {
|
||||||
|
|
|
@ -390,14 +390,14 @@ alter_table_clause(A) ::=
|
||||||
full_table_name(B) RENAME TAG column_name(C) column_name(D). { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &C, &D); }
|
full_table_name(B) RENAME TAG column_name(C) column_name(D). { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &C, &D); }
|
||||||
|
|
||||||
|
|
||||||
%type column_eq_value_list { SNodeList* }
|
%type column_tag_value_list { SNodeList* }
|
||||||
%destructor column_eq_value_list { nodesDestroyList($$); }
|
%destructor column_tag_value_list { nodesDestroyList($$); }
|
||||||
column_eq_value(A) ::= column_name(C) NK_EQ tags_literal(D). { A = createAlterSingleTagColumnNode(pCxt, &C, D); }
|
column_tag_value(A) ::= column_name(C) NK_EQ tags_literal(D). { A = createAlterSingleTagColumnNode(pCxt, &C, D); }
|
||||||
column_eq_value_list(A) ::= column_eq_value(B). { A = createNodeList(pCxt, B); }
|
column_tag_value_list(A) ::= column_tag_value(B). { A = createNodeList(pCxt, B); }
|
||||||
column_eq_value_list(A) ::= column_eq_value_list(B) NK_COMMA column_eq_value(C). { A = addNodeToList(pCxt, B, C);}
|
column_tag_value_list(A) ::= column_tag_value_list(B) NK_COMMA column_tag_value(C). { A = addNodeToList(pCxt, B, C);}
|
||||||
|
|
||||||
alter_table_clause(A) ::=
|
alter_table_clause(A) ::=
|
||||||
full_table_name(B) SET TAG column_eq_value_list(C). { A = createAlterTableSetMultiTagValue(pCxt, B, C); }
|
full_table_name(B) SET TAG column_tag_value_list(C). { A = createAlterTableSetMultiTagValue(pCxt, B, C); }
|
||||||
|
|
||||||
%type multi_create_clause { SNodeList* }
|
%type multi_create_clause { SNodeList* }
|
||||||
%destructor multi_create_clause { nodesDestroyList($$); }
|
%destructor multi_create_clause { nodesDestroyList($$); }
|
||||||
|
|
|
@ -2555,6 +2555,7 @@ SNode* createAlterSingleTagColumnNode(SAstCreateContext* pCtx, SToken* pTagName,
|
||||||
pStmt->alterType = TSDB_ALTER_TABLE_UPDATE_TAG_VAL;
|
pStmt->alterType = TSDB_ALTER_TABLE_UPDATE_TAG_VAL;
|
||||||
COPY_STRING_FORM_ID_TOKEN(pStmt->colName, pTagName);
|
COPY_STRING_FORM_ID_TOKEN(pStmt->colName, pTagName);
|
||||||
pStmt->pVal = (SValueNode*)pVal;
|
pStmt->pVal = (SValueNode*)pVal;
|
||||||
|
pStmt->pNodeListTagValue = NULL;
|
||||||
return (SNode*)pStmt;
|
return (SNode*)pStmt;
|
||||||
_err:
|
_err:
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -970,7 +970,6 @@ static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt) {
|
||||||
case QUERY_NODE_DROP_SUPER_TABLE_STMT:
|
case QUERY_NODE_DROP_SUPER_TABLE_STMT:
|
||||||
return collectMetaKeyFromDropStable(pCxt, (SDropSuperTableStmt*)pStmt);
|
return collectMetaKeyFromDropStable(pCxt, (SDropSuperTableStmt*)pStmt);
|
||||||
case QUERY_NODE_ALTER_TABLE_STMT:
|
case QUERY_NODE_ALTER_TABLE_STMT:
|
||||||
case QUERY_NODE_ALTER_TABLE_MULTI_STMT:
|
|
||||||
return collectMetaKeyFromAlterTable(pCxt, (SAlterTableStmt*)pStmt);
|
return collectMetaKeyFromAlterTable(pCxt, (SAlterTableStmt*)pStmt);
|
||||||
case QUERY_NODE_ALTER_SUPER_TABLE_STMT:
|
case QUERY_NODE_ALTER_SUPER_TABLE_STMT:
|
||||||
return collectMetaKeyFromAlterStable(pCxt, (SAlterTableStmt*)pStmt);
|
return collectMetaKeyFromAlterStable(pCxt, (SAlterTableStmt*)pStmt);
|
||||||
|
|
|
@ -15184,11 +15184,7 @@ static int32_t rewriteDropSuperTable(STranslateContext* pCxt, SQuery* pQuery) {
|
||||||
|
|
||||||
static int32_t buildUpdateTagValReqImpl2(STranslateContext* pCxt, SAlterTableStmt* pStmt, STableMeta* pTableMeta,
|
static int32_t buildUpdateTagValReqImpl2(STranslateContext* pCxt, SAlterTableStmt* pStmt, STableMeta* pTableMeta,
|
||||||
char* colName, SMultiTagUpateVal* pReq) {
|
char* colName, SMultiTagUpateVal* pReq) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
if (NULL == pReq->tagName) {
|
|
||||||
return terrno;
|
|
||||||
}
|
|
||||||
|
|
||||||
SSchema* pSchema = getTagSchema(pTableMeta, colName);
|
SSchema* pSchema = getTagSchema(pTableMeta, colName);
|
||||||
if (NULL == pSchema) {
|
if (NULL == pSchema) {
|
||||||
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_ALTER_TABLE, "Invalid tag name: %s", colName);
|
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_ALTER_TABLE, "Invalid tag name: %s", colName);
|
||||||
|
@ -15360,7 +15356,7 @@ static int32_t buildUpdateMultiTagValReq(STranslateContext* pCxt, SAlterTableStm
|
||||||
return buildUpdateTagValReqImpl(pCxt, head, pTableMeta, head->colName, pReq);
|
return buildUpdateTagValReqImpl(pCxt, head, pTableMeta, head->colName, pReq);
|
||||||
} else {
|
} else {
|
||||||
pReq->pMultiTag = taosArrayInit(nTagValues, sizeof(SMultiTagUpateVal));
|
pReq->pMultiTag = taosArrayInit(nTagValues, sizeof(SMultiTagUpateVal));
|
||||||
if (NULL == pReq->pTagArray) {
|
if (pReq->pMultiTag == NULL) {
|
||||||
return terrno;
|
return terrno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15373,7 +15369,9 @@ static int32_t buildUpdateMultiTagValReq(STranslateContext* pCxt, SAlterTableStm
|
||||||
if (TSDB_CODE_SUCCESS != code) {
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
TAOS_UNUSED(taosArrayPush(pReq->pMultiTag, &val));
|
if (taosArrayPush(pReq->pMultiTag, &val) == NULL) {
|
||||||
|
return terrno;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15658,6 +15656,18 @@ static int32_t buildModifyVnodeArray(STranslateContext* pCxt, SAlterTableStmt* p
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void deleTagVal(void* val) {
|
||||||
|
SMultiTagUpateVal* pTag = val;
|
||||||
|
taosMemoryFree(pTag->tagName);
|
||||||
|
for (int i = 0; i < taosArrayGetSize(pTag->pTagArray); ++i) {
|
||||||
|
STagVal* p = (STagVal*)taosArrayGet(pTag->pTagArray, i);
|
||||||
|
if (IS_VAR_DATA_TYPE(p->type)) {
|
||||||
|
taosMemoryFreeClear(p->pData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
taosArrayDestroy(pTag->pTagArray);
|
||||||
|
}
|
||||||
static void destoryAlterTbReq(SVAlterTbReq* pReq) {
|
static void destoryAlterTbReq(SVAlterTbReq* pReq) {
|
||||||
taosMemoryFree(pReq->tbName);
|
taosMemoryFree(pReq->tbName);
|
||||||
taosMemoryFree(pReq->colName);
|
taosMemoryFree(pReq->colName);
|
||||||
|
@ -15670,6 +15680,10 @@ static void destoryAlterTbReq(SVAlterTbReq* pReq) {
|
||||||
taosMemoryFreeClear(p->pData);
|
taosMemoryFreeClear(p->pData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (pReq->action == TSDB_ALTER_TABLE_UPDATE_MULTI_TAG_VAL) {
|
||||||
|
taosArrayDestroyEx(pReq->pMultiTag, deleTagVal);
|
||||||
|
}
|
||||||
|
|
||||||
taosArrayDestroy(pReq->pTagArray);
|
taosArrayDestroy(pReq->pTagArray);
|
||||||
if (pReq->tagFree) tTagFree((STag*)pReq->pTagVal);
|
if (pReq->tagFree) tTagFree((STag*)pReq->pTagVal);
|
||||||
}
|
}
|
||||||
|
@ -16374,7 +16388,6 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) {
|
||||||
case QUERY_NODE_DROP_SUPER_TABLE_STMT:
|
case QUERY_NODE_DROP_SUPER_TABLE_STMT:
|
||||||
code = rewriteDropSuperTable(pCxt, pQuery);
|
code = rewriteDropSuperTable(pCxt, pQuery);
|
||||||
break;
|
break;
|
||||||
case QUERY_NODE_ALTER_TABLE_MULTI_STMT:
|
|
||||||
case QUERY_NODE_ALTER_TABLE_STMT:
|
case QUERY_NODE_ALTER_TABLE_STMT:
|
||||||
code = rewriteAlterTable(pCxt, pQuery);
|
code = rewriteAlterTable(pCxt, pQuery);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue