more code
This commit is contained in:
parent
c0b2ff9c62
commit
66aefc392f
|
@ -16,17 +16,41 @@
|
||||||
#include "tsdb.h"
|
#include "tsdb.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
STsdb *pTsdb;
|
} SMemDIter;
|
||||||
STsdbFS fs;
|
|
||||||
|
typedef struct {
|
||||||
|
SArray *aBlockIdx; // SArray<SBlockIdx>
|
||||||
|
SMapData mDataBlk; // SMapData<SDataBlk>
|
||||||
|
SBlockData bData
|
||||||
|
} SDataDIter;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
SArray *aSttBlk; // SArray<SSttBlk>
|
||||||
|
SBlockData bData;
|
||||||
|
} SSttDIter;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
STsdb *pTsdb;
|
||||||
|
STsdbFS fs;
|
||||||
|
int64_t cid;
|
||||||
|
int32_t fid;
|
||||||
|
SDFileSet *pDFileSet;
|
||||||
|
SRBTree rtree;
|
||||||
} STsdbCompactor;
|
} STsdbCompactor;
|
||||||
|
|
||||||
#define TSDB_FLG_DEEP_COMPACT 0x1
|
#define TSDB_FLG_DEEP_COMPACT 0x1
|
||||||
|
|
||||||
static int32_t tsdbBeginCompact(STsdb *pTsdb) {
|
static int32_t tsdbBeginCompact(STsdb *pTsdb, STsdbCompactor *pCompactor) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
int32_t lino = 0;
|
int32_t lino = 0;
|
||||||
|
|
||||||
// TODO
|
pCompactor->pTsdb = pTsdb;
|
||||||
|
|
||||||
|
code = tsdbFSCopy(pTsdb, &pCompactor->fs);
|
||||||
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
|
|
||||||
|
pCompactor->fid = INT32_MIN;
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
if (code) {
|
if (code) {
|
||||||
tsdbError("vgId:%d %s failed at line %d since %s", TD_VID(pTsdb->pVnode), __func__, lino, tstrerror(code));
|
tsdbError("vgId:%d %s failed at line %d since %s", TD_VID(pTsdb->pVnode), __func__, lino, tstrerror(code));
|
||||||
|
@ -34,10 +58,12 @@ _exit:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t tsdbCommitCompact(STsdb *pTsdb) {
|
static int32_t tsdbCommitCompact(STsdbCompactor *pCompactor) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
int32_t lino = 0;
|
int32_t lino = 0;
|
||||||
|
|
||||||
|
STsdb *pTsdb = pCompactor->pTsdb;
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
|
@ -47,10 +73,12 @@ _exit:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t tsdbAbortCompact(STsdb *pTsdb) {
|
static int32_t tsdbAbortCompact(STsdbCompactor *pCompactor) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
int32_t lino = 0;
|
int32_t lino = 0;
|
||||||
|
|
||||||
|
STsdb *pTsdb = pCompactor->pTsdb;
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
|
@ -60,11 +88,11 @@ _exit:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t tsdbDeepCompact(STsdb *pTsdb) {
|
static int32_t tsdbDeepCompact(STsdbCompactor *pCompactor) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
int32_t lino = 0;
|
int32_t lino = 0;
|
||||||
|
|
||||||
// TODO
|
STsdb *pTsdb = pCompactor->pTsdb;
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
if (code) {
|
if (code) {
|
||||||
|
@ -73,10 +101,12 @@ _exit:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t tsdbShallowCompact(STsdb *pTsdb) {
|
static int32_t tsdbShallowCompact(STsdbCompactor *pCompactor) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
int32_t lino = 0;
|
int32_t lino = 0;
|
||||||
|
|
||||||
|
STsdb *pTsdb = pCompactor->pTsdb;
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
|
@ -93,23 +123,30 @@ int32_t tsdbCompact(STsdb *pTsdb, int32_t flag) {
|
||||||
// Check if can do compact (TODO)
|
// Check if can do compact (TODO)
|
||||||
|
|
||||||
// Do compact
|
// Do compact
|
||||||
code = tsdbBeginCompact(pTsdb);
|
STsdbCompactor compactor = {0};
|
||||||
|
|
||||||
|
code = tsdbBeginCompact(pTsdb, &compactor);
|
||||||
TSDB_CHECK_CODE(code, lino, _exit);
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
|
|
||||||
if (flag & TSDB_FLG_DEEP_COMPACT) {
|
while (true) {
|
||||||
code = tsdbDeepCompact(pTsdb);
|
compactor.pDFileSet = (SDFileSet *)taosArraySearch(compactor.fs.aDFileSet, &compactor.fid, tDFileSetCmprFn, TD_GT);
|
||||||
TSDB_CHECK_CODE(code, lino, _exit);
|
if (compactor.pDFileSet == NULL) break;
|
||||||
} else {
|
|
||||||
code = tsdbShallowCompact(pTsdb);
|
if (flag & TSDB_FLG_DEEP_COMPACT) {
|
||||||
TSDB_CHECK_CODE(code, lino, _exit);
|
code = tsdbDeepCompact(&compactor);
|
||||||
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
|
} else {
|
||||||
|
code = tsdbShallowCompact(&compactor);
|
||||||
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
if (code) {
|
if (code) {
|
||||||
tsdbError("vgId:%d %s failed at line %d since %s", TD_VID(pTsdb->pVnode), __func__, lino, tstrerror(code));
|
tsdbError("vgId:%d %s failed at line %d since %s", TD_VID(pTsdb->pVnode), __func__, lino, tstrerror(code));
|
||||||
tsdbAbortCompact(pTsdb);
|
tsdbAbortCompact(&compactor);
|
||||||
} else {
|
} else {
|
||||||
tsdbCommitCompact(pTsdb);
|
tsdbCommitCompact(&compactor);
|
||||||
}
|
}
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue