[td-1815]
This commit is contained in:
parent
2e8048c194
commit
bc602464b0
|
@ -225,7 +225,7 @@ void tscInitQueryInfo(SQueryInfo* pQueryInfo);
|
||||||
|
|
||||||
void tscClearSubqueryInfo(SSqlCmd* pCmd);
|
void tscClearSubqueryInfo(SSqlCmd* pCmd);
|
||||||
void tscFreeVgroupTableInfo(SArray* pVgroupTables);
|
void tscFreeVgroupTableInfo(SArray* pVgroupTables);
|
||||||
SArray* tscCloneVgroupTableInfo(SArray* pVgroupTables);
|
SArray* tscVgroupTableInfoClone(SArray* pVgroupTables);
|
||||||
void tscRemoveVgroupTableGroup(SArray* pVgroupTable, int32_t index);
|
void tscRemoveVgroupTableGroup(SArray* pVgroupTable, int32_t index);
|
||||||
|
|
||||||
int tscGetSTableVgroupInfo(SSqlObj* pSql, int32_t clauseIndex);
|
int tscGetSTableVgroupInfo(SSqlObj* pSql, int32_t clauseIndex);
|
||||||
|
|
|
@ -79,7 +79,7 @@ int32_t tscInitRpc(const char *user, const char *secretEncrypt, void **pDnodeCon
|
||||||
|
|
||||||
|
|
||||||
void taos_init_imp(void) {
|
void taos_init_imp(void) {
|
||||||
char temp[128];
|
char temp[128] = {0};
|
||||||
|
|
||||||
errno = TSDB_CODE_SUCCESS;
|
errno = TSDB_CODE_SUCCESS;
|
||||||
srand(taosGetTimestampSec());
|
srand(taosGetTimestampSec());
|
||||||
|
@ -146,29 +146,41 @@ void taos_init_imp(void) {
|
||||||
tscObjCache = taosCacheInit(TSDB_CACHE_PTR_KEY, refreshTime / 2, false, tscFreeRegisteredSqlObj, "sqlObj");
|
tscObjCache = taosCacheInit(TSDB_CACHE_PTR_KEY, refreshTime / 2, false, tscFreeRegisteredSqlObj, "sqlObj");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// in other language APIs, taos_cleanup is not available yet.
|
||||||
|
// So, to make sure taos_cleanup will be invoked to clean up the allocated
|
||||||
|
// resource to suppress the valgrind warning.
|
||||||
|
atexit(taos_cleanup);
|
||||||
tscDebug("client is initialized successfully");
|
tscDebug("client is initialized successfully");
|
||||||
}
|
}
|
||||||
|
|
||||||
void taos_init() { pthread_once(&tscinit, taos_init_imp); }
|
void taos_init() { pthread_once(&tscinit, taos_init_imp); }
|
||||||
|
|
||||||
|
// this function may be called by user or system, or by both simultaneously.
|
||||||
void taos_cleanup() {
|
void taos_cleanup() {
|
||||||
if (tscMetaCache != NULL) {
|
tscDebug("start to cleanup client environment");
|
||||||
taosCacheCleanup(tscMetaCache);
|
|
||||||
tscMetaCache = NULL;
|
|
||||||
|
|
||||||
taosCacheCleanup(tscObjCache);
|
void* m = tscMetaCache;
|
||||||
tscObjCache = NULL;
|
if (m != NULL && atomic_val_compare_exchange_ptr(&tscMetaCache, m, 0) == m) {
|
||||||
|
taosCacheCleanup(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tscQhandle != NULL) {
|
m = tscObjCache;
|
||||||
taosCleanUpScheduler(tscQhandle);
|
if (m != NULL && atomic_val_compare_exchange_ptr(&tscObjCache, m, 0) == m) {
|
||||||
tscQhandle = NULL;
|
taosCacheCleanup(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
m = tscQhandle;
|
||||||
|
if (m != NULL && atomic_val_compare_exchange_ptr(&tscQhandle, m, 0) == m) {
|
||||||
|
taosCleanUpScheduler(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
taosCleanupKeywordsTable();
|
taosCleanupKeywordsTable();
|
||||||
taosCloseLog();
|
taosCloseLog();
|
||||||
|
|
||||||
taosTmrCleanUp(tscTmr);
|
m = tscTmr;
|
||||||
|
if (m != NULL && atomic_val_compare_exchange_ptr(&tscTmr, m, 0) == m) {
|
||||||
|
taosTmrCleanUp(m);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int taos_options_imp(TSDB_OPTION option, const char *pStr) {
|
static int taos_options_imp(TSDB_OPTION option, const char *pStr) {
|
||||||
|
|
|
@ -1713,7 +1713,7 @@ void tscRemoveVgroupTableGroup(SArray* pVgroupTable, int32_t index) {
|
||||||
taosArrayRemove(pVgroupTable, index);
|
taosArrayRemove(pVgroupTable, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
SArray* tscCloneVgroupTableInfo(SArray* pVgroupTables) {
|
SArray* tscVgroupTableInfoClone(SArray* pVgroupTables) {
|
||||||
if (pVgroupTables == NULL) {
|
if (pVgroupTables == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1739,7 +1739,7 @@ SArray* tscCloneVgroupTableInfo(SArray* pVgroupTables) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void clearAllTableMetaInfo(SQueryInfo* pQueryInfo, const char* address, bool removeFromCache) {
|
void clearAllTableMetaInfo(SQueryInfo* pQueryInfo, const char* address, bool removeFromCache) {
|
||||||
tscDebug("%p deref the table meta in cache, numOfTables:%d", address, pQueryInfo->numOfTables);
|
tscDebug("%p unref %d tables in the tableMeta cache", address, pQueryInfo->numOfTables);
|
||||||
|
|
||||||
for(int32_t i = 0; i < pQueryInfo->numOfTables; ++i) {
|
for(int32_t i = 0; i < pQueryInfo->numOfTables; ++i) {
|
||||||
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, i);
|
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, i);
|
||||||
|
@ -1779,6 +1779,7 @@ STableMetaInfo* tscAddTableMetaInfo(SQueryInfo* pQueryInfo, const char* name, ST
|
||||||
pTableMetaInfo->vgroupList = tscVgroupInfoClone(vgroupList);
|
pTableMetaInfo->vgroupList = tscVgroupInfoClone(vgroupList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO handle malloc failure
|
||||||
pTableMetaInfo->tagColList = taosArrayInit(4, POINTER_BYTES);
|
pTableMetaInfo->tagColList = taosArrayInit(4, POINTER_BYTES);
|
||||||
if (pTableMetaInfo->tagColList == NULL) {
|
if (pTableMetaInfo->tagColList == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1788,7 +1789,7 @@ STableMetaInfo* tscAddTableMetaInfo(SQueryInfo* pQueryInfo, const char* name, ST
|
||||||
tscColumnListCopy(pTableMetaInfo->tagColList, pTagCols, -1);
|
tscColumnListCopy(pTableMetaInfo->tagColList, pTagCols, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
pTableMetaInfo->pVgroupTables = tscCloneVgroupTableInfo(pVgroupTables);
|
pTableMetaInfo->pVgroupTables = tscVgroupTableInfoClone(pVgroupTables);
|
||||||
|
|
||||||
pQueryInfo->numOfTables += 1;
|
pQueryInfo->numOfTables += 1;
|
||||||
return pTableMetaInfo;
|
return pTableMetaInfo;
|
||||||
|
@ -2469,6 +2470,7 @@ void tscSCMVgroupInfoCopy(SCMVgroupInfo* dst, const SCMVgroupInfo* src) {
|
||||||
dst->vgId = src->vgId;
|
dst->vgId = src->vgId;
|
||||||
dst->numOfEps = src->numOfEps;
|
dst->numOfEps = src->numOfEps;
|
||||||
for(int32_t i = 0; i < dst->numOfEps; ++i) {
|
for(int32_t i = 0; i < dst->numOfEps; ++i) {
|
||||||
|
taosTFree(dst->epAddr[i].fqdn);
|
||||||
dst->epAddr[i].port = src->epAddr[i].port;
|
dst->epAddr[i].port = src->epAddr[i].port;
|
||||||
dst->epAddr[i].fqdn = strdup(src->epAddr[i].fqdn);
|
dst->epAddr[i].fqdn = strdup(src->epAddr[i].fqdn);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue