enhance: assert the region offset is keep increasing
This commit is contained in:
parent
f690e5cfb9
commit
a42a897c85
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue