td-804: fix infinite SQL parse retry
This commit is contained in:
parent
610d730d54
commit
591f36f325
|
@ -348,6 +348,7 @@ typedef struct SSqlObj {
|
||||||
void * pStream;
|
void * pStream;
|
||||||
void * pSubscription;
|
void * pSubscription;
|
||||||
char * sqlstr;
|
char * sqlstr;
|
||||||
|
char parseRetry;
|
||||||
char retry;
|
char retry;
|
||||||
char maxRetry;
|
char maxRetry;
|
||||||
SRpcEpSet epSet;
|
SRpcEpSet epSet;
|
||||||
|
|
|
@ -43,6 +43,7 @@ void doAsyncQuery(STscObj* pObj, SSqlObj* pSql, void (*fp)(), void* param, const
|
||||||
pSql->signature = pSql;
|
pSql->signature = pSql;
|
||||||
pSql->param = param;
|
pSql->param = param;
|
||||||
pSql->pTscObj = pObj;
|
pSql->pTscObj = pObj;
|
||||||
|
pSql->parseRetry= 0;
|
||||||
pSql->maxRetry = TSDB_MAX_REPLICA;
|
pSql->maxRetry = TSDB_MAX_REPLICA;
|
||||||
pSql->fp = fp;
|
pSql->fp = fp;
|
||||||
pSql->fetchFp = fp;
|
pSql->fetchFp = fp;
|
||||||
|
|
|
@ -1335,13 +1335,13 @@ int tsParseSql(SSqlObj *pSql, bool initial) {
|
||||||
// make a backup as tsParseInsertSql may modify the string
|
// make a backup as tsParseInsertSql may modify the string
|
||||||
char* sqlstr = strdup(pSql->sqlstr);
|
char* sqlstr = strdup(pSql->sqlstr);
|
||||||
ret = tsParseInsertSql(pSql);
|
ret = tsParseInsertSql(pSql);
|
||||||
if (sqlstr == NULL || pSql->retry >= 1 || ret != TSDB_CODE_TSC_INVALID_SQL) {
|
if (sqlstr == NULL || pSql->parseRetry >= 1 || ret != TSDB_CODE_TSC_INVALID_SQL) {
|
||||||
free(sqlstr);
|
free(sqlstr);
|
||||||
} else {
|
} else {
|
||||||
tscResetSqlCmdObj(pCmd, true);
|
tscResetSqlCmdObj(pCmd, true);
|
||||||
free(pSql->sqlstr);
|
free(pSql->sqlstr);
|
||||||
pSql->sqlstr = sqlstr;
|
pSql->sqlstr = sqlstr;
|
||||||
pSql->retry++;
|
pSql->parseRetry++;
|
||||||
if ((ret = tsInsertInitialCheck(pSql)) == TSDB_CODE_SUCCESS) {
|
if ((ret = tsInsertInitialCheck(pSql)) == TSDB_CODE_SUCCESS) {
|
||||||
ret = tsParseInsertSql(pSql);
|
ret = tsParseInsertSql(pSql);
|
||||||
}
|
}
|
||||||
|
@ -1349,18 +1349,14 @@ int tsParseSql(SSqlObj *pSql, bool initial) {
|
||||||
} else {
|
} else {
|
||||||
SSqlInfo SQLInfo = qSQLParse(pSql->sqlstr);
|
SSqlInfo SQLInfo = qSQLParse(pSql->sqlstr);
|
||||||
ret = tscToSQLCmd(pSql, &SQLInfo);
|
ret = tscToSQLCmd(pSql, &SQLInfo);
|
||||||
if (ret == TSDB_CODE_TSC_INVALID_SQL && pSql->retry == 0 && SQLInfo.type == TSDB_SQL_NULL) {
|
if (ret == TSDB_CODE_TSC_INVALID_SQL && pSql->parseRetry == 0 && SQLInfo.type == TSDB_SQL_NULL) {
|
||||||
tscResetSqlCmdObj(pCmd, true);
|
tscResetSqlCmdObj(pCmd, true);
|
||||||
pSql->retry++;
|
pSql->parseRetry++;
|
||||||
ret = tscToSQLCmd(pSql, &SQLInfo);
|
ret = tscToSQLCmd(pSql, &SQLInfo);
|
||||||
}
|
}
|
||||||
SQLInfoDestroy(&SQLInfo);
|
SQLInfoDestroy(&SQLInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == TSDB_CODE_SUCCESS) {
|
|
||||||
pSql->retry = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* the pRes->code may be modified or released by another thread in tscTableMetaCallBack function,
|
* the pRes->code may be modified or released by another thread in tscTableMetaCallBack function,
|
||||||
* so do NOT use pRes->code to determine if the getTableMeta function
|
* so do NOT use pRes->code to determine if the getTableMeta function
|
||||||
|
|
Loading…
Reference in New Issue