more code

This commit is contained in:
Hongze Cheng 2022-12-01 16:19:21 +08:00
parent 0525b4fa0d
commit 3700f0dc8e
5 changed files with 57 additions and 32 deletions

View File

@ -111,6 +111,7 @@ void debugPrintSTag(STag *pTag, const char *tag, int32_t ln); // TODO: remov
int32_t parseJsontoTagData(const char *json, SArray *pTagVals, STag **ppTag, void *pMsgBuf); int32_t parseJsontoTagData(const char *json, SArray *pTagVals, STag **ppTag, void *pMsgBuf);
// SColData ================================ // SColData ================================
typedef void *(*xMallocFn)(void *, int32_t);
void tColDataDestroy(void *ph); void tColDataDestroy(void *ph);
void tColDataInit(SColData *pColData, int16_t cid, int8_t type, int8_t smaOn); void tColDataInit(SColData *pColData, int16_t cid, int8_t type, int8_t smaOn);
void tColDataClear(SColData *pColData); void tColDataClear(SColData *pColData);
@ -118,7 +119,7 @@ void tColDataDeepClear(SColData *pColData);
int32_t tColDataAppendValue(SColData *pColData, SColVal *pColVal); int32_t tColDataAppendValue(SColData *pColData, SColVal *pColVal);
void tColDataGetValue(SColData *pColData, int32_t iVal, SColVal *pColVal); void tColDataGetValue(SColData *pColData, int32_t iVal, SColVal *pColVal);
uint8_t tColDataGetBitValue(const SColData *pColData, int32_t iVal); uint8_t tColDataGetBitValue(const SColData *pColData, int32_t iVal);
int32_t tColDataCopy(SColData *pColDataSrc, SColData *pColDataDest); int32_t tColDataCopy(SColData *pColDataFrom, SColData *pColData, xMallocFn xMalloc, void *arg);
extern void (*tColDataCalcSMA[])(SColData *pColData, int64_t *sum, int64_t *max, int64_t *min, int16_t *numOfNull); extern void (*tColDataCalcSMA[])(SColData *pColData, int64_t *sum, int64_t *max, int64_t *min, int16_t *numOfNull);
// for stmt bind // for stmt bind

View File

