TD-34
This commit is contained in:
parent
c94331fc6b
commit
5b10eda698
|
@ -35,6 +35,7 @@ static int compFGroup(const void *arg1, const void *arg2);
|
|||
static int tsdbGetFileName(char *dataDir, int fileId, char *suffix, char *fname);
|
||||
static int tsdbWriteFileHead(SFile *pFile);
|
||||
static int tsdbWriteHeadFileIdx(SFile *pFile, int maxTables);
|
||||
static int tsdbOpenFGroup(STsdbFileH *pFileH, char *dataDir, int fid);
|
||||
|
||||
STsdbFileH *tsdbInitFileH(char *dataDir, int maxFiles) {
|
||||
STsdbFileH *pFileH = (STsdbFileH *)calloc(1, sizeof(STsdbFileH) + sizeof(SFileGroup) * maxFiles);
|
||||
|
@ -50,10 +51,17 @@ STsdbFileH *tsdbInitFileH(char *dataDir, int maxFiles) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
struct dirent *dp;
|
||||
struct dirent *dp = NULL;
|
||||
int fid = 0;
|
||||
SFileGroup fGroup = {0};
|
||||
while ((dp = readdir(dir)) != NULL) {
|
||||
if (strncmp(dp->d_name, ".", 1) == 0 || strncmp(dp->d_name, "..", 1) == 0) continue;
|
||||
// TODO
|
||||
int fid = 0;
|
||||
sscanf(dp->d_name, "f%d", &fid);
|
||||
if (tsdbOpenFGroup(pFileH, dataDir, fid) < 0) {
|
||||
break;
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
||||
return pFileH;
|
||||
|
@ -61,6 +69,30 @@ STsdbFileH *tsdbInitFileH(char *dataDir, int maxFiles) {
|
|||
|
||||
void tsdbCloseFileH(STsdbFileH *pFileH) { free(pFileH); }
|
||||
|
||||
static int tsdbInitFile(char *dataDir, int fid, char *suffix, SFile *pFile) {
|
||||
tsdbGetFileName(dataDir, fid, suffix, pFile->fname);
|
||||
if (access(pFile->fname, F_OK|R_OK|W_OK) < 0) return -1;
|
||||
pFile->fd = -1;
|
||||
// TODO: recover the file info
|
||||
// pFile->info = {0};
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tsdbOpenFGroup(STsdbFileH *pFileH, char *dataDir, int fid) {
|
||||
if (tsdbSearchFGroup(pFileH, fid) != NULL) return 0;
|
||||
|
||||
char fname[128] = "\0";
|
||||
SFileGroup fGroup = {0};
|
||||
fGroup.fileId = fid;
|
||||
|
||||
for (int type = TSDB_FILE_TYPE_HEAD; type < TSDB_FILE_TYPE_MAX; type++) {
|
||||
if (tsdbInitFile(dataDir, fid, tsdbFileSuffix[type], &fGroup.files[type]) < 0) return -1;
|
||||
}
|
||||
pFileH->fGroup[pFileH->numOfFGroups++] = fGroup;
|
||||
qsort((void *)(pFileH->fGroup), pFileH->numOfFGroups, sizeof(SFileGroup), compFGroup);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tsdbCreateFGroup(STsdbFileH *pFileH, char *dataDir, int fid, int maxTables) {
|
||||
if (pFileH->numOfFGroups >= pFileH->maxFGroups) return -1;
|
||||
|
||||
|
|
|
@ -237,6 +237,7 @@ int32_t tsdbDropRepo(tsdb_repo_t *repo) {
|
|||
* @return a TSDB repository handle on success, NULL for failure and the error number is set
|
||||
*/
|
||||
tsdb_repo_t *tsdbOpenRepo(char *tsdbDir) {
|
||||
char dataDir[128] = "\0";
|
||||
if (access(tsdbDir, F_OK | W_OK | R_OK) < 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
@ -265,6 +266,16 @@ tsdb_repo_t *tsdbOpenRepo(char *tsdbDir) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
tsdbGetDataDirName(pRepo, dataDir);
|
||||
pRepo->tsdbFileH = tsdbInitFileH(dataDir, pRepo->config.maxTables);
|
||||
if (pRepo->tsdbFileH == NULL) {
|
||||
tsdbFreeCache(pRepo->tsdbCache);
|
||||
tsdbFreeMeta(pRepo->tsdbMeta);
|
||||
free(pRepo->rootDir);
|
||||
free(pRepo);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pRepo->state = TSDB_REPO_STATE_ACTIVE;
|
||||
|
||||
return (tsdb_repo_t *)pRepo;
|
||||
|
|
|
@ -49,7 +49,8 @@ TEST(TsdbTest, DISABLED_tableEncodeDecode) {
|
|||
ASSERT_EQ(memcmp(pTable->schema, tTable->schema, sizeof(STSchema) + sizeof(STColumn) * nCols), 0);
|
||||
}
|
||||
|
||||
TEST(TsdbTest, createRepo) {
|
||||
TEST(TsdbTest, DISABLED_createRepo) {
|
||||
// TEST(TsdbTest, createRepo) {
|
||||
STsdbCfg config;
|
||||
|
||||
// 1. Create a tsdb repository
|
||||
|
@ -78,7 +79,7 @@ TEST(TsdbTest, createRepo) {
|
|||
tsdbCreateTable(pRepo, &tCfg);
|
||||
|
||||
// // 3. Loop to write some simple data
|
||||
int nRows = 1000000;
|
||||
int nRows = 10000000;
|
||||
int rowsPerSubmit = 10;
|
||||
int64_t start_time = 1584081000000;
|
||||
|
||||
|
@ -129,13 +130,17 @@ TEST(TsdbTest, createRepo) {
|
|||
|
||||
double etime = getCurTime();
|
||||
|
||||
void *ptr = malloc(150000);
|
||||
free(ptr);
|
||||
|
||||
printf("Spent %f seconds to write %d records\n", etime - stime, nRows);
|
||||
|
||||
tsdbCloseRepo(pRepo);
|
||||
|
||||
}
|
||||
|
||||
TEST(TsdbTest, DISABLED_openRepo) {
|
||||
// TEST(TsdbTest, DISABLED_openRepo) {
|
||||
TEST(TsdbTest, openRepo) {
|
||||
tsdb_repo_t *pRepo = tsdbOpenRepo("/home/ubuntu/work/ttest/vnode0");
|
||||
ASSERT_NE(pRepo, nullptr);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue