From 7cc7d35be459a99495905a4a92855b8612303cfb Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 16 May 2023 11:09:15 +0800 Subject: [PATCH] more code --- .../dnode/vnode/src/tsdb/dev/inc/tsdbFSet.h | 2 +- .../dnode/vnode/src/tsdb/dev/inc/tsdbFile.h | 2 +- source/dnode/vnode/src/tsdb/dev/tsdbFS.c | 35 ++++++---------- source/dnode/vnode/src/tsdb/dev/tsdbFSet.c | 41 +++++++++++++++++-- source/dnode/vnode/src/tsdb/dev/tsdbFile.c | 26 ++++++------ 5 files changed, 65 insertions(+), 41 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/dev/inc/tsdbFSet.h b/source/dnode/vnode/src/tsdb/dev/inc/tsdbFSet.h index e42a7cab8f..c13f48ae4b 100644 --- a/source/dnode/vnode/src/tsdb/dev/inc/tsdbFSet.h +++ b/source/dnode/vnode/src/tsdb/dev/inc/tsdbFSet.h @@ -34,7 +34,7 @@ typedef enum { } tsdb_fop_t; int32_t tsdbFileSetToJson(const STFileSet *fset, cJSON *json); -int32_t tsdbFileSetFromJson(const cJSON *json, STFileSet *fset); +int32_t tsdbJsonToFileSet(const cJSON *json, STFileSet *fset); int32_t tsdbFileSetInit(STFileSet *pSet); int32_t tsdbFileSetClear(STFileSet *pSet); diff --git a/source/dnode/vnode/src/tsdb/dev/inc/tsdbFile.h b/source/dnode/vnode/src/tsdb/dev/inc/tsdbFile.h index 7fa35309a0..dc4b0505d8 100644 --- a/source/dnode/vnode/src/tsdb/dev/inc/tsdbFile.h +++ b/source/dnode/vnode/src/tsdb/dev/inc/tsdbFile.h @@ -37,7 +37,7 @@ typedef enum { #define TSDB_FTYPE_MAX (TSDB_FTYPE_TOMB + 1) int32_t tsdbTFileToJson(const STFile *f, cJSON *json); -int32_t tsdbTFileFromJson(const cJSON *json, tsdb_ftype_t ftype, STFile **f); +int32_t tsdbJsonToTFile(const cJSON *json, tsdb_ftype_t ftype, STFile *f); // create/destroy int32_t tsdbTFileCreate(const STFile *pFile, STFile **f); diff --git a/source/dnode/vnode/src/tsdb/dev/tsdbFS.c b/source/dnode/vnode/src/tsdb/dev/tsdbFS.c index 0b6f368662..d9a03b4be7 100644 --- a/source/dnode/vnode/src/tsdb/dev/tsdbFS.c +++ b/source/dnode/vnode/src/tsdb/dev/tsdbFS.c @@ -111,7 +111,7 @@ static int32_t save_json(const cJSON *json, const char *fname) { goto _exit; } - if (taosWriteFile(fp, data, strlen(data) + 1) < 0) { + if (taosWriteFile(fp, data, strlen(data)) < 0) { code = TAOS_SYSTEM_ERROR(code); goto _exit; } @@ -130,7 +130,7 @@ _exit: static int32_t load_json(const char *fname, cJSON **json) { int32_t code = 0; - void *data = NULL; + char *data = NULL; TdFilePtr fp = taosOpenFile(fname, TD_FILE_READ); if (fp == NULL) return TAOS_SYSTEM_ERROR(code); @@ -141,7 +141,7 @@ static int32_t load_json(const char *fname, cJSON **json) { goto _exit; } - data = taosMemoryMalloc(size); + data = taosMemoryMalloc(size + 1); if (data == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; goto _exit; @@ -151,6 +151,7 @@ static int32_t load_json(const char *fname, cJSON **json) { code = TAOS_SYSTEM_ERROR(code); goto _exit; } + data[size] = '\0'; json[0] = cJSON_Parse(data); if (json[0] == NULL) { @@ -170,7 +171,7 @@ static int32_t save_fs(SArray *aTFileSet, const char *fname) { int32_t lino = 0; cJSON *json = cJSON_CreateObject(); - if (json == NULL) return TSDB_CODE_OUT_OF_MEMORY; + if (!json) return TSDB_CODE_OUT_OF_MEMORY; // fmtv if (cJSON_AddNumberToObject(json, "fmtv", 1) == NULL) { @@ -180,9 +181,7 @@ static int32_t save_fs(SArray *aTFileSet, const char *fname) { // fset cJSON *ajson = cJSON_AddArrayToObject(json, "fset"); - if (ajson == NULL) { - TSDB_CHECK_CODE(code = TSDB_CODE_OUT_OF_MEMORY, lino, _exit); - } + if (!ajson) TSDB_CHECK_CODE(code = TSDB_CODE_OUT_OF_MEMORY, lino, _exit); for (int32_t i = 0; i < taosArrayGetSize(aTFileSet); i++) { STFileSet *pFileSet = (STFileSet *)taosArrayGet(aTFileSet, i); cJSON *item; @@ -206,7 +205,7 @@ _exit: return code; } -static int32_t load_fs(const char *fname, SArray *aTFileSet, int64_t *eid) { +static int32_t load_fs(const char *fname, SArray *aTFileSet) { int32_t code = 0; int32_t lino = 0; @@ -228,25 +227,15 @@ static int32_t load_fs(const char *fname, SArray *aTFileSet, int64_t *eid) { TSDB_CHECK_CODE(code = TSDB_CODE_FILE_CORRUPTED, lino, _exit); } - /* eid */ - item = cJSON_GetObjectItem(json, "eid"); - if (cJSON_IsNumber(item)) { - eid[0] = item->valuedouble; - } else { - TSDB_CHECK_CODE(code = TSDB_CODE_FILE_CORRUPTED, lino, _exit); - } - /* fset */ item = cJSON_GetObjectItem(json, "fset"); if (cJSON_IsArray(item)) { const cJSON *titem; cJSON_ArrayForEach(titem, item) { - STFileSet *pFileSet; - if ((pFileSet = taosArrayReserve(aTFileSet, 1)) == NULL) { - TSDB_CHECK_CODE(code = TSDB_CODE_OUT_OF_MEMORY, lino, _exit); - } + STFileSet *fset = taosArrayReserve(aTFileSet, 1); + if (!fset) TSDB_CHECK_CODE(code = TSDB_CODE_OUT_OF_MEMORY, lino, _exit); - code = tsdbFileSetFromJson(titem, pFileSet); + code = tsdbJsonToFileSet(titem, fset); TSDB_CHECK_CODE(code, lino, _exit); } } else { @@ -359,7 +348,7 @@ static int32_t open_fs(STFileSystem *fs, int8_t rollback) { current_fname(pTsdb, mCurrent, TSDB_FCURRENT_M); if (taosCheckExistFile(fCurrent)) { // current.json exists - code = load_fs(fCurrent, fs->cstate, &fs->neid); + code = load_fs(fCurrent, fs->cstate); TSDB_CHECK_CODE(code, lino, _exit); if (taosCheckExistFile(cCurrent)) { @@ -370,7 +359,7 @@ static int32_t open_fs(STFileSystem *fs, int8_t rollback) { code = abort_edit(fs); TSDB_CHECK_CODE(code, lino, _exit); } else { - code = load_fs(cCurrent, fs->nstate, &fs->eid); + code = load_fs(cCurrent, fs->nstate); TSDB_CHECK_CODE(code, lino, _exit); code = commit_edit(fs); diff --git a/source/dnode/vnode/src/tsdb/dev/tsdbFSet.c b/source/dnode/vnode/src/tsdb/dev/tsdbFSet.c index f9f20462a2..01b9012b78 100644 --- a/source/dnode/vnode/src/tsdb/dev/tsdbFSet.c +++ b/source/dnode/vnode/src/tsdb/dev/tsdbFSet.c @@ -56,6 +56,29 @@ static int32_t add_file(STFileSet *fset, STFile *f) { return 0; } +static int32_t stt_lvl_cmpr(const SRBTreeNode *n1, const SRBTreeNode *n2) { + SSttLvl *lvl1 = TCONTAINER_OF(n1, SSttLvl, rbtn); + SSttLvl *lvl2 = TCONTAINER_OF(n2, SSttLvl, rbtn); + + if (lvl1->lvl < lvl2->lvl) { + return -1; + } else if (lvl1->lvl > lvl2->lvl) { + return 1; + } + return 0; +} + +static int32_t fset_init(STFileSet *fset) { + memset(fset, 0, sizeof(*fset)); + tRBTreeCreate(&fset->lvlTree, stt_lvl_cmpr); + return 0; +} + +static int32_t fset_clear(STFileSet *fset) { + // TODO + return 0; +} + int32_t tsdbFileSetToJson(const STFileSet *fset, cJSON *json) { int32_t code = 0; @@ -85,9 +108,11 @@ int32_t tsdbFileSetToJson(const STFileSet *fset, cJSON *json) { return 0; } -int32_t tsdbFileSetFromJson(const cJSON *json, STFileSet *fset) { +int32_t tsdbJsonToFileSet(const cJSON *json, STFileSet *fset) { const cJSON *item; + fset_init(fset); + /* fid */ item = cJSON_GetObjectItem(json, "fid"); if (cJSON_IsNumber(item)) { @@ -96,9 +121,19 @@ int32_t tsdbFileSetFromJson(const cJSON *json, STFileSet *fset) { return TSDB_CODE_FILE_CORRUPTED; } + int32_t code; for (int32_t ftype = TSDB_FTYPE_MIN; ftype < TSDB_FTYPE_MAX; ++ftype) { - // int32_t code = tsdbTFileFromJson(json, ftype, &fset->farr[ftype]->f); - // if (code) return code; + STFile tf; + code = tsdbJsonToTFile(json, ftype, &tf); + if (code == TSDB_CODE_NOT_FOUND) { + continue; + } else if (code) { + return code; + } else { + // TODO + // code = tsdbFileObjCreate(&tf, &fset->farr[ftype]); + // if (code) return code; + } } // each level diff --git a/source/dnode/vnode/src/tsdb/dev/tsdbFile.c b/source/dnode/vnode/src/tsdb/dev/tsdbFile.c index 2b6375a30e..470e087c89 100644 --- a/source/dnode/vnode/src/tsdb/dev/tsdbFile.c +++ b/source/dnode/vnode/src/tsdb/dev/tsdbFile.c @@ -212,23 +212,23 @@ int32_t tsdbTFileToJson(const STFile *file, cJSON *json) { } } -int32_t tsdbTFileFromJson(const cJSON *json, tsdb_ftype_t ftype, STFile **f) { - const cJSON *item = cJSON_GetObjectItem(json, g_tfile_info[ftype].suffix); - if (cJSON_IsObject(item)) { - f[0] = (STFile *)taosMemoryMalloc(sizeof(*f[0])); - if (f[0] == NULL) return TSDB_CODE_OUT_OF_MEMORY; +int32_t tsdbJsonToTFile(const cJSON *json, tsdb_ftype_t ftype, STFile *f) { + f[0] = (STFile){.type = ftype}; - int32_t code = g_tfile_info[ftype].from_json(item, f[0]); - if (code) { - taosMemoryFree(f[0]); - f[0] = NULL; - return code; - } - tsdbTFileInit(NULL /* TODO */, f[0]); + if (ftype == TSDB_FTYPE_STT) { + int32_t code = g_tfile_info[ftype].from_json(json, f); + if (code) return code; } else { - f[0] = NULL; + const cJSON *item = cJSON_GetObjectItem(json, g_tfile_info[ftype].suffix); + if (cJSON_IsObject(item)) { + int32_t code = g_tfile_info[ftype].from_json(item, f); + if (code) return code; + } else { + return TSDB_CODE_NOT_FOUND; + } } + // TODO: tsdbTFileInit(NULL, f); return 0; }