Merge pull request #20001 from taosdata/fix/nodisk
fix(query): fix memory leak and invalid free for tag filter cache.
This commit is contained in:
commit
f34bc0344c
|
@ -508,7 +508,7 @@ static void freePayload(const void* key, size_t keyLen, void* value) {
|
||||||
|
|
||||||
const uint64_t* p = key;
|
const uint64_t* p = key;
|
||||||
if (keyLen != sizeof(int64_t) * 4) {
|
if (keyLen != sizeof(int64_t) * 4) {
|
||||||
metaError("key length is invalid, length:%d, expect:%d", (int32_t) keyLen, (int32_t) sizeof(uint64_t)*2);
|
metaError("key length is invalid, length:%d, expect:%d", (int32_t)keyLen, (int32_t)sizeof(uint64_t) * 2);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -525,12 +525,13 @@ static void freePayload(const void* key, size_t keyLen, void* value) {
|
||||||
while ((pNode = tdListNext(&iter)) != NULL) {
|
while ((pNode = tdListNext(&iter)) != NULL) {
|
||||||
uint64_t* digest = (uint64_t*)pNode->data;
|
uint64_t* digest = (uint64_t*)pNode->data;
|
||||||
if (digest[0] == p[2] && digest[1] == p[3]) {
|
if (digest[0] == p[2] && digest[1] == p[3]) {
|
||||||
tdListPopNode(&((*pEntry)->list), pNode);
|
void* tmp = tdListPopNode(&((*pEntry)->list), pNode);
|
||||||
|
taosMemoryFree(tmp);
|
||||||
|
|
||||||
int64_t et = taosGetTimestampUs();
|
int64_t et = taosGetTimestampUs();
|
||||||
metaInfo("clear items in cache, remain cached item:%d, elapsed time:%.2fms", listNEles(&((*pEntry)->list)),
|
metaInfo("clear items in cache, remain cached item:%d, elapsed time:%.2fms", listNEles(&((*pEntry)->list)),
|
||||||
(et - st)/1000.0);
|
(et - st) / 1000.0);
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
static int32_t tsdbOpenBICache(STsdb *pTsdb) {
|
static int32_t tsdbOpenBICache(STsdb *pTsdb) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
SLRUCache *pCache = taosLRUCacheInit(5 * 1024 * 1024, -1, .5);
|
SLRUCache *pCache = taosLRUCacheInit(5 * 1024 * 1024, 1, .5);
|
||||||
if (pCache == NULL) {
|
if (pCache == NULL) {
|
||||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
goto _err;
|
goto _err;
|
||||||
|
@ -48,7 +48,7 @@ int32_t tsdbOpenCache(STsdb *pTsdb) {
|
||||||
SLRUCache *pCache = NULL;
|
SLRUCache *pCache = NULL;
|
||||||
size_t cfgCapacity = pTsdb->pVnode->config.cacheLastSize * 1024 * 1024;
|
size_t cfgCapacity = pTsdb->pVnode->config.cacheLastSize * 1024 * 1024;
|
||||||
|
|
||||||
pCache = taosLRUCacheInit(cfgCapacity, -1, .5);
|
pCache = taosLRUCacheInit(cfgCapacity, 1, .5);
|
||||||
if (pCache == NULL) {
|
if (pCache == NULL) {
|
||||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
goto _err;
|
goto _err;
|
||||||
|
|
|
@ -1086,13 +1086,12 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode,
|
||||||
size_t size = numOfTables * sizeof(uint64_t) + sizeof(int32_t);
|
size_t size = numOfTables * sizeof(uint64_t) + sizeof(int32_t);
|
||||||
char* pPayload = taosMemoryMalloc(size);
|
char* pPayload = taosMemoryMalloc(size);
|
||||||
|
|
||||||
if (numOfTables > 0) {
|
|
||||||
*(int32_t*)pPayload = numOfTables;
|
*(int32_t*)pPayload = numOfTables;
|
||||||
|
if (numOfTables > 0) {
|
||||||
memcpy(pPayload + sizeof(int32_t), taosArrayGet(pUidList, 0), numOfTables * sizeof(uint64_t));
|
memcpy(pPayload + sizeof(int32_t), taosArrayGet(pUidList, 0), numOfTables * sizeof(uint64_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
metaUidFilterCachePut(metaHandle, pScanNode->suid, context.digest, tListLen(context.digest), pPayload, size, 1);
|
metaUidFilterCachePut(metaHandle, pScanNode->suid, context.digest, tListLen(context.digest), pPayload, size, 1);
|
||||||
taosMemoryFree(pPayload);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue