TD-353
This commit is contained in:
parent
44d5644c35
commit
32dcbfe52a
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue