more code
This commit is contained in:
parent
6aac0e0c49
commit
41459a92c0
|
@ -76,9 +76,8 @@ typedef struct STsdbFilterInfo STsdbFilterInfo;
|
||||||
#define TSDBROW_ROW_FMT ((int8_t)0x0)
|
#define TSDBROW_ROW_FMT ((int8_t)0x0)
|
||||||
#define TSDBROW_COL_FMT ((int8_t)0x1)
|
#define TSDBROW_COL_FMT ((int8_t)0x1)
|
||||||
|
|
||||||
#define TSDB_FILE_DLMT ((uint32_t)0xF00AFA0F)
|
#define TSDB_FILE_DLMT ((uint32_t)0xF00AFA0F)
|
||||||
#define TSDB_MAX_SUBBLOCKS 8
|
#define TSDB_FHDR_SIZE 512
|
||||||
#define TSDB_FHDR_SIZE 512
|
|
||||||
|
|
||||||
#define VERSION_MIN 0
|
#define VERSION_MIN 0
|
||||||
#define VERSION_MAX INT64_MAX
|
#define VERSION_MAX INT64_MAX
|
||||||
|
@ -498,7 +497,7 @@ struct SDataBlk {
|
||||||
int32_t nRow;
|
int32_t nRow;
|
||||||
int8_t hasDup;
|
int8_t hasDup;
|
||||||
int8_t nSubBlock;
|
int8_t nSubBlock;
|
||||||
SBlockInfo aSubBlock[TSDB_MAX_SUBBLOCKS];
|
SBlockInfo aSubBlock[1];
|
||||||
SSmaInfo smaInfo;
|
SSmaInfo smaInfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -47,13 +47,14 @@ int32_t tsdbDataFileReadDelData(SDataFileReader *reader, const SDelBlk *delBlk,
|
||||||
// SDataFileWriter =============================================
|
// SDataFileWriter =============================================
|
||||||
typedef struct SDataFileWriter SDataFileWriter;
|
typedef struct SDataFileWriter SDataFileWriter;
|
||||||
typedef struct SDataFileWriterConfig {
|
typedef struct SDataFileWriterConfig {
|
||||||
STsdb *tsdb;
|
STsdb *tsdb;
|
||||||
STFile f[TSDB_FTYPE_MAX];
|
STFile f[TSDB_FTYPE_MAX];
|
||||||
|
int32_t maxRow;
|
||||||
} SDataFileWriterConfig;
|
} SDataFileWriterConfig;
|
||||||
|
|
||||||
int32_t tsdbDataFileWriterOpen(const SDataFileWriterConfig *config, SDataFileWriter **writer);
|
int32_t tsdbDataFileWriterOpen(const SDataFileWriterConfig *config, SDataFileWriter **writer);
|
||||||
int32_t tsdbDataFileWriterClose(SDataFileWriter **writer, bool abort, STFileOp op[/*TSDB_FTYPE_MAX*/]);
|
int32_t tsdbDataFileWriterClose(SDataFileWriter **writer, bool abort, STFileOp op[/*TSDB_FTYPE_MAX*/]);
|
||||||
int32_t tsdbDataFileWriteTSData(SDataFileWriter *writer, SBlockData *bData);
|
int32_t tsdbDataFileWriteTSDataBlock(SDataFileWriter *writer, SBlockData *bData);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,16 +76,21 @@ int32_t tsdbDataFileReadDataBlk(SDataFileReader *reader, const SBlockIdx *blockI
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t tsdbDataFileReadDataBlock(SDataFileReader *reader, const SDataBlk *dataBlk, SBlockData *bData) {
|
||||||
|
// TODO
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// SDataFileWriter =============================================
|
// SDataFileWriter =============================================
|
||||||
struct SDataFileWriter {
|
struct SDataFileWriter {
|
||||||
SDataFileWriterConfig config[1];
|
SDataFileWriterConfig config[1];
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
bool opened;
|
bool opened;
|
||||||
bool tbHasOldData;
|
|
||||||
SDataFileReader *reader;
|
SDataFileReader *reader;
|
||||||
const TBlockIdxArray *blockIdxArray;
|
const TBlockIdxArray *blockIdxArray;
|
||||||
int32_t blockIdxArrayIdx;
|
int32_t blockIdxArrayIdx;
|
||||||
|
bool tbHasOldData;
|
||||||
TABLEID tbid[1];
|
TABLEID tbid[1];
|
||||||
const TDataBlkArray *dataBlkArray;
|
const TDataBlkArray *dataBlkArray;
|
||||||
int32_t dataBlkArrayIdx;
|
int32_t dataBlkArrayIdx;
|
||||||
|
@ -244,6 +249,29 @@ static int32_t tsdbDataFileWriteDataBlk(SDataFileWriter *writer, const TDataBlkA
|
||||||
code = TARRAY2_APPEND_PTR(writer->blockIdxArray, blockIdx);
|
code = TARRAY2_APPEND_PTR(writer->blockIdxArray, blockIdx);
|
||||||
TSDB_CHECK_CODE(code, lino, _exit);
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
|
|
||||||
|
_exit:
|
||||||
|
if (code) {
|
||||||
|
TSDB_ERROR_LOG(vid, lino, code);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
static int32_t tsdbDataFileDoWriteTSRow(SDataFileWriter *writer, TSDBROW *row) {
|
||||||
|
int32_t code = 0;
|
||||||
|
int32_t lino = 0;
|
||||||
|
int32_t vid = TD_VID(writer->config->tsdb->pVnode);
|
||||||
|
|
||||||
|
if (row->type == TSDBROW_ROW_FMT) {
|
||||||
|
// TODO: udpate row schema
|
||||||
|
}
|
||||||
|
|
||||||
|
code = tBlockDataAppendRow(writer->ctx->bData, row, NULL /* TODO */, writer->ctx->tbid->uid);
|
||||||
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
|
|
||||||
|
if (writer->ctx->bData->nRow >= writer->config->maxRow) {
|
||||||
|
code = tsdbDataFileWriteBlockData(writer, writer->bData);
|
||||||
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
|
}
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
if (code) {
|
if (code) {
|
||||||
TSDB_ERROR_LOG(vid, lino, code);
|
TSDB_ERROR_LOG(vid, lino, code);
|
||||||
|
@ -261,7 +289,7 @@ static int32_t tsdbDataFileWriteTableDataEnd(SDataFileWriter *writer) {
|
||||||
for (; writer->ctx->iRow < writer->ctx->bData->nRow; writer->ctx->iRow++) {
|
for (; writer->ctx->iRow < writer->ctx->bData->nRow; writer->ctx->iRow++) {
|
||||||
TSDBROW row[1] = {tsdbRowFromBlockData(writer->ctx->bData, writer->ctx->iRow)};
|
TSDBROW row[1] = {tsdbRowFromBlockData(writer->ctx->bData, writer->ctx->iRow)};
|
||||||
|
|
||||||
code = tBlockDataAppendRow(writer->bData, row, NULL, writer->ctx->tbid->uid);
|
code = tsdbDataFileDoWriteTSRow(writer, row);
|
||||||
TSDB_CHECK_CODE(code, lino, _exit);
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -292,6 +320,8 @@ static int32_t tsdbDataFileWriteTableDataBegin(SDataFileWriter *writer, const TA
|
||||||
int32_t lino = 0;
|
int32_t lino = 0;
|
||||||
int32_t vid = TD_VID(writer->config->tsdb->pVnode);
|
int32_t vid = TD_VID(writer->config->tsdb->pVnode);
|
||||||
|
|
||||||
|
writer->ctx->tbHasOldData = false;
|
||||||
|
|
||||||
for (; writer->ctx->blockIdxArrayIdx < TARRAY2_SIZE(writer->ctx->blockIdxArray); writer->ctx->blockIdxArrayIdx++) {
|
for (; writer->ctx->blockIdxArrayIdx < TARRAY2_SIZE(writer->ctx->blockIdxArray); writer->ctx->blockIdxArrayIdx++) {
|
||||||
const SBlockIdx *blockIdx = TARRAY2_GET_PTR(writer->ctx->blockIdxArray, writer->ctx->blockIdxArrayIdx);
|
const SBlockIdx *blockIdx = TARRAY2_GET_PTR(writer->ctx->blockIdxArray, writer->ctx->blockIdxArrayIdx);
|
||||||
|
|
||||||
|
@ -314,12 +344,14 @@ static int32_t tsdbDataFileWriteTableDataBegin(SDataFileWriter *writer, const TA
|
||||||
code = tsdbDataFileReadDataBlk(writer->ctx->reader, blockIdx, &writer->ctx->dataBlkArray);
|
code = tsdbDataFileReadDataBlk(writer->ctx->reader, blockIdx, &writer->ctx->dataBlkArray);
|
||||||
TSDB_CHECK_CODE(code, lino, _exit);
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
writer->ctx->dataBlkArrayIdx = 0;
|
writer->ctx->dataBlkArrayIdx = 0;
|
||||||
} else {
|
tBlockDataReset(writer->ctx->bData);
|
||||||
writer->ctx->tbHasOldData = false;
|
writer->ctx->iRow = 0;
|
||||||
|
writer->ctx->blockIdxArrayIdx++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
writer->ctx->tbid[0] = tbid[0];
|
writer->ctx->tbid[0] = tbid[0];
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
|
@ -328,19 +360,77 @@ _exit:
|
||||||
}
|
}
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
static int32_t tsdbDataFileDoWriteTableData(SDataFileWriter *writer, SBlockData *bData) {
|
static int32_t tsdbDataFileDoWriteTableDataRow(SDataFileWriter *writer, TSDBROW *row) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
int32_t lino = 0;
|
int32_t lino = 0;
|
||||||
int32_t vid = TD_VID(writer->config->tsdb->pVnode);
|
int32_t vid = TD_VID(writer->config->tsdb->pVnode);
|
||||||
|
|
||||||
if (writer->ctx->tbHasOldData) {
|
while (writer->ctx->tbHasOldData) {
|
||||||
if (writer->ctx->dataBlkArrayIdx >= TARRAY2_SIZE(writer->ctx->dataBlkArray)) {
|
for (; writer->ctx->iRow < writer->ctx->bData->nRow; writer->ctx->iRow++) {
|
||||||
// TODO
|
TSDBROW row1[1] = {tsdbRowFromBlockData(writer->ctx->bData, writer->ctx->iRow)};
|
||||||
|
|
||||||
|
int32_t c = tsdbRowCmprFn(row, row1);
|
||||||
|
ASSERT(c);
|
||||||
|
if (row > 0) {
|
||||||
|
code = tsdbDataFileDoWriteTSRow(writer, row1);
|
||||||
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
|
} else {
|
||||||
|
goto _write_row;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// TODO
|
|
||||||
|
for (; writer->ctx->dataBlkArrayIdx < TARRAY2_SIZE(writer->ctx->dataBlkArray); writer->ctx->dataBlkArrayIdx++) {
|
||||||
|
const SDataBlk *dataBlk = TARRAY2_GET_PTR(writer->ctx->dataBlkArray, writer->ctx->dataBlkArrayIdx);
|
||||||
|
SDataBlk dataBlk1[1] = {{.minKey = {}, .maxKey = {}}}; // TODO
|
||||||
|
|
||||||
|
int32_t c = tDataBlkCmprFn(dataBlk, dataBlk1);
|
||||||
|
if (c < 0) {
|
||||||
|
code = tsdbDataFileWriteBlockData(writer, writer->bData);
|
||||||
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
|
|
||||||
|
code = TARRAY2_APPEND_PTR(writer->dataBlkArray, dataBlk);
|
||||||
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
|
} else if (c > 0) {
|
||||||
|
goto _write_row;
|
||||||
|
} else {
|
||||||
|
code = tsdbDataFileReadDataBlock(writer->ctx->reader, dataBlk, writer->ctx->bData);
|
||||||
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
|
writer->ctx->iRow = 0;
|
||||||
|
writer->ctx->dataBlkArrayIdx++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (writer->ctx->dataBlkArrayIdx >= TARRAY2_SIZE(writer->ctx->dataBlkArray) //
|
||||||
|
&& writer->ctx->iRow >= writer->ctx->bData->nRow) {
|
||||||
|
writer->ctx->tbHasOldData = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_write_row:
|
||||||
|
code = tsdbDataFileDoWriteTSRow(writer, row);
|
||||||
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
|
|
||||||
|
_exit:
|
||||||
|
if (code) {
|
||||||
|
TSDB_ERROR_LOG(vid, lino, code);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
static int32_t tsdbDataFileDoWriteTableDataBlock(SDataFileWriter *writer, SBlockData *bData) {
|
||||||
|
int32_t code = 0;
|
||||||
|
int32_t lino = 0;
|
||||||
|
int32_t vid = TD_VID(writer->config->tsdb->pVnode);
|
||||||
|
|
||||||
|
if (!writer->ctx->tbHasOldData && writer->bData->nRow == 0) {
|
||||||
|
code = tsdbDataFileWriteBlockData(writer, bData);
|
||||||
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
} else {
|
} else {
|
||||||
// code = tsdbDataFileWriteBlockData(writer, bData);
|
for (int32_t i = 0; i < bData->nRow; i++) {
|
||||||
// TSDB_CHECK_CODE(code, lino, _exit);
|
TSDBROW row[1] = {tsdbRowFromBlockData(bData, i)};
|
||||||
|
code = tsdbDataFileDoWriteTableDataRow(writer, row);
|
||||||
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
|
@ -349,7 +439,7 @@ _exit:
|
||||||
}
|
}
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
int32_t tsdbDataFileWriteTSData(SDataFileWriter *writer, SBlockData *bData) {
|
int32_t tsdbDataFileWriteTSDataBlock(SDataFileWriter *writer, SBlockData *bData) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
int32_t lino = 0;
|
int32_t lino = 0;
|
||||||
int32_t vid = TD_VID(writer->config->tsdb->pVnode);
|
int32_t vid = TD_VID(writer->config->tsdb->pVnode);
|
||||||
|
@ -369,7 +459,7 @@ int32_t tsdbDataFileWriteTSData(SDataFileWriter *writer, SBlockData *bData) {
|
||||||
TSDB_CHECK_CODE(code, lino, _exit);
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
}
|
}
|
||||||
|
|
||||||
code = tsdbDataFileDoWriteTableData(writer, bData);
|
code = tsdbDataFileDoWriteTableDataBlock(writer, bData);
|
||||||
TSDB_CHECK_CODE(code, lino, _exit);
|
TSDB_CHECK_CODE(code, lino, _exit);
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
|
|
Loading…
Reference in New Issue