@ -2018,41 +2018,60 @@ uint8_t tColDataGetBitValue(const SColData *pColData, int32_t iVal) {
return v; return v;
} }
int32_t tColDataCopy(SColData *pColDataSrc, SColData *pColDataDest) { int32_t tColDataCopy(SColData *pColDataFrom, SColData *pColData, xMallocFn xMalloc, void *arg) {
int32_t code = 0; int32_t code = 0;
int32_t size;
ASSERT(pColDataSrc->nVal > 0); *pColData = *pColDataFrom;
ASSERT(pColDataDest->cid == pColDataSrc->cid);
ASSERT(pColDataDest->type == pColDataSrc->type);
pColDataDest->smaOn = pColDataSrc->smaOn;
pColDataDest->nVal = pColDataSrc->nVal;
pColDataDest->flag = pColDataSrc->flag;
// bitmap // bitmap
if (pColDataSrc->flag != HAS_NONE && pColDataSrc->flag != HAS_NULL && pColDataSrc->flag != HAS_VALUE) { switch (pColData->flag) {
size = BIT2_SIZE(pColDataSrc->nVal); case (HAS_NULL | HAS_NONE):
code = tRealloc(&pColDataDest->pBitMap, size); case (HAS_VALUE | HAS_NONE):
if (code) goto _exit; case (HAS_VALUE | HAS_NULL):
memcpy(pColDataDest->pBitMap, pColDataSrc->pBitMap, size); pColData->pBitMap = xMalloc(arg, BIT1_SIZE(pColData->nVal));
if (pColData->pBitMap == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
goto _exit;
}
memcpy(pColData->pBitMap, pColDataFrom->pBitMap, BIT1_SIZE(pColData->nVal));
break;
case (HAS_VALUE | HAS_NULL | HAS_NONE):
pColData->pBitMap = xMalloc(arg, BIT2_SIZE(pColData->nVal));
if (pColData->pBitMap == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
goto _exit;
}
memcpy(pColData->pBitMap, pColDataFrom->pBitMap, BIT2_SIZE(pColData->nVal));
break;
default:
pColData->pBitMap = NULL;
break;
} }
// offset // offset
if (IS_VAR_DATA_TYPE(pColDataDest->type)) { if (IS_VAR_DATA_TYPE(pColData->type) && (pColData->flag & HAS_VALUE)) {
size = sizeof(int32_t) * pColDataSrc->nVal; pColData->aOffset = xMalloc(arg, pColData->nVal << 2);
if (pColData->aOffset == NULL) {
code = tRealloc((uint8_t **)&pColDataDest->aOffset, size); code = TSDB_CODE_OUT_OF_MEMORY;
if (code) goto _exit; goto _exit;
}
memcpy(pColDataDest->aOffset, pColDataSrc->aOffset, size); memcpy(pColData->aOffset, pColDataFrom->aOffset, pColData->nVal << 2);
} else {
pColData->aOffset = NULL;
} }
// value // value
pColDataDest->nData = pColDataSrc->nData; if (pColData->nVal) {
code = tRealloc(&pColDataDest->pData, pColDataSrc->nData); pColData->pData = xMalloc(arg, pColData->nVal);
if (code) goto _exit; if (pColData->pData == NULL) {
memcpy(pColDataDest->pData, pColDataSrc->pData, pColDataDest->nData); code = TSDB_CODE_OUT_OF_MEMORY;
goto _exit;
}
memcpy(pColData->pData, pColDataFrom->pData, pColData->nData);
} else {
pColData->pData = NULL;
}
_exit: _exit:
return code; return code;

View File

@ -87,7 +87,7 @@ typedef struct SSnapDataHdr SSnapDataHdr;
#define VNODE_RSMA2_DIR "rsma2" #define VNODE_RSMA2_DIR "rsma2"
// vnd.h // vnd.h
void* vnodeBufPoolMalloc(SVBufPool* pPool, int size); void* vnodeBufPoolMalloc(SVBufPool* pPool, int32_t size);
void vnodeBufPoolFree(SVBufPool* pPool, void* p); void vnodeBufPoolFree(SVBufPool* pPool, void* p);
void vnodeBufPoolRef(SVBufPool* pPool); void vnodeBufPoolRef(SVBufPool* pPool);
void vnodeBufPoolUnRef(SVBufPool* pPool); void vnodeBufPoolUnRef(SVBufPool* pPool);

View File

@ -601,8 +601,13 @@ static int32_t tsdbInsertColDataToTable(SMemTable *pMemTable, STbData *pTbData,
memcpy(pBlockData->aTSKEY, aColData[0].pData, aColData[0].nData); memcpy(pBlockData->aTSKEY, aColData[0].pData, aColData[0].nData);
pBlockData->nColData = nColData - 1; pBlockData->nColData = nColData - 1;
for (int32_t iColData = 1; iColData < nColData; ++iColData) { pBlockData->aColData = vnodeBufPoolMalloc(pPool, sizeof(SColData) * pBlockData->nColData);
// todo if (pBlockData->aColData == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
}
for (int32_t iColData = 0; iColData < pBlockData->nColData; ++iColData) {
code = tColDataCopy(&aColData[iColData + 1], &pBlockData->aColData[iColData], (xMallocFn)vnodeBufPoolMalloc, pPool);
if (code) goto _exit;
} }
// loop to add each row to the skiplist // loop to add each row to the skiplist

View File

@ -35,7 +35,7 @@ static int vnodeBufPoolCreate(SVnode *pVnode, int64_t size, SVBufPool **ppPool)
return -1; return -1;
} }
if (taosThreadSpinInit(pPool->lock, 0) != 0) { if (taosThreadSpinInit(pPool->lock, 0) != 0) {
taosMemoryFree((void*)pPool->lock); taosMemoryFree((void *)pPool->lock);
taosMemoryFree(pPool); taosMemoryFree(pPool);
terrno = TAOS_SYSTEM_ERROR(errno); terrno = TAOS_SYSTEM_ERROR(errno);
return -1; return -1;
@ -62,7 +62,7 @@ static int vnodeBufPoolDestroy(SVBufPool *pPool) {
vnodeBufPoolReset(pPool); vnodeBufPoolReset(pPool);
if (pPool->lock) { if (pPool->lock) {
taosThreadSpinDestroy(pPool->lock); taosThreadSpinDestroy(pPool->lock);
taosMemoryFree((void*)pPool->lock); taosMemoryFree((void *)pPool->lock);
} }
taosMemoryFree(pPool); taosMemoryFree(pPool);
return 0; return 0;
@ -123,7 +123,7 @@ void vnodeBufPoolReset(SVBufPool *pPool) {
pPool->ptr = pPool->node.data; pPool->ptr = pPool->node.data;
} }
void *vnodeBufPoolMalloc(SVBufPool *pPool, int size) { void *vnodeBufPoolMalloc(SVBufPool *pPool, int32_t size) {
SVBufPoolNode *pNode; SVBufPoolNode *pNode;
void *p = NULL; void *p = NULL;
ASSERT(pPool != NULL); ASSERT(pPool != NULL);