more code
This commit is contained in:
parent
e731a08f2d
commit
8b83c85b0c
|
@ -51,7 +51,7 @@ static FORCE_INLINE int32_t tarray2_make_room(void *arg, // array
|
|||
int32_t sz // size of element
|
||||
) {
|
||||
TARRAY2(void) *a = arg;
|
||||
int32_t capacity = a->capacity ? (a->capacity << 1) : TARRAY2_MIN_SIZE;
|
||||
int32_t capacity = (a->capacity > 0) ? (a->capacity << 1) : TARRAY2_MIN_SIZE;
|
||||
while (capacity < es) {
|
||||
capacity <<= 1;
|
||||
}
|
||||
|
@ -78,7 +78,7 @@ static FORCE_INLINE int32_t tarray2_make_room(void *arg, // array
|
|||
|
||||
#define TARRAY2_CLEAR(a, cb) \
|
||||
do { \
|
||||
if (cb) { \
|
||||
if ((cb) && (a)->size > 0) { \
|
||||
TArray2Cb cb_ = (TArray2Cb)(cb); \
|
||||
for (int32_t i = 0; i < (a)->size; ++i) { \
|
||||
cb_((a)->data + i); \
|
||||
|
@ -103,7 +103,7 @@ static FORCE_INLINE int32_t tarray2_make_room(void *arg, // array
|
|||
if ((a)->size > (idx)) { \
|
||||
memmove((a)->data + (idx) + 1, (a)->data + (idx), sizeof(typeof((a)->data[0])) * ((a)->size - (idx))); \
|
||||
} \
|
||||
(a)->data[(idx)] = e; \
|
||||
(a)->data[(idx)] = (e); \
|
||||
(a)->size++; \
|
||||
} \
|
||||
__ret; \
|
||||
|
|
|
@ -24,6 +24,7 @@ extern "C" {
|
|||
|
||||
/* Exposed Handle */
|
||||
typedef struct STFileSystem STFileSystem;
|
||||
typedef TARRAY2(STFileSet *) TFileSetArray;
|
||||
|
||||
typedef enum {
|
||||
TSDB_FEDIT_COMMIT = 1, //
|
||||
|
|
|
@ -25,7 +25,7 @@ extern "C" {
|
|||
typedef struct STFileSet STFileSet;
|
||||
typedef struct STFileOp STFileOp;
|
||||
typedef struct SSttLvl SSttLvl;
|
||||
typedef TARRAY2(STFileSet *) TFileSetArray;
|
||||
typedef TARRAY2(STFileObj *) TFileObjArray;
|
||||
typedef TARRAY2(SSttLvl *) TSttLvlArray;
|
||||
typedef TARRAY2(STFileOp) TFileOpArray;
|
||||
|
||||
|
@ -37,17 +37,20 @@ typedef enum {
|
|||
TSDB_FOP_TRUNCATE,
|
||||
} tsdb_fop_t;
|
||||
|
||||
// init/clear
|
||||
int32_t tsdbTFileSetInit(int32_t fid, STFileSet **fset);
|
||||
int32_t tsdbTFileSetInitEx(const STFileSet *fset1, STFileSet **fset2);
|
||||
int32_t tsdbTFileSetInitEx(STsdb *pTsdb, const STFileSet *fset1, STFileSet **fset);
|
||||
int32_t tsdbTFileSetClear(STFileSet **fset);
|
||||
|
||||
// to/from json
|
||||
int32_t tsdbTFileSetToJson(const STFileSet *fset, cJSON *json);
|
||||
int32_t tsdbJsonToTFileSet(const cJSON *json, STFileSet **fset);
|
||||
|
||||
int32_t tsdbJsonToTFileSet(STsdb *pTsdb, const cJSON *json, STFileSet **fset);
|
||||
// cmpr
|
||||
int32_t tsdbTFileSetCmprFn(const STFileSet **fset1, const STFileSet **fset2);
|
||||
|
||||
// edit
|
||||
int32_t tsdbTFileSetEdit(STFileSet *fset, const STFileOp *op);
|
||||
int32_t tsdbTFileSetEditEx(const STFileSet *fset1, STFileSet *fset);
|
||||
// max commit id
|
||||
int64_t tsdbTFileSetMaxCid(const STFileSet *fset);
|
||||
|
||||
const SSttLvl *tsdbTFileSetGetLvl(const STFileSet *fset, int32_t level);
|
||||
|
||||
|
|
|
@ -24,7 +24,6 @@ extern "C" {
|
|||
|
||||
typedef struct STFile STFile;
|
||||
typedef struct STFileObj STFileObj;
|
||||
typedef TARRAY2(STFileObj *) TFileObjArray;
|
||||
|
||||
typedef enum {
|
||||
TSDB_FTYPE_HEAD = 0, // .head
|
||||
|
@ -34,15 +33,21 @@ typedef enum {
|
|||
TSDB_FTYPE_STT = TSDB_FTYPE_TOMB + 2, // .stt
|
||||
} tsdb_ftype_t;
|
||||
|
||||
enum {
|
||||
TSDB_FSTATE_EXIST = 1,
|
||||
TSDB_FSTATE_REMOVED,
|
||||
};
|
||||
|
||||
#define TSDB_FTYPE_MIN TSDB_FTYPE_HEAD
|
||||
#define TSDB_FTYPE_MAX (TSDB_FTYPE_TOMB + 1)
|
||||
|
||||
// STFile
|
||||
int32_t tsdbTFileToJson(const STFile *f, cJSON *json);
|
||||
int32_t tsdbJsonToTFile(const cJSON *json, tsdb_ftype_t ftype, STFile *f);
|
||||
int32_t tsdbTFileName(STsdb *pTsdb, const STFile *f, char fname[]);
|
||||
|
||||
// STFileObj
|
||||
int32_t tsdbTFileObjInit(const STFile *f, STFileObj **fobj);
|
||||
int32_t tsdbTFileObjInit(STsdb *pTsdb, const STFile *f, STFileObj **fobj);
|
||||
int32_t tsdbTFileObjRef(STFileObj *fobj);
|
||||
int32_t tsdbTFileObjUnref(STFileObj *fobj);
|
||||
int32_t tsdbTFileRemove(STFileObj *fobj);
|
||||
|
@ -61,11 +66,6 @@ struct STFile {
|
|||
};
|
||||
};
|
||||
|
||||
enum {
|
||||
TSDB_FSTATE_EXIST = 1,
|
||||
TSDB_FSTATE_REMOVED,
|
||||
};
|
||||
|
||||
struct STFileObj {
|
||||
TdThreadMutex mutex;
|
||||
STFile f;
|
||||
|
|
|
@ -28,7 +28,7 @@ typedef struct {
|
|||
int8_t sttTrigger;
|
||||
|
||||
SArray *aTbDataP; // SArray<STbData *>
|
||||
SArray *aFileOp; // SArray<STFileOp>
|
||||
TFileOpArray opArray;
|
||||
int64_t eid; // edit id
|
||||
|
||||
// context
|
||||
|
@ -275,14 +275,15 @@ static int32_t commit_fset_end(SCommitter *pCommitter) {
|
|||
|
||||
if (pCommitter->pWriter == NULL) return 0;
|
||||
|
||||
struct STFileOp *pFileOp = taosArrayReserve(pCommitter->aFileOp, 1);
|
||||
if (pFileOp == NULL) {
|
||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||
TSDB_CHECK_CODE(code, lino, _exit);
|
||||
}
|
||||
// TODO
|
||||
// struct STFileOp *pFileOp = taosArrayReserve(pCommitter->aFileOp, 1);
|
||||
// if (pFileOp == NULL) {
|
||||
// code = TSDB_CODE_OUT_OF_MEMORY;
|
||||
// TSDB_CHECK_CODE(code, lino, _exit);
|
||||
// }
|
||||
|
||||
code = tsdbSttFWriterClose(&pCommitter->pWriter, 0, pFileOp);
|
||||
TSDB_CHECK_CODE(code, lino, _exit);
|
||||
// code = tsdbSttFWriterClose(&pCommitter->pWriter, 0, pFileOp);
|
||||
// TSDB_CHECK_CODE(code, lino, _exit);
|
||||
|
||||
_exit:
|
||||
if (code) {
|
||||
|
@ -337,12 +338,11 @@ static int32_t open_committer(STsdb *pTsdb, SCommitInfo *pInfo, SCommitter *pCom
|
|||
pCommitter->sttTrigger = 1; // TODO
|
||||
|
||||
pCommitter->aTbDataP = tsdbMemTableGetTbDataArray(pTsdb->imem);
|
||||
pCommitter->aFileOp = taosArrayInit(16, sizeof(STFileOp));
|
||||
if (pCommitter->aTbDataP == NULL || pCommitter->aFileOp == NULL) {
|
||||
if (pCommitter->aTbDataP == NULL) {
|
||||
taosArrayDestroy(pCommitter->aTbDataP);
|
||||
taosArrayDestroy(pCommitter->aFileOp);
|
||||
TSDB_CHECK_CODE(code = TSDB_CODE_OUT_OF_MEMORY, lino, _exit);
|
||||
}
|
||||
TARRAY2_INIT(&pCommitter->opArray);
|
||||
tsdbFSAllocEid(pTsdb->pFS, &pCommitter->eid);
|
||||
|
||||
// start loop
|
||||
|
@ -363,7 +363,7 @@ static int32_t close_committer(SCommitter *pCommiter, int32_t eno) {
|
|||
int32_t vid = TD_VID(pCommiter->pTsdb->pVnode);
|
||||
|
||||
if (eno == 0) {
|
||||
code = tsdbFSEditBegin(pCommiter->pTsdb->pFS, pCommiter->aFileOp, TSDB_FEDIT_COMMIT);
|
||||
code = tsdbFSEditBegin(pCommiter->pTsdb->pFS, NULL /* TODO */, TSDB_FEDIT_COMMIT);
|
||||
TSDB_CHECK_CODE(code, lino, _exit);
|
||||
} else {
|
||||
// TODO
|
||||
|
@ -372,7 +372,7 @@ static int32_t close_committer(SCommitter *pCommiter, int32_t eno) {
|
|||
|
||||
ASSERT(pCommiter->pWriter == NULL);
|
||||
taosArrayDestroy(pCommiter->aTbDataP);
|
||||
taosArrayDestroy(pCommiter->aFileOp);
|
||||
TARRAY2_CLEAR_FREE(&pCommiter->opArray, NULL);
|
||||
|
||||
_exit:
|
||||
if (code) {
|
||||
|
|
|
@ -186,7 +186,7 @@ _exit:
|
|||
return code;
|
||||
}
|
||||
|
||||
static int32_t load_fs(const char *fname, TFileSetArray *arr) {
|
||||
static int32_t load_fs(STsdb *pTsdb, const char *fname, TFileSetArray *arr) {
|
||||
int32_t code = 0;
|
||||
int32_t lino = 0;
|
||||
|
||||
|
@ -198,23 +198,23 @@ static int32_t load_fs(const char *fname, TFileSetArray *arr) {
|
|||
TSDB_CHECK_CODE(code, lino, _exit);
|
||||
|
||||
// parse json
|
||||
const cJSON *item;
|
||||
const cJSON *item1;
|
||||
|
||||
/* fmtv */
|
||||
item = cJSON_GetObjectItem(json, "fmtv");
|
||||
if (cJSON_IsNumber(item)) {
|
||||
ASSERT(item->valuedouble == 1);
|
||||
item1 = cJSON_GetObjectItem(json, "fmtv");
|
||||
if (cJSON_IsNumber(item1)) {
|
||||
ASSERT(item1->valuedouble == 1);
|
||||
} 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) {
|
||||
item1 = cJSON_GetObjectItem(json, "fset");
|
||||
if (cJSON_IsArray(item1)) {
|
||||
const cJSON *item2;
|
||||
cJSON_ArrayForEach(item2, item1) {
|
||||
STFileSet *fset;
|
||||
code = tsdbJsonToTFileSet(titem, &fset);
|
||||
code = tsdbJsonToTFileSet(pTsdb, item2, &fset);
|
||||
TSDB_CHECK_CODE(code, lino, _exit);
|
||||
|
||||
code = TARRAY2_APPEND(arr, fset);
|
||||
|
@ -257,7 +257,7 @@ static int32_t apply_commit(STFileSystem *fs) {
|
|||
n1 = TARRAY2_SIZE(&fs->cstate);
|
||||
} else if (fset1->fid > fset2->fid) {
|
||||
// create new file set with fid of fset2->fid
|
||||
code = tsdbTFileSetInitEx(fset2, &fset1);
|
||||
code = tsdbTFileSetInitEx(fs->pTsdb, fset2, &fset1);
|
||||
if (code) return code;
|
||||
code = TARRAY2_SORT_INSERT(&fs->cstate, fset1, tsdbTFileSetCmprFn);
|
||||
if (code) return code;
|
||||
|
@ -277,7 +277,7 @@ static int32_t apply_commit(STFileSystem *fs) {
|
|||
n1 = TARRAY2_SIZE(&fs->cstate);
|
||||
} else {
|
||||
// create new file set with fid of fset2->fid
|
||||
code = tsdbTFileSetInitEx(fset2, &fset1);
|
||||
code = tsdbTFileSetInitEx(fs->pTsdb, fset2, &fset1);
|
||||
if (code) return code;
|
||||
code = TARRAY2_SORT_INSERT(&fs->cstate, fset1, tsdbTFileSetCmprFn);
|
||||
if (code) return code;
|
||||
|
@ -356,7 +356,13 @@ _exit:
|
|||
return code;
|
||||
}
|
||||
|
||||
static int32_t scan_and_fix_fs(STFileSystem *pFS) {
|
||||
static int32_t tsdbFSScanAndFix(STFileSystem *fs) {
|
||||
fs->neid = 0;
|
||||
|
||||
// get max commit id
|
||||
const STFileSet *fset;
|
||||
TARRAY2_FOREACH(&fs->cstate, fset) { fs->neid = TMAX(fs->neid, tsdbTFileSetMaxCid(fset)); }
|
||||
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
@ -366,17 +372,20 @@ static int32_t update_fs_if_needed(STFileSystem *pFS) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int32_t tsdbFSDupState(const TFileSetArray *src, TFileSetArray *dst) {
|
||||
static int32_t tsdbFSDupState(STFileSystem *fs) {
|
||||
int32_t code;
|
||||
|
||||
const TFileSetArray *src = &fs->cstate;
|
||||
TFileSetArray *dst = &fs->nstate;
|
||||
|
||||
TARRAY2_CLEAR(dst, tsdbTFileSetClear);
|
||||
|
||||
const STFileSet *fset1;
|
||||
TARRAY2_FOREACH(src, fset1) {
|
||||
STFileSet *fset;
|
||||
|
||||
int32_t code = tsdbTFileSetInitEx(fset1, &fset);
|
||||
STFileSet *fset2;
|
||||
code = tsdbTFileSetInitEx(fs->pTsdb, fset1, &fset2);
|
||||
if (code) return code;
|
||||
|
||||
code = TARRAY2_APPEND(dst, fset);
|
||||
code = TARRAY2_APPEND(dst, fset2);
|
||||
if (code) return code;
|
||||
}
|
||||
|
||||
|
@ -400,7 +409,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);
|
||||
code = load_fs(pTsdb, fCurrent, &fs->cstate);
|
||||
TSDB_CHECK_CODE(code, lino, _exit);
|
||||
|
||||
if (taosCheckExistFile(cCurrent)) {
|
||||
|
@ -411,7 +420,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);
|
||||
code = load_fs(pTsdb, cCurrent, &fs->nstate);
|
||||
TSDB_CHECK_CODE(code, lino, _exit);
|
||||
|
||||
code = commit_edit(fs);
|
||||
|
@ -424,10 +433,10 @@ static int32_t open_fs(STFileSystem *fs, int8_t rollback) {
|
|||
TSDB_CHECK_CODE(code, lino, _exit);
|
||||
}
|
||||
|
||||
code = tsdbFSDupState(&fs->cstate, &fs->nstate);
|
||||
code = tsdbFSDupState(fs);
|
||||
TSDB_CHECK_CODE(code, lino, _exit);
|
||||
|
||||
code = scan_and_fix_fs(fs);
|
||||
code = tsdbFSScanAndFix(fs);
|
||||
TSDB_CHECK_CODE(code, lino, _exit);
|
||||
} else {
|
||||
code = save_fs(&fs->cstate, fCurrent);
|
||||
|
@ -443,8 +452,10 @@ _exit:
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int32_t close_file_system(STFileSystem *pFS) {
|
||||
ASSERTS(0, "TODO: Not implemented yet");
|
||||
static int32_t close_file_system(STFileSystem *fs) {
|
||||
TARRAY2_CLEAR(&fs->cstate, tsdbTFileSetClear);
|
||||
TARRAY2_CLEAR(&fs->nstate, tsdbTFileSetClear);
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -528,7 +539,6 @@ int32_t tsdbFSAllocEid(STFileSystem *pFS, int64_t *eid) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
// TODO: remove eid
|
||||
int32_t tsdbFSEditBegin(STFileSystem *fs, const SArray *aFileOp, EFEditT etype) {
|
||||
int32_t code = 0;
|
||||
int32_t lino;
|
||||
|
@ -579,8 +589,9 @@ int32_t tsdbFSEditAbort(STFileSystem *fs) {
|
|||
return code;
|
||||
}
|
||||
|
||||
int32_t tsdbFSGetFSet(STFileSystem *fs, int32_t fid, const STFileSet **ppFSet) {
|
||||
// STFileSet fset = {.fid = fid};
|
||||
// ppFSet[0] = taosArraySearch(fs->cstate, &fset, (__compar_fn_t)tsdbFSetCmprFn, TD_EQ);
|
||||
int32_t tsdbFSGetFSet(STFileSystem *fs, int32_t fid, const STFileSet **fset) {
|
||||
STFileSet tfset = {.fid = fid};
|
||||
fset[0] = &tfset;
|
||||
fset[0] = TARRAY2_SEARCH(&fs->cstate, fset, tsdbTFileSetCmprFn, TD_EQ);
|
||||
return 0;
|
||||
}
|
|
@ -16,9 +16,7 @@
|
|||
#include "inc/tsdbFSet.h"
|
||||
|
||||
static int32_t tsdbSttLvlInit(int32_t level, SSttLvl **lvl) {
|
||||
lvl[0] = taosMemoryMalloc(sizeof(SSttLvl));
|
||||
if (lvl[0] == NULL) return TSDB_CODE_OUT_OF_MEMORY;
|
||||
|
||||
if (!(lvl[0] = taosMemoryMalloc(sizeof(SSttLvl)))) return TSDB_CODE_OUT_OF_MEMORY;
|
||||
lvl[0]->level = level;
|
||||
TARRAY2_INIT(&lvl[0]->farr);
|
||||
return 0;
|
||||
|
@ -30,14 +28,14 @@ static int32_t tsdbSttLvlClear(SSttLvl **lvl) {
|
|||
lvl[0] = NULL;
|
||||
return 0;
|
||||
}
|
||||
static int32_t tsdbSttLvlInitEx(const SSttLvl *lvl1, SSttLvl **lvl) {
|
||||
static int32_t tsdbSttLvlInitEx(STsdb *pTsdb, const SSttLvl *lvl1, SSttLvl **lvl) {
|
||||
int32_t code = tsdbSttLvlInit(lvl1->level, lvl);
|
||||
if (code) return code;
|
||||
|
||||
const STFileObj *fobj1;
|
||||
TARRAY2_FOREACH(&lvl1->farr, fobj1) {
|
||||
STFileObj *fobj;
|
||||
code = tsdbTFileObjInit(&fobj1->f, &fobj);
|
||||
code = tsdbTFileObjInit(pTsdb, &fobj1->f, &fobj);
|
||||
if (code) {
|
||||
tsdbSttLvlClear(lvl);
|
||||
return code;
|
||||
|
@ -48,6 +46,12 @@ static int32_t tsdbSttLvlInitEx(const SSttLvl *lvl1, SSttLvl **lvl) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int32_t tsdbSttLvlCmprFn(const SSttLvl *lvl1, const SSttLvl *lvl2) {
|
||||
if (lvl1->level < lvl2->level) return -1;
|
||||
if (lvl1->level > lvl2->level) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int32_t tsdbSttLvlToJson(const SSttLvl *lvl, cJSON *json) {
|
||||
if (cJSON_AddNumberToObject(json, "level", lvl->level) == NULL) {
|
||||
return TSDB_CODE_OUT_OF_MEMORY;
|
||||
|
@ -68,7 +72,7 @@ static int32_t tsdbSttLvlToJson(const SSttLvl *lvl, cJSON *json) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int32_t tsdbJsonToSttLvl(const cJSON *json, SSttLvl **lvl) {
|
||||
static int32_t tsdbJsonToSttLvl(STsdb *pTsdb, const cJSON *json, SSttLvl **lvl) {
|
||||
const cJSON *item1, *item2;
|
||||
int32_t level;
|
||||
|
||||
|
@ -97,7 +101,7 @@ static int32_t tsdbJsonToSttLvl(const cJSON *json, SSttLvl **lvl) {
|
|||
}
|
||||
|
||||
STFileObj *fobj;
|
||||
code = tsdbTFileObjInit(&tf, &fobj);
|
||||
code = tsdbTFileObjInit(pTsdb, &tf, &fobj);
|
||||
if (code) {
|
||||
tsdbSttLvlClear(lvl);
|
||||
return code;
|
||||
|
@ -140,7 +144,7 @@ int32_t tsdbTFileSetToJson(const STFileSet *fset, cJSON *json) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int32_t tsdbJsonToTFileSet(const cJSON *json, STFileSet **fset) {
|
||||
int32_t tsdbJsonToTFileSet(STsdb *pTsdb, const cJSON *json, STFileSet **fset) {
|
||||
int32_t code;
|
||||
const cJSON *item1, *item2;
|
||||
int32_t fid;
|
||||
|
@ -164,6 +168,9 @@ int32_t tsdbJsonToTFileSet(const cJSON *json, STFileSet **fset) {
|
|||
} else if (code) {
|
||||
tsdbTFileSetClear(fset);
|
||||
return code;
|
||||
} else {
|
||||
code = tsdbTFileObjInit(pTsdb, &tf, &(*fset)->farr[ftype]);
|
||||
if (code) return code;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -172,7 +179,7 @@ int32_t tsdbJsonToTFileSet(const cJSON *json, STFileSet **fset) {
|
|||
if (cJSON_IsArray(item1)) {
|
||||
cJSON_ArrayForEach(item2, item1) {
|
||||
SSttLvl *lvl;
|
||||
code = tsdbJsonToSttLvl(item2, &lvl);
|
||||
code = tsdbJsonToSttLvl(pTsdb, item2, &lvl);
|
||||
if (code) {
|
||||
tsdbTFileSetClear(fset);
|
||||
return code;
|
||||
|
@ -223,14 +230,14 @@ int32_t tsdbTFileSetInit(int32_t fid, STFileSet **fset) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int32_t tsdbTFileSetInitEx(const STFileSet *fset1, STFileSet **fset) {
|
||||
int32_t tsdbTFileSetInitEx(STsdb *pTsdb, const STFileSet *fset1, STFileSet **fset) {
|
||||
int32_t code = tsdbTFileSetInit(fset1->fid, fset);
|
||||
if (code) return code;
|
||||
|
||||
for (int32_t ftype = TSDB_FTYPE_MIN; ftype < TSDB_FTYPE_MAX; ++ftype) {
|
||||
if (fset1->farr[ftype] == NULL) continue;
|
||||
|
||||
code = tsdbTFileObjInit(&fset1->farr[ftype]->f, &fset[0]->farr[ftype]);
|
||||
code = tsdbTFileObjInit(pTsdb, &fset1->farr[ftype]->f, &fset[0]->farr[ftype]);
|
||||
if (code) {
|
||||
tsdbTFileSetClear(fset);
|
||||
return code;
|
||||
|
@ -240,7 +247,7 @@ int32_t tsdbTFileSetInitEx(const STFileSet *fset1, STFileSet **fset) {
|
|||
const SSttLvl *lvl1;
|
||||
TARRAY2_FOREACH(&fset1->lvlArr, lvl1) {
|
||||
SSttLvl *lvl;
|
||||
code = tsdbSttLvlInitEx(lvl1, &lvl);
|
||||
code = tsdbSttLvlInitEx(pTsdb, lvl1, &lvl);
|
||||
if (code) {
|
||||
tsdbTFileSetClear(fset);
|
||||
return code;
|
||||
|
@ -269,11 +276,9 @@ int32_t tsdbTFileSetClear(STFileSet **fset) {
|
|||
}
|
||||
|
||||
const SSttLvl *tsdbTFileSetGetLvl(const STFileSet *fset, int32_t level) {
|
||||
// SSttLvl tlvl = {.level = level};
|
||||
// SRBTreeNode *node = tRBTreeGet(&fset->lvlTree, &tlvl.rbtn);
|
||||
// return node ? TCONTAINER_OF(node, SSttLvl, rbtn) : NULL;
|
||||
// TODO
|
||||
return NULL;
|
||||
SSttLvl tlvl = {.level = level};
|
||||
const SSttLvl *lvl = &tlvl;
|
||||
return TARRAY2_SEARCH(&fset->lvlArr, &lvl, tsdbSttLvlCmprFn, TD_EQ);
|
||||
}
|
||||
|
||||
int32_t tsdbTFileSetCmprFn(const STFileSet **fset1, const STFileSet **fset2) {
|
||||
|
@ -281,3 +286,17 @@ int32_t tsdbTFileSetCmprFn(const STFileSet **fset1, const STFileSet **fset2) {
|
|||
if (fset1[0]->fid > fset2[0]->fid) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int64_t tsdbTFileSetMaxCid(const STFileSet *fset) {
|
||||
int64_t maxCid = 0;
|
||||
for (tsdb_ftype_t ftype = TSDB_FTYPE_MIN; ftype < TSDB_FTYPE_MAX; ++ftype) {
|
||||
if (fset->farr[ftype] == NULL) continue;
|
||||
maxCid = TMAX(maxCid, fset->farr[ftype]->f.cid);
|
||||
}
|
||||
const SSttLvl *lvl;
|
||||
const STFileObj *fobj;
|
||||
TARRAY2_FOREACH(&fset->lvlArr, lvl) {
|
||||
TARRAY2_FOREACH(&lvl->farr, fobj) { maxCid = TMAX(maxCid, fobj->f.cid); }
|
||||
}
|
||||
return maxCid;
|
||||
}
|
|
@ -166,36 +166,6 @@ static int32_t stt_from_json(const cJSON *json, STFile *file) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
// int32_t tsdbTFileInit(STsdb *pTsdb, STFile *pFile) {
|
||||
// SVnode *pVnode = pTsdb->pVnode;
|
||||
// STfs *pTfs = pVnode->pTfs;
|
||||
|
||||
// if (pTfs) {
|
||||
// // snprintf(pFile->fname, //
|
||||
// // TSDB_FILENAME_LEN, //
|
||||
// // "%s%s%s%sv%df%dver%" PRId64 ".%s", //
|
||||
// // tfsGetDiskPath(pTfs, pFile->did), //
|
||||
// // TD_DIRSEP, //
|
||||
// // pTsdb->path, //
|
||||
// // TD_DIRSEP, //
|
||||
// // TD_VID(pVnode), //
|
||||
// // pFile->fid, //
|
||||
// // pFile->cid, //
|
||||
// // g_tfile_info[pFile->type].suffix);
|
||||
// } else {
|
||||
// // snprintf(pFile->fname, //
|
||||
// // TSDB_FILENAME_LEN, //
|
||||
// // "%s%sv%df%dver%" PRId64 ".%s", //
|
||||
// // pTsdb->path, //
|
||||
// // TD_DIRSEP, //
|
||||
// // TD_VID(pVnode), //
|
||||
// // pFile->fid, //
|
||||
// // pFile->cid, //
|
||||
// // g_tfile_info[pFile->type].suffix);
|
||||
// }
|
||||
// return 0;
|
||||
// }
|
||||
|
||||
int32_t tsdbTFileToJson(const STFile *file, cJSON *json) {
|
||||
if (file->type == TSDB_FTYPE_STT) {
|
||||
return g_tfile_info[file->type].to_json(file, json);
|
||||
|
@ -225,7 +195,7 @@ int32_t tsdbJsonToTFile(const cJSON *json, tsdb_ftype_t ftype, STFile *f) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int32_t tsdbTFileObjInit(const STFile *f, STFileObj **fobj) {
|
||||
int32_t tsdbTFileObjInit(STsdb *pTsdb, const STFile *f, STFileObj **fobj) {
|
||||
fobj[0] = taosMemoryMalloc(sizeof(*fobj[0]));
|
||||
if (!fobj[0]) return TSDB_CODE_OUT_OF_MEMORY;
|
||||
|
||||
|
@ -233,7 +203,7 @@ int32_t tsdbTFileObjInit(const STFile *f, STFileObj **fobj) {
|
|||
fobj[0]->f = *f;
|
||||
fobj[0]->state = TSDB_FSTATE_EXIST;
|
||||
fobj[0]->ref = 1;
|
||||
// TODO: generate the file name
|
||||
tsdbTFileName(pTsdb, f, fobj[0]->fname);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -248,12 +218,11 @@ int32_t tsdbTFileObjRef(STFileObj *fobj) {
|
|||
|
||||
int32_t tsdbTFileObjUnref(STFileObj *fobj) {
|
||||
int32_t nRef;
|
||||
|
||||
taosThreadMutexLock(&fobj->mutex);
|
||||
nRef = --fobj->ref;
|
||||
taosThreadMutexUnlock(&fobj->mutex);
|
||||
|
||||
ASSERT(nRef >= 0);
|
||||
|
||||
if (nRef == 0) {
|
||||
if (fobj->state == TSDB_FSTATE_REMOVED) {
|
||||
// TODO: add the file name
|
||||
|
@ -261,6 +230,7 @@ int32_t tsdbTFileObjUnref(STFileObj *fobj) {
|
|||
}
|
||||
taosMemoryFree(fobj);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -275,3 +245,33 @@ int32_t tsdbTFileRemove(STFileObj *fobj) {
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t tsdbTFileName(STsdb *pTsdb, const STFile *f, char fname[]) {
|
||||
SVnode *pVnode = pTsdb->pVnode;
|
||||
STfs *pTfs = pVnode->pTfs;
|
||||
|
||||
if (pTfs) {
|
||||
snprintf(fname, //
|
||||
TSDB_FILENAME_LEN, //
|
||||
"%s%s%s%sv%df%dver%" PRId64 ".%s", //
|
||||
tfsGetDiskPath(pTfs, f->did), //
|
||||
TD_DIRSEP, //
|
||||
pTsdb->path, //
|
||||
TD_DIRSEP, //
|
||||
TD_VID(pVnode), //
|
||||
f->fid, //
|
||||
f->cid, //
|
||||
g_tfile_info[f->type].suffix);
|
||||
} else {
|
||||
snprintf(fname, //
|
||||
TSDB_FILENAME_LEN, //
|
||||
"%s%sv%df%dver%" PRId64 ".%s", //
|
||||
pTsdb->path, //
|
||||
TD_DIRSEP, //
|
||||
TD_VID(pVnode), //
|
||||
f->fid, //
|
||||
f->cid, //
|
||||
g_tfile_info[f->type].suffix);
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue