enhance: assert the region offset is keep increasing

This commit is contained in:
slzhou 2024-03-08 10:47:32 +08:00
parent f690e5cfb9
commit a42a897c85
1 changed files with 20 additions and 22 deletions

View File

@ -1047,32 +1047,30 @@ static int32_t getRowBufFromExtMemFile(SSortHandle* pHandle, int32_t regionId, i
} }
pRegion->bufLen = readBytes; pRegion->bufLen = readBytes;
} }
// TODO: ASSERT(pRegion->offset < tupleOffset); ASSERT(pRegion->bufRegOffset <= tupleOffset);
if (pRegion->bufRegOffset + pRegion->bufLen >= tupleOffset + rowLen) { if (pRegion->bufRegOffset + pRegion->bufLen >= tupleOffset + rowLen) {
*pFreeRow = false; *pFreeRow = false;
*ppRow = pRegion->buf + tupleOffset - pRegion->bufRegOffset; *ppRow = pRegion->buf + tupleOffset - pRegion->bufRegOffset;
} else { } else {
*ppRow = taosMemoryMalloc(rowLen); *ppRow = taosMemoryMalloc(rowLen);
if (*ppRow == NULL) { if (*ppRow == NULL) {
return TSDB_CODE_OUT_OF_MEMORY; return TSDB_CODE_OUT_OF_MEMORY;
} }
int32_t szThisBlock = pRegion->bufLen - (tupleOffset - pRegion->bufRegOffset); int32_t szThisBlock = pRegion->bufLen - (tupleOffset - pRegion->bufRegOffset);
memcpy(*ppRow, pRegion->buf + tupleOffset - pRegion->bufRegOffset, memcpy(*ppRow, pRegion->buf + tupleOffset - pRegion->bufRegOffset, szThisBlock);
szThisBlock); tsortSeekFile(pMemFile->pTdFile, pRegion->fileOffset + pRegion->bufRegOffset + pRegion->bufLen, SEEK_SET);
tsortSeekFile(pMemFile->pTdFile, pRegion->fileOffset + pRegion->bufRegOffset + pRegion->bufLen, SEEK_SET); int32_t readBytes = TMIN(pMemFile->blockSize, pRegion->regionSize - (pRegion->bufRegOffset + pRegion->bufLen));
int32_t readBytes = TMIN(pMemFile->blockSize, pRegion->regionSize - (pRegion->bufRegOffset + pRegion->bufLen)); int ret = fread(pRegion->buf, readBytes, 1, pMemFile->pTdFile);
int ret = fread(pRegion->buf, readBytes, 1, pMemFile->pTdFile); if (ret != 1) {
if (ret != 1) { taosMemoryFreeClear(*ppRow);
taosMemoryFreeClear(*ppRow); terrno = TAOS_SYSTEM_ERROR(errno);
terrno = TAOS_SYSTEM_ERROR(errno); return terrno;
return terrno; }
} memcpy(*ppRow + szThisBlock, pRegion->buf, rowLen - szThisBlock);
memcpy(*ppRow + szThisBlock, pRegion->buf, rowLen - szThisBlock); *pFreeRow = true;
*pFreeRow = true; pRegion->bufRegOffset += pRegion->bufLen;
pRegion->bufRegOffset += pRegion->bufLen; pRegion->bufLen = readBytes;
pRegion->bufLen = readBytes;
} }
//TODO: free region memory
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }