fix(tsdb/cache): copy entry before transfering to lru

This commit is contained in:
Minglei Jin 2024-09-03 15:45:54 +08:00
parent 884a94a7ad
commit 1bd0702a48
1 changed files with 8 additions and 9 deletions

View File

@ -678,14 +678,14 @@ int32_t tsdbCacheCommitNoLock(STsdb *pTsdb) {
static int32_t tsdbCacheGetValuesFromRocks(STsdb *pTsdb, size_t numKeys, const char *const *ppKeysList, static int32_t tsdbCacheGetValuesFromRocks(STsdb *pTsdb, size_t numKeys, const char *const *ppKeysList,
size_t *pKeysListSizes, char ***pppValuesList, size_t **ppValuesListSizes) { size_t *pKeysListSizes, char ***pppValuesList, size_t **ppValuesListSizes) {
char **valuesList = taosMemoryCalloc(numKeys, sizeof(char *)); char **valuesList = taosMemoryCalloc(numKeys, sizeof(char *));
if(!valuesList) return terrno; if (!valuesList) return terrno;
size_t *valuesListSizes = taosMemoryCalloc(numKeys, sizeof(size_t)); size_t *valuesListSizes = taosMemoryCalloc(numKeys, sizeof(size_t));
if(!valuesListSizes) { if (!valuesListSizes) {
taosMemoryFreeClear(valuesList); taosMemoryFreeClear(valuesList);
return terrno; return terrno;
} }
char **errs = taosMemoryCalloc(numKeys, sizeof(char *)); char **errs = taosMemoryCalloc(numKeys, sizeof(char *));
if (!errs) { if (!errs) {
taosMemoryFreeClear(valuesList); taosMemoryFreeClear(valuesList);
taosMemoryFreeClear(valuesListSizes); taosMemoryFreeClear(valuesListSizes);
@ -1178,7 +1178,7 @@ static int32_t tsdbCacheUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SArray
size_t *values_list_sizes = NULL; size_t *values_list_sizes = NULL;
char **errs = NULL; char **errs = NULL;
keys_list = taosMemoryCalloc(num_keys, sizeof(char *)); keys_list = taosMemoryCalloc(num_keys, sizeof(char *));
if(!keys_list) { if (!keys_list) {
(void)taosThreadMutexUnlock(&pTsdb->lruMutex); (void)taosThreadMutexUnlock(&pTsdb->lruMutex);
return terrno; return terrno;
} }
@ -1692,19 +1692,18 @@ static int32_t tsdbCacheLoadFromRocks(STsdb *pTsdb, tb_uid_t uid, SArray *pLastA
goto _exit; goto _exit;
} }
SLastCol lastCol = *pLastCol;
TAOS_CHECK_EXIT(tsdbCacheReallocSLastCol(&lastCol, NULL));
LRUStatus status = taosLRUCacheInsert(pCache, &idxKey->key, ROCKS_KEY_LEN, pLastCol, charge, tsdbCacheDeleter, LRUStatus status = taosLRUCacheInsert(pCache, &idxKey->key, ROCKS_KEY_LEN, pLastCol, charge, tsdbCacheDeleter,
NULL, TAOS_LRU_PRIORITY_LOW, &pTsdb->flushState); NULL, TAOS_LRU_PRIORITY_LOW, &pTsdb->flushState);
if (status != TAOS_LRU_STATUS_OK) { if (status != TAOS_LRU_STATUS_OK) {
code = -1; code = -1;
} }
SLastCol lastCol = *pLastCol;
TAOS_CHECK_EXIT(tsdbCacheReallocSLastCol(&lastCol, NULL));
taosArraySet(pLastArray, idxKey->idx, &lastCol); taosArraySet(pLastArray, idxKey->idx, &lastCol);
taosArrayRemove(remainCols, j); taosArrayRemove(remainCols, j);
taosArrayRemove(ignoreFromRocks, j); taosArrayRemove(ignoreFromRocks, j);
} else { } else {
++j; ++j;
} }