This commit is contained in:
Hongze Cheng 2020-06-16 02:59:18 +00:00
parent 44d5644c35
commit 32dcbfe52a
2 changed files with 37 additions and 31 deletions

View File

@ -30,20 +30,22 @@
#include "ttime.h" #include "ttime.h"
const char *tsdbFileSuffix[] = { const char *tsdbFileSuffix[] = {
".head", // TSDB_FILE_TYPE_HEAD ".head",
".data", // TSDB_FILE_TYPE_DATA ".data",
".last" // TSDB_FILE_TYPE_LAST ".last",
".h",
".l"
}; };
// ---------------- INTERNAL FUNCTIONS ---------------- // ---------------- INTERNAL FUNCTIONS ----------------
STsdbFileH* tsdbNewFileH(STsdbCfg* pCfg) { STsdbFileH *tsdbNewFileH(STsdbCfg *pCfg) {
STsdbFileH *pFileH = (STsdbFileH *)calloc(1, sizeof(*pFileH)); STsdbFileH *pFileH = (STsdbFileH *)calloc(1, sizeof(*pFileH));
if (pFileH == NULL) { if (pFileH == NULL) {
terrno = TSDB_CODE_TDB_OUT_OF_MEMORY; terrno = TSDB_CODE_TDB_OUT_OF_MEMORY;
goto _err; goto _err;
} }
pFileH->maxFGroups = pCfg->keep / pCfg->daysPerFile + 3; pFileH->maxFGroups = TSDB_MAX_FILE(pCfg->keep, pCfg->daysPerFile);
pFileH->pFGroup = (SFileGroup *)calloc(pFileH->maxFGroups, sizeof(SFileGroup)); pFileH->pFGroup = (SFileGroup *)calloc(pFileH->maxFGroups, sizeof(SFileGroup));
if (pFileH->pFGroup == NULL) { if (pFileH->pFGroup == NULL) {
@ -53,51 +55,55 @@ STsdbFileH* tsdbNewFileH(STsdbCfg* pCfg) {
return pFileH; return pFileH;
_err: _err:
tsdbFreeFileH(pFileH); tsdbFreeFileH(pFileH);
return NULL; return NULL;
} }
void tsdbFreeFileH(STsdbFileH* pFileH) { void tsdbFreeFileH(STsdbFileH *pFileH) {
if (pFileH) { if (pFileH) {
tfree(pFileH->pFGroup); tfree(pFileH->pFGroup);
free(pFileH); free(pFileH);
} }
} }
STsdbFileH *tsdbInitFileH(char *dataDir, STsdbCfg *pCfg) { int *tsdbOpenFileH(STsdbRepo *pRepo) {
STsdbFileH *pFileH = (STsdbFileH *)calloc(1, sizeof(STsdbFileH)); ASSERT(pRepo != NULL && pRepo->tsdbFileH != NULL);
if (pFileH == NULL) { // TODO: deal with ERROR here
return NULL; char *tDataDir = NULL;
DIR * dir = NULL;
int fid = 0;
tsdbGetDataDirName(pRepo->rootDir);
if (tDataDir == NULL) {
terrno = TSDB_CODE_TDB_OUT_OF_MEMORY;
goto _err;
} }
pFileH->maxFGroups = pCfg->keep / pCfg->daysPerFile + 3; DIR *dir = opendir(tDataDir);
pFileH->fGroup = (SFileGroup *)calloc(pFileH->maxFGroups, sizeof(SFileGroup));
if (pFileH->fGroup == NULL) {
free(pFileH);
return NULL;
}
DIR *dir = opendir(dataDir);
if (dir == NULL) { if (dir == NULL) {
free(pFileH); tsdbError("vgId:%d failed to open directory %s since %s", REPO_ID(pRepo), tDataDir, strerror(errno));
return NULL; terrno = TAOS_SYSTEM_ERROR(errno);
goto _err;
} }
struct dirent *dp = NULL; struct dirent *dp = NULL;
while ((dp = readdir(dir)) != NULL) { while ((dp = readdir(dir)) != NULL) {
if (strncmp(dp->d_name, ".", 1) == 0 || strncmp(dp->d_name, "..", 1) == 0) continue; if (strncmp(dp->d_name, ".", 1) == 0 || strncmp(dp->d_name, "..", 2) == 0) continue;
int fid = 0;
sscanf(dp->d_name, "f%d", &fid); sscanf(dp->d_name, "f%d", &fid);
if (tsdbOpenFGroup(pFileH, dataDir, fid) < 0) { // if (tsdbOpenFGroup(pFileH, dataDir, fid) < 0) {
break; // break;
// TODO // }
}
} }
closedir(dir);
return pFileH; tfree(tDataDir);
closedir(dir);
return 0;
_err:
tfree(tDataDir);
if (dir != NULL) closedir(tDataDir);
return -1;
} }
void tsdbCloseFileH(STsdbFileH *pFileH) { void tsdbCloseFileH(STsdbFileH *pFileH) {

View File

@ -595,7 +595,7 @@ static STsdbRepo *tsdbNewRepo(char *rootDir, STsdbAppH *pAppH, STsdbCfg *pCfg) {
goto _err; goto _err;
} }
pRepo->tsdbFileH = tsdbNewFileH(pRepo); pRepo->tsdbFileH = tsdbNewFileH(pCfg);
if (pRepo->tsdbFileH == NULL) { if (pRepo->tsdbFileH == NULL) {
tsdbError("vgId:%d failed to create file handle since %s", REPO_ID(pRepo), tstrerror(terrno)); tsdbError("vgId:%d failed to create file handle since %s", REPO_ID(pRepo), tstrerror(terrno));
goto _err; goto _err;