Merge pull request #2429 from taosdata/hotfix/coverity_query
fix coverity issue
This commit is contained in:
commit
4e2badf055
|
@ -5153,9 +5153,7 @@ static int32_t convertQueryMsg(SQueryTableMsg *pQueryMsg, SArray **pTableIdList,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!validateQuerySourceCols(pQueryMsg, *pExpr)) {
|
if (!validateQuerySourceCols(pQueryMsg, *pExpr)) {
|
||||||
tfree(*pExpr);
|
goto _cleanup;
|
||||||
|
|
||||||
return TSDB_CODE_QRY_INVALID_MSG;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pMsg = createTableIdList(pQueryMsg, pMsg, pTableIdList);
|
pMsg = createTableIdList(pQueryMsg, pMsg, pTableIdList);
|
||||||
|
@ -5227,8 +5225,17 @@ static int32_t convertQueryMsg(SQueryTableMsg *pQueryMsg, SArray **pTableIdList,
|
||||||
pQueryMsg, pQueryMsg->numOfTables, pQueryMsg->queryType, pQueryMsg->window.skey, pQueryMsg->window.ekey, pQueryMsg->numOfGroupCols,
|
pQueryMsg, pQueryMsg->numOfTables, pQueryMsg->queryType, pQueryMsg->window.skey, pQueryMsg->window.ekey, pQueryMsg->numOfGroupCols,
|
||||||
pQueryMsg->order, pQueryMsg->numOfOutput, pQueryMsg->numOfCols, pQueryMsg->intervalTime,
|
pQueryMsg->order, pQueryMsg->numOfOutput, pQueryMsg->numOfCols, pQueryMsg->intervalTime,
|
||||||
pQueryMsg->fillType, pQueryMsg->tsLen, pQueryMsg->tsNumOfBlocks, pQueryMsg->limit, pQueryMsg->offset);
|
pQueryMsg->fillType, pQueryMsg->tsLen, pQueryMsg->tsNumOfBlocks, pQueryMsg->limit, pQueryMsg->offset);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
_cleanup:
|
||||||
|
tfree(*pExpr);
|
||||||
|
taosArrayDestroy(*pTableIdList);
|
||||||
|
*pTableIdList = NULL;
|
||||||
|
tfree(*tbnameCond);
|
||||||
|
tfree(*groupbyCols);
|
||||||
|
tfree(*tagCols);
|
||||||
|
tfree(*tagCond);
|
||||||
|
return TSDB_CODE_QRY_INVALID_MSG;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t buildAirthmeticExprFromMsg(SExprInfo *pArithExprInfo, SQueryTableMsg *pQueryMsg) {
|
static int32_t buildAirthmeticExprFromMsg(SExprInfo *pArithExprInfo, SQueryTableMsg *pQueryMsg) {
|
||||||
|
@ -5494,6 +5501,8 @@ static int compareTableIdInfo(const void* a, const void* b) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void freeQInfo(SQInfo *pQInfo);
|
||||||
|
|
||||||
static SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SArray* pTableIdList, SSqlGroupbyExpr *pGroupbyExpr, SExprInfo *pExprs,
|
static SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SArray* pTableIdList, SSqlGroupbyExpr *pGroupbyExpr, SExprInfo *pExprs,
|
||||||
STableGroupInfo *pTableGroupInfo, SColumnInfo* pTagCols) {
|
STableGroupInfo *pTableGroupInfo, SColumnInfo* pTagCols) {
|
||||||
SQInfo *pQInfo = (SQInfo *)calloc(1, sizeof(SQInfo));
|
SQInfo *pQInfo = (SQInfo *)calloc(1, sizeof(SQInfo));
|
||||||
|
@ -5634,22 +5643,27 @@ static SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SArray* pTableIdList,
|
||||||
return pQInfo;
|
return pQInfo;
|
||||||
|
|
||||||
_cleanup:
|
_cleanup:
|
||||||
tfree(pQuery->fillVal);
|
//tfree(pQuery->fillVal);
|
||||||
|
|
||||||
if (pQuery->sdata != NULL) {
|
//if (pQuery->sdata != NULL) {
|
||||||
for (int16_t col = 0; col < pQuery->numOfOutput; ++col) {
|
// for (int16_t col = 0; col < pQuery->numOfOutput; ++col) {
|
||||||
tfree(pQuery->sdata[col]);
|
// tfree(pQuery->sdata[col]);
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
tfree(pQuery->sdata);
|
//
|
||||||
tfree(pQuery->pFilterInfo);
|
//tfree(pQuery->sdata);
|
||||||
tfree(pQuery->colList);
|
//tfree(pQuery->pFilterInfo);
|
||||||
|
//tfree(pQuery->colList);
|
||||||
|
|
||||||
tfree(pExprs);
|
//tfree(pExprs);
|
||||||
tfree(pGroupbyExpr);
|
//tfree(pGroupbyExpr);
|
||||||
|
|
||||||
tfree(pQInfo);
|
//taosArrayDestroy(pQInfo->arrTableIdInfo);
|
||||||
|
//tsdbDestoryTableGroup(&pQInfo->tableGroupInfo);
|
||||||
|
//
|
||||||
|
//tfree(pQInfo);
|
||||||
|
freeQInfo(pQInfo);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -5668,7 +5682,6 @@ static bool isValidQInfo(void *param) {
|
||||||
return (sig == (uint64_t)pQInfo);
|
return (sig == (uint64_t)pQInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void freeQInfo(SQInfo *pQInfo);
|
|
||||||
|
|
||||||
static int32_t initQInfo(SQueryTableMsg *pQueryMsg, void *tsdb, int32_t vgId, SQInfo *pQInfo, bool isSTable) {
|
static int32_t initQInfo(SQueryTableMsg *pQueryMsg, void *tsdb, int32_t vgId, SQInfo *pQInfo, bool isSTable) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
|
@ -5869,6 +5882,8 @@ int32_t qCreateQueryInfo(void *tsdb, int32_t vgId, SQueryTableMsg *pQueryMsg, qi
|
||||||
SSqlFuncMsg **pExprMsg = NULL;
|
SSqlFuncMsg **pExprMsg = NULL;
|
||||||
SColIndex * pGroupColIndex = NULL;
|
SColIndex * pGroupColIndex = NULL;
|
||||||
SColumnInfo* pTagColumnInfo = NULL;
|
SColumnInfo* pTagColumnInfo = NULL;
|
||||||
|
SExprInfo *pExprs = NULL;
|
||||||
|
SSqlGroupbyExpr *pGroupbyExpr = NULL;
|
||||||
|
|
||||||
if ((code = convertQueryMsg(pQueryMsg, &pTableIdList, &pExprMsg, &tagCond, &tbnameCond, &pGroupColIndex, &pTagColumnInfo)) !=
|
if ((code = convertQueryMsg(pQueryMsg, &pTableIdList, &pExprMsg, &tagCond, &tbnameCond, &pGroupColIndex, &pTagColumnInfo)) !=
|
||||||
TSDB_CODE_SUCCESS) {
|
TSDB_CODE_SUCCESS) {
|
||||||
|
@ -5887,12 +5902,12 @@ int32_t qCreateQueryInfo(void *tsdb, int32_t vgId, SQueryTableMsg *pQueryMsg, qi
|
||||||
goto _over;
|
goto _over;
|
||||||
}
|
}
|
||||||
|
|
||||||
SExprInfo *pExprs = NULL;
|
|
||||||
if ((code = createQFunctionExprFromMsg(pQueryMsg, &pExprs, pExprMsg, pTagColumnInfo)) != TSDB_CODE_SUCCESS) {
|
if ((code = createQFunctionExprFromMsg(pQueryMsg, &pExprs, pExprMsg, pTagColumnInfo)) != TSDB_CODE_SUCCESS) {
|
||||||
|
free(pExprMsg);
|
||||||
goto _over;
|
goto _over;
|
||||||
}
|
}
|
||||||
|
|
||||||
SSqlGroupbyExpr *pGroupbyExpr = createGroupbyExprFromMsg(pQueryMsg, pGroupColIndex, &code);
|
pGroupbyExpr = createGroupbyExprFromMsg(pQueryMsg, pGroupColIndex, &code);
|
||||||
if ((pGroupbyExpr == NULL && pQueryMsg->numOfGroupCols != 0) || code != TSDB_CODE_SUCCESS) {
|
if ((pGroupbyExpr == NULL && pQueryMsg->numOfGroupCols != 0) || code != TSDB_CODE_SUCCESS) {
|
||||||
goto _over;
|
goto _over;
|
||||||
}
|
}
|
||||||
|
@ -5939,6 +5954,10 @@ int32_t qCreateQueryInfo(void *tsdb, int32_t vgId, SQueryTableMsg *pQueryMsg, qi
|
||||||
}
|
}
|
||||||
|
|
||||||
(*pQInfo) = createQInfoImpl(pQueryMsg, pTableIdList, pGroupbyExpr, pExprs, &tableGroupInfo, pTagColumnInfo);
|
(*pQInfo) = createQInfoImpl(pQueryMsg, pTableIdList, pGroupbyExpr, pExprs, &tableGroupInfo, pTagColumnInfo);
|
||||||
|
pExprs = NULL;
|
||||||
|
pGroupbyExpr = NULL;
|
||||||
|
pTagColumnInfo = NULL;
|
||||||
|
|
||||||
if ((*pQInfo) == NULL) {
|
if ((*pQInfo) == NULL) {
|
||||||
code = TSDB_CODE_QRY_OUT_OF_MEMORY;
|
code = TSDB_CODE_QRY_OUT_OF_MEMORY;
|
||||||
goto _over;
|
goto _over;
|
||||||
|
@ -5947,9 +5966,15 @@ int32_t qCreateQueryInfo(void *tsdb, int32_t vgId, SQueryTableMsg *pQueryMsg, qi
|
||||||
code = initQInfo(pQueryMsg, tsdb, vgId, *pQInfo, isSTableQuery);
|
code = initQInfo(pQueryMsg, tsdb, vgId, *pQInfo, isSTableQuery);
|
||||||
|
|
||||||
_over:
|
_over:
|
||||||
tfree(tagCond);
|
free(tagCond);
|
||||||
tfree(tbnameCond);
|
free(tbnameCond);
|
||||||
tfree(pGroupColIndex);
|
free(pGroupColIndex);
|
||||||
|
if (pGroupbyExpr != NULL) {
|
||||||
|
taosArrayDestroy(pGroupbyExpr->columnInfo);
|
||||||
|
free(pGroupbyExpr);
|
||||||
|
}
|
||||||
|
free(pTagColumnInfo);
|
||||||
|
free(pExprs);
|
||||||
taosArrayDestroy(pTableIdList);
|
taosArrayDestroy(pTableIdList);
|
||||||
|
|
||||||
//pQInfo already freed in initQInfo, but *pQInfo may not pointer to null;
|
//pQInfo already freed in initQInfo, but *pQInfo may not pointer to null;
|
||||||
|
|
|
@ -138,7 +138,7 @@ void clearFirstNTimeWindow(SQueryRuntimeEnv *pRuntimeEnv, int32_t num) {
|
||||||
SWindowResult *pResult = &pWindowResInfo->pResult[k];
|
SWindowResult *pResult = &pWindowResInfo->pResult[k];
|
||||||
int32_t *p = (int32_t *)taosHashGet(pWindowResInfo->hashList, (const char *)&pResult->window.skey,
|
int32_t *p = (int32_t *)taosHashGet(pWindowResInfo->hashList, (const char *)&pResult->window.skey,
|
||||||
tDataTypeDesc[pWindowResInfo->type].nSize);
|
tDataTypeDesc[pWindowResInfo->type].nSize);
|
||||||
|
assert(p != NULL);
|
||||||
int32_t v = (*p - num);
|
int32_t v = (*p - num);
|
||||||
assert(v >= 0 && v <= pWindowResInfo->size);
|
assert(v >= 0 && v <= pWindowResInfo->size);
|
||||||
taosHashPut(pWindowResInfo->hashList, (char *)&pResult->window.skey, tDataTypeDesc[pWindowResInfo->type].nSize,
|
taosHashPut(pWindowResInfo->hashList, (char *)&pResult->window.skey, tDataTypeDesc[pWindowResInfo->type].nSize,
|
||||||
|
|
|
@ -879,8 +879,8 @@ double getPercentileImpl(tMemBucket *pMemBucket, int32_t count, double fraction)
|
||||||
UNUSED(ret);
|
UNUSED(ret);
|
||||||
|
|
||||||
for (uint32_t jx = 0; jx < pFlushInfo->numOfPages; ++jx) {
|
for (uint32_t jx = 0; jx < pFlushInfo->numOfPages; ++jx) {
|
||||||
ret = fread(pPage, pMemBuffer->pageSize, 1, pMemBuffer->file);
|
size_t sz = fread(pPage, pMemBuffer->pageSize, 1, pMemBuffer->file);
|
||||||
UNUSED(ret);
|
UNUSED(sz);
|
||||||
tMemBucketPut(pMemBucket, pPage->data, pPage->num);
|
tMemBucketPut(pMemBucket, pPage->data, pPage->num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -965,10 +965,11 @@ char *getFirstElemOfMemBuffer(tMemBucketSegment *pSeg, int32_t slotIdx, tFilePag
|
||||||
*/
|
*/
|
||||||
tFlushoutInfo *pFlushInfo = &pMemBuffer->fileMeta.flushoutData.pFlushoutInfo[0];
|
tFlushoutInfo *pFlushInfo = &pMemBuffer->fileMeta.flushoutData.pFlushoutInfo[0];
|
||||||
assert(pFlushInfo->numOfPages == pMemBuffer->fileMeta.nFileSize);
|
assert(pFlushInfo->numOfPages == pMemBuffer->fileMeta.nFileSize);
|
||||||
|
int32_t ret;
|
||||||
fseek(pMemBuffer->file, pFlushInfo->startPageId * pMemBuffer->pageSize, SEEK_SET);
|
ret = fseek(pMemBuffer->file, pFlushInfo->startPageId * pMemBuffer->pageSize, SEEK_SET);
|
||||||
size_t ret = fread(pPage, pMemBuffer->pageSize, 1, pMemBuffer->file);
|
|
||||||
UNUSED(ret);
|
UNUSED(ret);
|
||||||
|
size_t sz = fread(pPage, pMemBuffer->pageSize, 1, pMemBuffer->file);
|
||||||
|
UNUSED(sz);
|
||||||
thisVal = pPage->data;
|
thisVal = pPage->data;
|
||||||
}
|
}
|
||||||
return thisVal;
|
return thisVal;
|
||||||
|
|
|
@ -65,8 +65,10 @@ STSBuf* tsBufCreateFromFile(const char* path, bool autoDelete) {
|
||||||
|
|
||||||
// validate the file magic number
|
// validate the file magic number
|
||||||
STSBufFileHeader header = {0};
|
STSBufFileHeader header = {0};
|
||||||
fseek(pTSBuf->f, 0, SEEK_SET);
|
int32_t ret = fseek(pTSBuf->f, 0, SEEK_SET);
|
||||||
fread(&header, 1, sizeof(STSBufFileHeader), pTSBuf->f);
|
UNUSED(ret);
|
||||||
|
size_t sz = fread(&header, 1, sizeof(STSBufFileHeader), pTSBuf->f);
|
||||||
|
UNUSED(sz);
|
||||||
|
|
||||||
// invalid file
|
// invalid file
|
||||||
if (header.magic != TS_COMP_FILE_MAGIC) {
|
if (header.magic != TS_COMP_FILE_MAGIC) {
|
||||||
|
@ -97,22 +99,30 @@ STSBuf* tsBufCreateFromFile(const char* path, bool autoDelete) {
|
||||||
size_t infoSize = sizeof(STSVnodeBlockInfo) * pTSBuf->numOfVnodes;
|
size_t infoSize = sizeof(STSVnodeBlockInfo) * pTSBuf->numOfVnodes;
|
||||||
|
|
||||||
STSVnodeBlockInfo* buf = (STSVnodeBlockInfo*)calloc(1, infoSize);
|
STSVnodeBlockInfo* buf = (STSVnodeBlockInfo*)calloc(1, infoSize);
|
||||||
|
if (buf == NULL) {
|
||||||
|
tsBufDestory(pTSBuf);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
//int64_t pos = ftell(pTSBuf->f); //pos not used
|
//int64_t pos = ftell(pTSBuf->f); //pos not used
|
||||||
fread(buf, infoSize, 1, pTSBuf->f);
|
sz = fread(buf, infoSize, 1, pTSBuf->f);
|
||||||
|
UNUSED(sz);
|
||||||
|
|
||||||
// the length value for each vnode is not kept in file, so does not set the length value
|
// the length value for each vnode is not kept in file, so does not set the length value
|
||||||
for (int32_t i = 0; i < pTSBuf->numOfVnodes; ++i) {
|
for (int32_t i = 0; i < pTSBuf->numOfVnodes; ++i) {
|
||||||
STSVnodeBlockInfoEx* pBlockList = &pTSBuf->pData[i];
|
STSVnodeBlockInfoEx* pBlockList = &pTSBuf->pData[i];
|
||||||
memcpy(&pBlockList->info, &buf[i], sizeof(STSVnodeBlockInfo));
|
memcpy(&pBlockList->info, &buf[i], sizeof(STSVnodeBlockInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
free(buf);
|
free(buf);
|
||||||
|
|
||||||
fseek(pTSBuf->f, 0, SEEK_END);
|
ret = fseek(pTSBuf->f, 0, SEEK_END);
|
||||||
|
UNUSED(ret);
|
||||||
|
|
||||||
struct stat fileStat;
|
struct stat fileStat;
|
||||||
fstat(fileno(pTSBuf->f), &fileStat);
|
if (fstat(fileno(pTSBuf->f), &fileStat) != 0) {
|
||||||
|
tsBufDestory(pTSBuf);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
pTSBuf->fileSize = (uint32_t)fileStat.st_size;
|
pTSBuf->fileSize = (uint32_t)fileStat.st_size;
|
||||||
tsBufResetPos(pTSBuf);
|
tsBufResetPos(pTSBuf);
|
||||||
|
@ -278,19 +288,24 @@ STSBlock* readDataFromDisk(STSBuf* pTSBuf, int32_t order, bool decomp) {
|
||||||
* set the right position for the reversed traverse, the reversed traverse is started from
|
* set the right position for the reversed traverse, the reversed traverse is started from
|
||||||
* the end of each comp data block
|
* the end of each comp data block
|
||||||
*/
|
*/
|
||||||
fseek(pTSBuf->f, -sizeof(pBlock->padding), SEEK_CUR);
|
int32_t ret = fseek(pTSBuf->f, -sizeof(pBlock->padding), SEEK_CUR);
|
||||||
fread(&pBlock->padding, sizeof(pBlock->padding), 1, pTSBuf->f);
|
size_t sz = fread(&pBlock->padding, sizeof(pBlock->padding), 1, pTSBuf->f);
|
||||||
|
UNUSED(sz);
|
||||||
|
|
||||||
pBlock->compLen = pBlock->padding;
|
pBlock->compLen = pBlock->padding;
|
||||||
int32_t offset = pBlock->compLen + sizeof(pBlock->compLen) * 2 + sizeof(pBlock->numOfElem) + sizeof(pBlock->tag);
|
int32_t offset = pBlock->compLen + sizeof(pBlock->compLen) * 2 + sizeof(pBlock->numOfElem) + sizeof(pBlock->tag);
|
||||||
fseek(pTSBuf->f, -offset, SEEK_CUR);
|
ret = fseek(pTSBuf->f, -offset, SEEK_CUR);
|
||||||
|
UNUSED(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
fread(&pBlock->tag, sizeof(pBlock->tag), 1, pTSBuf->f);
|
size_t sz = fread(&pBlock->tag, sizeof(pBlock->tag), 1, pTSBuf->f);
|
||||||
fread(&pBlock->numOfElem, sizeof(pBlock->numOfElem), 1, pTSBuf->f);
|
UNUSED(sz);
|
||||||
|
sz = fread(&pBlock->numOfElem, sizeof(pBlock->numOfElem), 1, pTSBuf->f);
|
||||||
fread(&pBlock->compLen, sizeof(pBlock->compLen), 1, pTSBuf->f);
|
UNUSED(sz);
|
||||||
fread(pBlock->payload, (size_t)pBlock->compLen, 1, pTSBuf->f);
|
sz = fread(&pBlock->compLen, sizeof(pBlock->compLen), 1, pTSBuf->f);
|
||||||
|
UNUSED(sz);
|
||||||
|
sz = fread(pBlock->payload, (size_t)pBlock->compLen, 1, pTSBuf->f);
|
||||||
|
UNUSED(sz);
|
||||||
|
|
||||||
if (decomp) {
|
if (decomp) {
|
||||||
pTSBuf->tsData.len =
|
pTSBuf->tsData.len =
|
||||||
|
@ -299,12 +314,13 @@ STSBlock* readDataFromDisk(STSBuf* pTSBuf, int32_t order, bool decomp) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// read the comp length at the length of comp block
|
// read the comp length at the length of comp block
|
||||||
fread(&pBlock->padding, sizeof(pBlock->padding), 1, pTSBuf->f);
|
sz = fread(&pBlock->padding, sizeof(pBlock->padding), 1, pTSBuf->f);
|
||||||
|
UNUSED(sz);
|
||||||
|
|
||||||
// for backwards traverse, set the start position at the end of previous block
|
// for backwards traverse, set the start position at the end of previous block
|
||||||
if (order == TSDB_ORDER_DESC) {
|
if (order == TSDB_ORDER_DESC) {
|
||||||
int32_t offset = pBlock->compLen + sizeof(pBlock->compLen) * 2 + sizeof(pBlock->numOfElem) + sizeof(pBlock->tag);
|
int32_t offset = pBlock->compLen + sizeof(pBlock->compLen) * 2 + sizeof(pBlock->numOfElem) + sizeof(pBlock->tag);
|
||||||
int64_t r = fseek(pTSBuf->f, -offset, SEEK_CUR);
|
int32_t r = fseek(pTSBuf->f, -offset, SEEK_CUR);
|
||||||
UNUSED(r);
|
UNUSED(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -441,7 +457,8 @@ static int32_t tsBufFindBlock(STSBuf* pTSBuf, STSVnodeBlockInfo* pBlockInfo, int
|
||||||
STSBlock* pBlock = &pTSBuf->block;
|
STSBlock* pBlock = &pTSBuf->block;
|
||||||
int32_t compBlockSize =
|
int32_t compBlockSize =
|
||||||
pBlock->compLen + sizeof(pBlock->compLen) * 2 + sizeof(pBlock->numOfElem) + sizeof(pBlock->tag);
|
pBlock->compLen + sizeof(pBlock->compLen) * 2 + sizeof(pBlock->numOfElem) + sizeof(pBlock->tag);
|
||||||
fseek(pTSBuf->f, -compBlockSize, SEEK_CUR);
|
int32_t ret = fseek(pTSBuf->f, -compBlockSize, SEEK_CUR);
|
||||||
|
UNUSED(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -538,7 +555,7 @@ int32_t STSBufUpdateHeader(STSBuf* pTSBuf, STSBufFileHeader* pHeader) {
|
||||||
|
|
||||||
assert(pHeader->tsOrder == TSDB_ORDER_ASC || pHeader->tsOrder == TSDB_ORDER_DESC);
|
assert(pHeader->tsOrder == TSDB_ORDER_ASC || pHeader->tsOrder == TSDB_ORDER_DESC);
|
||||||
|
|
||||||
int64_t r = fseek(pTSBuf->f, 0, SEEK_SET);
|
int32_t r = fseek(pTSBuf->f, 0, SEEK_SET);
|
||||||
if (r != 0) {
|
if (r != 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -743,7 +760,9 @@ int32_t tsBufMerge(STSBuf* pDestBuf, const STSBuf* pSrcBuf, int32_t vnodeId) {
|
||||||
int32_t oldSize = pDestBuf->fileSize;
|
int32_t oldSize = pDestBuf->fileSize;
|
||||||
|
|
||||||
struct stat fileStat;
|
struct stat fileStat;
|
||||||
fstat(fileno(pDestBuf->f), &fileStat);
|
if (fstat(fileno(pDestBuf->f), &fileStat) != 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
pDestBuf->fileSize = (uint32_t)fileStat.st_size;
|
pDestBuf->fileSize = (uint32_t)fileStat.st_size;
|
||||||
|
|
||||||
assert(pDestBuf->fileSize == oldSize + size);
|
assert(pDestBuf->fileSize == oldSize + size);
|
||||||
|
@ -766,8 +785,10 @@ STSBuf* tsBufCreateFromCompBlocks(const char* pData, int32_t numOfBlocks, int32_
|
||||||
// update prev vnode length info in file
|
// update prev vnode length info in file
|
||||||
TSBufUpdateVnodeInfo(pTSBuf, pTSBuf->numOfVnodes - 1, pBlockInfo);
|
TSBufUpdateVnodeInfo(pTSBuf, pTSBuf->numOfVnodes - 1, pBlockInfo);
|
||||||
|
|
||||||
fseek(pTSBuf->f, pBlockInfo->offset, SEEK_SET);
|
int32_t ret = fseek(pTSBuf->f, pBlockInfo->offset, SEEK_SET);
|
||||||
fwrite((void*)pData, 1, len, pTSBuf->f);
|
UNUSED(ret);
|
||||||
|
size_t sz = fwrite((void*)pData, 1, len, pTSBuf->f);
|
||||||
|
UNUSED(sz);
|
||||||
pTSBuf->fileSize += len;
|
pTSBuf->fileSize += len;
|
||||||
|
|
||||||
pTSBuf->tsOrder = order;
|
pTSBuf->tsOrder = order;
|
||||||
|
|
Loading…
Reference in New Issue