more code

This commit is contained in:
Hongze Cheng 2023-05-23 16:20:19 +08:00
parent 36b2495cf6
commit 1c10694fde
3 changed files with 70 additions and 35 deletions

View File

@ -29,6 +29,12 @@ typedef TARRAY2(STFileObj *) TFileObjArray;
typedef TARRAY2(SSttLvl *) TSttLvlArray; typedef TARRAY2(SSttLvl *) TSttLvlArray;
typedef TARRAY2(STFileOp) TFileOpArray; typedef TARRAY2(STFileOp) TFileOpArray;
typedef enum {
TSDB_FOP_CREATE = 1,
TSDB_FOP_REMOVE,
TSDB_FOP_MODIFY,
} tsdb_fop_t;
// init/clear // init/clear
int32_t tsdbTFileSetInit(int32_t fid, STFileSet **fset); int32_t tsdbTFileSetInit(int32_t fid, STFileSet **fset);
int32_t tsdbTFileSetInitEx(STsdb *pTsdb, const STFileSet *fset1, STFileSet **fset); int32_t tsdbTFileSetInitEx(STsdb *pTsdb, const STFileSet *fset1, STFileSet **fset);
@ -50,10 +56,10 @@ SSttLvl *tsdbTFileSetGetLvl(STFileSet *fset, int32_t level);
bool tsdbTFileSetIsEmpty(const STFileSet *fset); bool tsdbTFileSetIsEmpty(const STFileSet *fset);
struct STFileOp { struct STFileOp {
int32_t fid; int32_t fid;
STFile *of; // old file tsdb_fop_t optype;
STFile *nf; // new file STFile of; // old file state
STFile fArr[2]; STFile nf; // new file state
}; };
struct SSttLvl { struct SSttLvl {

View File

@ -256,38 +256,68 @@ int32_t tsdbJsonToTFileSet(STsdb *pTsdb, const cJSON *json, STFileSet **fset) {
return 0; return 0;
} }
// NOTE: the api does not remove file, only do memory operation
int32_t tsdbTFileSetEdit(STsdb *pTsdb, STFileSet *fset, const STFileOp *op) { int32_t tsdbTFileSetEdit(STsdb *pTsdb, STFileSet *fset, const STFileOp *op) {
int32_t code = 0; int32_t code = 0;
// if (op->of.size == 0 // if (op->optype == TSDB_FOP_CREATE) {
// || 0 /* TODO*/ // create a new file
// ) { STFileObj *fobj;
// STFileObj *fobj; code = tsdbTFileObjInit(pTsdb, &op->nf, &fobj);
// code = tsdbTFileObjInit(pTsdb, &op->nf, &fobj); if (code) return code;
// if (code) return code;
// if (fobj->f.type == TSDB_FTYPE_STT) { if (fobj->f.type == TSDB_FTYPE_STT) {
// SSttLvl *lvl = tsdbTFileSetGetLvl(fset, fobj->f.stt.level); SSttLvl *lvl = tsdbTFileSetGetLvl(fset, fobj->f.stt.level);
// if (!lvl) { if (!lvl) {
// code = tsdbSttLvlInit(fobj->f.stt.level, &lvl); code = tsdbSttLvlInit(fobj->f.stt.level, &lvl);
// if (code) return code; if (code) return code;
// code = TARRAY2_SORT_INSERT(&fset->lvlArr, lvl, tsdbSttLvlCmprFn); code = TARRAY2_SORT_INSERT(&fset->lvlArr, lvl, tsdbSttLvlCmprFn);
// if (code) return code; if (code) return code;
// } }
// code = TARRAY2_SORT_INSERT(&lvl->farr, fobj, tsdbTFileObjCmpr); code = TARRAY2_SORT_INSERT(&lvl->farr, fobj, tsdbTFileObjCmpr);
// if (code) return code; if (code) return code;
// } else { } else {
// fset->farr[fobj->f.type] = fobj; ASSERT(fset->farr[fobj->f.type] == NULL);
// } fset->farr[fobj->f.type] = fobj;
// } else if (op->nf.size == 0) { }
// // delete } else if (op->optype == TSDB_FOP_REMOVE) {
// ASSERT(0); // delete a file
// } else { if (op->of.type == TSDB_FTYPE_STT) {
// // modify SSttLvl *lvl = tsdbTFileSetGetLvl(fset, op->of.stt.level);
// ASSERT(0); ASSERT(lvl);
// }
STFileObj tfobj = {.f = {.cid = op->of.cid}};
STFileObj *tfobjp = &tfobj;
int32_t idx = TARRAY2_SEARCH_IDX(&lvl->farr, &tfobjp, tsdbTFileObjCmpr, TD_EQ);
ASSERT(idx >= 0);
TARRAY2_REMOVE(&lvl->farr, idx, tsdbSttLvlRemoveFObj);
if (TARRAY2_SIZE(&lvl->farr) == 0) {
// TODO: remove the stt level if no file exists anymore
// TARRAY2_REMOVE(&fset->lvlArr, lvl - fset->lvlArr.data, tsdbSttLvlClear);
}
} else {
ASSERT(tsdbIsSameTFile(&op->of, &fset->farr[op->of.type]->f));
tsdbTFileObjUnref(fset->farr[op->of.type]);
fset->farr[op->of.type] = NULL;
}
} else {
if (op->nf.type == TSDB_FTYPE_STT) {
SSttLvl *lvl = tsdbTFileSetGetLvl(fset, op->of.stt.level);
ASSERT(lvl);
STFileObj tfobj = {.f = {.cid = op->of.cid}}, *tfobjp = &tfobj;
tfobjp = TARRAY2_SEARCH_EX(&lvl->farr, &tfobjp, tsdbTFileObjCmpr, TD_EQ);
ASSERT(tfobjp);
tfobjp->f = op->nf;
} else {
fset->farr[op->nf.type]->f = op->nf;
}
}
return 0; return 0;
} }

View File

@ -573,13 +573,12 @@ int32_t tsdbSttFWriterClose(SSttFileWriter **ppWriter, int8_t abort, struct STFi
STFile *f = &ppWriter[0]->config.file; STFile *f = &ppWriter[0]->config.file;
op->fid = f->fid; op->fid = f->fid;
if (f->size == 0) { if (f->size == 0) {
op->of = NULL; op->optype = TSDB_FOP_CREATE;
} else { } else {
op->of = &op->fArr[0]; op->optype = TSDB_FOP_MODIFY;
op->of[0] = f[0];
} }
op->nf = &op->fArr[1]; op->of = f[0];
op->nf[0] = ppWriter[0]->tFile; op->nf = ppWriter[0]->tFile;
} }
} }