feat: change from FILE* to TDFilePtr

This commit is contained in:
slzhou 2024-02-23 10:55:19 +08:00
parent 3fb6ed8a42
commit 754a15cac8
1 changed files with 19 additions and 10 deletions

View File

@ -63,7 +63,8 @@ typedef struct SSortMemFile {
int32_t numMemPages; int32_t numMemPages;
SSHashObj* mActivePages; SSHashObj* mActivePages;
FILE* pTdFile; //FILE* pTdFile;
TdFilePtr pTdFile;
char memFilePath[PATH_MAX]; char memFilePath[PATH_MAX];
} SSortMemFile; } SSortMemFile;
@ -1037,8 +1038,12 @@ static int32_t getPageFromExtMemFile(SSortHandle* pHandle, int32_t pageId, char*
++pMemFile->numMemPages; ++pMemFile->numMemPages;
} }
{ {
fseeko(pMemFile->pTdFile, ((int64_t)pageId) * pMemFile->pageSize, SEEK_SET); // fseeko(pMemFile->pTdFile, ((int64_t)pageId) * pMemFile->pageSize, SEEK_SET);
fread(pEntry->data, pMemFile->pageSize, 1, pMemFile->pTdFile); // fread(pEntry->data, pMemFile->pageSize, 1, pMemFile->pTdFile);
taosLSeekFile(pMemFile->pTdFile, ((int64_t)pageId) * pMemFile->pageSize, SEEK_SET);
taosReadFile(pMemFile->pTdFile, pEntry->data, pMemFile->pageSize);
SSortMemPageEntry* tail = pMemFile->pagesTail; SSortMemPageEntry* tail = pMemFile->pagesTail;
tail->next = pEntry; tail->next = pEntry;
pEntry->next = NULL; pEntry->next = NULL;
@ -1082,7 +1087,7 @@ static int32_t createSortMemFile(SSortHandle* pHandle) {
taosGetTmpfilePath(tsTempDir, "sort-ext-mem", pMemFile->memFilePath); taosGetTmpfilePath(tsTempDir, "sort-ext-mem", pMemFile->memFilePath);
pMemFile->pTdFile = pMemFile->pTdFile =
fopen(pMemFile->memFilePath, "wb+"); taosOpenFile(pMemFile->memFilePath, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_READ | TD_FILE_TRUNC);
pMemFile->currPageId = -1; pMemFile->currPageId = -1;
pMemFile->currPageOffset = -1; pMemFile->currPageOffset = -1;
@ -1122,7 +1127,8 @@ static int32_t destroySortMemFile(SSortHandle* pHandle) {
taosMemoryFree(pMemFile->writePageBuf); taosMemoryFree(pMemFile->writePageBuf);
pMemFile->writePageBuf = NULL; pMemFile->writePageBuf = NULL;
fclose(pMemFile->pTdFile); // fclose(pMemFile->pTdFile);
taosCloseFile(&pMemFile->pTdFile);
taosRemoveFile(pMemFile->memFilePath); taosRemoveFile(pMemFile->memFilePath);
taosMemoryFree(pMemFile); taosMemoryFree(pMemFile);
pHandle->pExtRowsMemFile = NULL; pHandle->pExtRowsMemFile = NULL;
@ -1142,9 +1148,10 @@ static int32_t saveBlockRowToExtRowsMemFile(SSortHandle* pHandle, SSDataBlock* p
pMemFile->currPageOffset = 0; pMemFile->currPageOffset = 0;
if (pMemFile->currPageId - pMemFile->startPageId >= pMemFile->numWritePages) { if (pMemFile->currPageId - pMemFile->startPageId >= pMemFile->numWritePages) {
fseeko(pMemFile->pTdFile, ((int64_t)pMemFile->startPageId) * pMemFile->pageSize, SEEK_SET); // fseeko(pMemFile->pTdFile, ((int64_t)pMemFile->startPageId) * pMemFile->pageSize, SEEK_SET);
fwrite(pMemFile->writePageBuf, pMemFile->pageSize * pMemFile->numWritePages, 1, pMemFile->pTdFile); // fwrite(pMemFile->writePageBuf, pMemFile->pageSize * pMemFile->numWritePages, 1, pMemFile->pTdFile);
taosLSeekFile(pMemFile->pTdFile, ((int64_t)pMemFile->startPageId) * pMemFile->pageSize, SEEK_SET);
taosWriteFile(pMemFile->pTdFile, pMemFile->writePageBuf, pMemFile->pageSize * pMemFile->numWritePages);
pMemFile->startPageId = pMemFile->currPageId; pMemFile->startPageId = pMemFile->currPageId;
} }
} }
@ -1166,9 +1173,11 @@ static int32_t saveDirtyPagesToExtRowsMemFile(SSortHandle* pHandle) {
if (!pMemFile->bDirty) { if (!pMemFile->bDirty) {
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
fseeko(pMemFile->pTdFile, ((int64_t)pMemFile->startPageId) * pMemFile->pageSize, SEEK_SET); // fseeko(pMemFile->pTdFile, ((int64_t)pMemFile->startPageId) * pMemFile->pageSize, SEEK_SET);
taosLSeekFile(pMemFile->pTdFile, ((int64_t)pMemFile->startPageId) * pMemFile->pageSize, SEEK_SET);
int32_t numWriteBytes = pMemFile->pageSize * (pMemFile->currPageId - pMemFile->startPageId) + pMemFile->currPageOffset + 1; int32_t numWriteBytes = pMemFile->pageSize * (pMemFile->currPageId - pMemFile->startPageId) + pMemFile->currPageOffset + 1;
fwrite(pMemFile->writePageBuf, numWriteBytes, 1, pMemFile->pTdFile); // fwrite(pMemFile->writePageBuf, numWriteBytes, 1, pMemFile->pTdFile);
taosWriteFile(pMemFile->pTdFile, pMemFile->writePageBuf, numWriteBytes);
pMemFile->bDirty = false; pMemFile->bDirty = false;
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }