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 tsdbGetFileName(char *dataDir, int fileId, char *suffix, char *fname);
|
||||||
static int tsdbWriteFileHead(SFile *pFile);
|
static int tsdbWriteFileHead(SFile *pFile);
|
||||||
static int tsdbWriteHeadFileIdx(SFile *pFile, int maxTables);
|
static int tsdbWriteHeadFileIdx(SFile *pFile, int maxTables);
|
||||||
|
static int tsdbOpenFGroup(STsdbFileH *pFileH, char *dataDir, int fid);
|
||||||
|
|
||||||
STsdbFileH *tsdbInitFileH(char *dataDir, int maxFiles) {
|
STsdbFileH *tsdbInitFileH(char *dataDir, int maxFiles) {
|
||||||
STsdbFileH *pFileH = (STsdbFileH *)calloc(1, sizeof(STsdbFileH) + sizeof(SFileGroup) * maxFiles);
|
STsdbFileH *pFileH = (STsdbFileH *)calloc(1, sizeof(STsdbFileH) + sizeof(SFileGroup) * maxFiles);
|
||||||
|
@ -50,10 +51,17 @@ STsdbFileH *tsdbInitFileH(char *dataDir, int maxFiles) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct dirent *dp;
|
struct dirent *dp = NULL;
|
||||||
|
int fid = 0;
|
||||||
|
SFileGroup fGroup = {0};
|
||||||
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, "..", 1) == 0) continue;
|
||||||
// TODO
|
int fid = 0;
|
||||||
|
sscanf(dp->d_name, "f%d", &fid);
|
||||||
|
if (tsdbOpenFGroup(pFileH, dataDir, fid) < 0) {
|
||||||
|
break;
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return pFileH;
|
return pFileH;
|
||||||
|
@ -61,6 +69,30 @@ STsdbFileH *tsdbInitFileH(char *dataDir, int maxFiles) {
|
||||||
|
|
||||||
void tsdbCloseFileH(STsdbFileH *pFileH) { free(pFileH); }
|
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) {
|
int tsdbCreateFGroup(STsdbFileH *pFileH, char *dataDir, int fid, int maxTables) {
|
||||||
if (pFileH->numOfFGroups >= pFileH->maxFGroups) return -1;
|
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
|
* @return a TSDB repository handle on success, NULL for failure and the error number is set
|
||||||
*/
|
*/
|
||||||
tsdb_repo_t *tsdbOpenRepo(char *tsdbDir) {
|
tsdb_repo_t *tsdbOpenRepo(char *tsdbDir) {
|
||||||
|
char dataDir[128] = "\0";
|
||||||
if (access(tsdbDir, F_OK | W_OK | R_OK) < 0) {
|
if (access(tsdbDir, F_OK | W_OK | R_OK) < 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -265,6 +266,16 @@ tsdb_repo_t *tsdbOpenRepo(char *tsdbDir) {
|
||||||
return NULL;
|
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;
|
pRepo->state = TSDB_REPO_STATE_ACTIVE;
|
||||||
|
|
||||||
return (tsdb_repo_t *)pRepo;
|
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);
|
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;
|
STsdbCfg config;
|
||||||
|
|
||||||
// 1. Create a tsdb repository
|
// 1. Create a tsdb repository
|
||||||
|
@ -78,7 +79,7 @@ TEST(TsdbTest, createRepo) {
|
||||||
tsdbCreateTable(pRepo, &tCfg);
|
tsdbCreateTable(pRepo, &tCfg);
|
||||||
|
|
||||||
// // 3. Loop to write some simple data
|
// // 3. Loop to write some simple data
|
||||||
int nRows = 1000000;
|
int nRows = 10000000;
|
||||||
int rowsPerSubmit = 10;
|
int rowsPerSubmit = 10;
|
||||||
int64_t start_time = 1584081000000;
|
int64_t start_time = 1584081000000;
|
||||||
|
|
||||||
|
@ -129,13 +130,17 @@ TEST(TsdbTest, createRepo) {
|
||||||
|
|
||||||
double etime = getCurTime();
|
double etime = getCurTime();
|
||||||
|
|
||||||
|
void *ptr = malloc(150000);
|
||||||
|
free(ptr);
|
||||||
|
|
||||||
printf("Spent %f seconds to write %d records\n", etime - stime, nRows);
|
printf("Spent %f seconds to write %d records\n", etime - stime, nRows);
|
||||||
|
|
||||||
tsdbCloseRepo(pRepo);
|
tsdbCloseRepo(pRepo);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(TsdbTest, DISABLED_openRepo) {
|
// TEST(TsdbTest, DISABLED_openRepo) {
|
||||||
|
TEST(TsdbTest, openRepo) {
|
||||||
tsdb_repo_t *pRepo = tsdbOpenRepo("/home/ubuntu/work/ttest/vnode0");
|
tsdb_repo_t *pRepo = tsdbOpenRepo("/home/ubuntu/work/ttest/vnode0");
|
||||||
ASSERT_NE(pRepo, nullptr);
|
ASSERT_NE(pRepo, nullptr);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue