more code

This commit is contained in:
Hongze Cheng 2023-04-03 13:59:37 +08:00
parent 552ea09690
commit ffb655bae6
2 changed files with 94 additions and 19 deletions

View File

@ -21,11 +21,6 @@ extern int32_t tsdbWriteFile(STsdbFD *pFD, int64_t offset, const uint8_t *pBuf,
extern int32_t tsdbReadFile(STsdbFD *pFD, int64_t offset, uint8_t *pBuf, int64_t size); extern int32_t tsdbReadFile(STsdbFD *pFD, int64_t offset, uint8_t *pBuf, int64_t size);
extern int32_t tsdbFsyncFile(STsdbFD *pFD); extern int32_t tsdbFsyncFile(STsdbFD *pFD);
typedef struct SFDataPtr {
int64_t offset;
int64_t size;
} SFDataPtr;
typedef struct { typedef struct {
SFDataPtr dict[4]; // 0:bloom filter, 1:SSttBlk, 2:STbStatisBlk, 3:SDelBlk SFDataPtr dict[4]; // 0:bloom filter, 1:SSttBlk, 2:STbStatisBlk, 3:SDelBlk
uint8_t reserved[32]; uint8_t reserved[32];
@ -106,16 +101,91 @@ _exit:
static int32_t write_statistics_block(struct SSttFWriter *pWriter) { static int32_t write_statistics_block(struct SSttFWriter *pWriter) {
int32_t code = 0; int32_t code = 0;
int32_t lino;
STbStatisBlk *pStatisBlk = (STbStatisBlk *)taosArrayReserve(pWriter->aStatisBlk, 1);
if (pStatisBlk == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
TSDB_CHECK_CODE(code, lino, _exit);
}
pStatisBlk->nRow = pWriter->sData.nRow;
pStatisBlk->minTid.suid = pWriter->sData.aData[0][0];
pStatisBlk->minTid.uid = pWriter->sData.aData[1][0];
pStatisBlk->maxTid.suid = pWriter->sData.aData[0][pWriter->sData.nRow - 1];
pStatisBlk->maxTid.uid = pWriter->sData.aData[1][pWriter->sData.nRow - 1];
pStatisBlk->minVer = pStatisBlk->maxVer = pStatisBlk->maxVer = pWriter->sData.aData[2][0];
for (int32_t iRow = 1; iRow < pWriter->sData.nRow; iRow++) {
if (pStatisBlk->minVer > pWriter->sData.aData[2][iRow]) pStatisBlk->minVer = pWriter->sData.aData[2][iRow];
if (pStatisBlk->maxVer < pWriter->sData.aData[2][iRow]) pStatisBlk->maxVer = pWriter->sData.aData[2][iRow];
}
pStatisBlk->dp.offset = pWriter->config.file.size;
pStatisBlk->dp.size = 0; // TODO
int64_t tsize = sizeof(int64_t) * pWriter->sData.nRow;
for (int32_t i = 0; i < ARRAY_SIZE(pWriter->sData.aData); i++) {
code = tsdbWriteFile(pWriter->pFd, pWriter->config.file.size, (const uint8_t *)pWriter->sData.aData[i], tsize);
TSDB_CHECK_CODE(code, lino, _exit);
pStatisBlk->dp.size += tsize;
pWriter->config.file.size += tsize;
}
tTbStatisBlockClear(&pWriter->sData); tTbStatisBlockClear(&pWriter->sData);
// TODO
_exit:
if (code) {
tsdbError("vgId:%d %s failed at line %d since %s", TD_VID(pWriter->config.pTsdb->pVnode), __func__, lino,
tstrerror(code));
} else {
// tsdbTrace();
}
return code; return code;
} }
static int32_t write_delete_block(struct SSttFWriter *pWriter) { static int32_t write_delete_block(struct SSttFWriter *pWriter) {
int32_t code = 0; int32_t code = 0;
// TODO int32_t lino;
SDelBlk *pDelBlk = taosArrayReserve(pWriter->aDelBlk, 1);
if (pDelBlk == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
TSDB_CHECK_CODE(code, lino, _exit);
}
pDelBlk->nRow = pWriter->sData.nRow;
pDelBlk->minTid.suid = pWriter->sData.aData[0][0];
pDelBlk->minTid.uid = pWriter->sData.aData[1][0];
pDelBlk->maxTid.suid = pWriter->sData.aData[0][pWriter->sData.nRow - 1];
pDelBlk->maxTid.uid = pWriter->sData.aData[1][pWriter->sData.nRow - 1];
pDelBlk->minVer = pDelBlk->maxVer = pDelBlk->maxVer = pWriter->sData.aData[2][0];
for (int32_t iRow = 1; iRow < pWriter->sData.nRow; iRow++) {
if (pDelBlk->minVer > pWriter->sData.aData[2][iRow]) pDelBlk->minVer = pWriter->sData.aData[2][iRow];
if (pDelBlk->maxVer < pWriter->sData.aData[2][iRow]) pDelBlk->maxVer = pWriter->sData.aData[2][iRow];
}
pDelBlk->dp.offset = pWriter->config.file.size;
pDelBlk->dp.size = 0; // TODO
int64_t tsize = sizeof(int64_t) * pWriter->dData.nRow;
for (int32_t i = 0; i < ARRAY_SIZE(pWriter->dData.aData); i++) {
code = tsdbWriteFile(pWriter->pFd, pWriter->config.file.size, (const uint8_t *)pWriter->dData.aData[i], tsize);
TSDB_CHECK_CODE(code, lino, _exit);
pDelBlk->dp.size += tsize;
pWriter->config.file.size += tsize;
}
tDelBlockDestroy(&pWriter->dData);
_exit:
if (code) {
tsdbError("vgId:%d %s failed at line %d since %s", TD_VID(pWriter->config.pTsdb->pVnode), __func__, lino,
tstrerror(code));
} else {
// tsdbTrace();
}
return code; return code;
} }

View File

@ -26,6 +26,11 @@ extern "C" {
typedef struct SDelBlock SDelBlock; typedef struct SDelBlock SDelBlock;
typedef struct SDelBlk SDelBlk; typedef struct SDelBlk SDelBlk;
typedef struct SFDataPtr {
int64_t offset;
int64_t size;
} SFDataPtr;
int32_t tDelBlockCreate(SDelBlock *pDelBlock, int32_t capacity); int32_t tDelBlockCreate(SDelBlock *pDelBlock, int32_t capacity);
int32_t tDelBlockDestroy(SDelBlock *pDelBlock); int32_t tDelBlockDestroy(SDelBlock *pDelBlock);
int32_t tDelBlockClear(SDelBlock *pDelBlock); int32_t tDelBlockClear(SDelBlock *pDelBlock);
@ -52,12 +57,12 @@ struct SDelBlock {
}; };
struct SDelBlk { struct SDelBlk {
int64_t suidMax; int32_t nRow;
int64_t suidMin; TABLEID minTid;
int64_t uidMax; TABLEID maxTid;
int64_t uidMin; int64_t minVer;
int64_t verMax; int64_t maxVer;
int64_t verMin; SFDataPtr dp;
}; };
struct STbStatisBlock { struct STbStatisBlock {
int32_t capacity; int32_t capacity;
@ -65,12 +70,12 @@ struct STbStatisBlock {
int64_t *aData[7]; // [suid, uid, skey, sver, ekey, ever, count] int64_t *aData[7]; // [suid, uid, skey, sver, ekey, ever, count]
}; };
struct STbStatisBlk { struct STbStatisBlk {
int64_t suidMax; int32_t nRow;
int64_t suidMin; TABLEID minTid;
int64_t uidMax; TABLEID maxTid;
int64_t uidMin; int64_t minVer;
int64_t offset; int64_t maxVer;
int64_t size; SFDataPtr dp;
}; };
#ifdef __cplusplus #ifdef __cplusplus