diff --git a/source/common/src/systable.c b/source/common/src/systable.c index e74f6d0aa3..f2778042bf 100644 --- a/source/common/src/systable.c +++ b/source/common/src/systable.c @@ -423,6 +423,7 @@ static const SSysDbTableSchema filesetsFullSchema[] = { {.name = "fileset_id", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = false}, {.name = "start_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = false}, {.name = "end_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = false}, + {.name = "total_size", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false}, {.name = "last_compact", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = false}, {.name = "shold_compact", .bytes = 1, .type = TSDB_DATA_TYPE_BOOL, .sysInfo = false}, // {.name = "details", .bytes = 256 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false}, diff --git a/source/dnode/vnode/src/tsdb/tsdbFS2.c b/source/dnode/vnode/src/tsdb/tsdbFS2.c index c5f27768b2..ef2766acda 100644 --- a/source/dnode/vnode/src/tsdb/tsdbFS2.c +++ b/source/dnode/vnode/src/tsdb/tsdbFS2.c @@ -1242,10 +1242,12 @@ void tsdbFinishTaskOnFileSet(STsdb *tsdb, int32_t fid) { struct SFileSetReader { STsdb *pTsdb; + STFileSet *pFileSet; int32_t fid; int64_t startTime; int64_t endTime; - STFileSet *pFileSet; + int64_t lastCompactTime; + int64_t totalSize; }; int32_t tsdbFileSetReaderOpen(void *pVnode, struct SFileSetReader **ppReader) { @@ -1270,7 +1272,8 @@ int32_t tsdbFileSetReaderOpen(void *pVnode, struct SFileSetReader **ppReader) { } static int32_t tsdbFileSetReaderNextNoLock(struct SFileSetReader *pReader) { - STsdb *pTsdb = pReader->pTsdb; + STsdb *pTsdb = pReader->pTsdb; + int32_t code = TSDB_CODE_SUCCESS; tsdbTFileSetClear(&pReader->pFileSet); @@ -1284,9 +1287,28 @@ static int32_t tsdbFileSetReaderNextNoLock(struct SFileSetReader *pReader) { return TSDB_CODE_NOT_FOUND; } - pReader->fid = (*fsetPtr)->fid; + // ref file set + code = tsdbTFileSetInitRef(pReader->pTsdb, *fsetPtr, &pReader->pFileSet); + if (code) return code; + + // get file set details + pReader->fid = pReader->pFileSet->fid; tsdbFidKeyRange(pReader->fid, pTsdb->keepCfg.days, pTsdb->keepCfg.precision, &pReader->startTime, &pReader->endTime); - return tsdbTFileSetInitRef(pReader->pTsdb, *fsetPtr, &pReader->pFileSet); + pReader->lastCompactTime = 0; // TODO + pReader->totalSize = 0; + for (int32_t i = 0; i < TSDB_FTYPE_MAX; i++) { + STFileObj *fobj = pReader->pFileSet->farr[i]; + if (fobj) { + pReader->totalSize += fobj->f->size; + } + } + SSttLvl *lvl; + TARRAY2_FOREACH(pReader->pFileSet->lvlArr, lvl) { + STFileObj *fobj; + TARRAY2_FOREACH(lvl->fobjArr, fobj) { pReader->totalSize += fobj->f->size; } + } + + return code; } int32_t tsdbFileSetReaderNext(struct SFileSetReader *pReader) { @@ -1322,9 +1344,15 @@ int32_t tsdbFileSetGetEntryField(struct SFileSetReader *pReader, const char *fie return TSDB_CODE_SUCCESS; } + fieldName = "total_size"; + if (strncmp(field, fieldName, strlen(fieldName) + 1) == 0) { + *(int64_t *)value = pReader->totalSize; + return TSDB_CODE_SUCCESS; + } + fieldName = "last_compact_time"; if (strncmp(field, fieldName, strlen(fieldName) + 1) == 0) { - *(int64_t *)value = 0; // TODO + *(int64_t *)value = pReader->lastCompactTime; return TSDB_CODE_SUCCESS; } diff --git a/source/libs/executor/src/sysscanoperator.c b/source/libs/executor/src/sysscanoperator.c index ec71bb721b..7b79d25f96 100644 --- a/source/libs/executor/src/sysscanoperator.c +++ b/source/libs/executor/src/sysscanoperator.c @@ -2105,11 +2105,20 @@ static SSDataBlock* sysTableBuildUserFileSets(SOperatorInfo* pOperator) { code = colDataSetVal(pColInfoData, numOfRows, (char*)&endTime, false); QUERY_CHECK_CODE(code, lino, _end); + // total_size + int64_t totalSize = 0; + code = pAPI->tsdReader.fileSetGetEntryField(pInfo->pFileSetReader, "total_size", &totalSize); + QUERY_CHECK_CODE(code, lino, _end); + pColInfoData = taosArrayGet(p->pDataBlock, 6); + QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno); + code = colDataSetVal(pColInfoData, numOfRows, (char*)&totalSize, false); + QUERY_CHECK_CODE(code, lino, _end); + // last_compact int64_t lastCompacat = 0; code = pAPI->tsdReader.fileSetGetEntryField(pInfo->pFileSetReader, "last_compact_time", &lastCompacat); QUERY_CHECK_CODE(code, lino, _end); - pColInfoData = taosArrayGet(p->pDataBlock, 6); + pColInfoData = taosArrayGet(p->pDataBlock, 7); QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno); code = colDataSetVal(pColInfoData, numOfRows, (char*)&lastCompacat, false); QUERY_CHECK_CODE(code, lino, _end); @@ -2118,7 +2127,7 @@ static SSDataBlock* sysTableBuildUserFileSets(SOperatorInfo* pOperator) { bool shouldCompact = false; code = pAPI->tsdReader.fileSetGetEntryField(pInfo->pFileSetReader, "should_compact", &shouldCompact); QUERY_CHECK_CODE(code, lino, _end); - pColInfoData = taosArrayGet(p->pDataBlock, 7); + pColInfoData = taosArrayGet(p->pDataBlock, 8); QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno); code = colDataSetVal(pColInfoData, numOfRows, (char*)&shouldCompact, false); QUERY_CHECK_CODE(code, lino, _end); @@ -2127,7 +2136,7 @@ static SSDataBlock* sysTableBuildUserFileSets(SOperatorInfo* pOperator) { // const char* details = NULL; // code = pAPI->tsdReader.fileSetGetEntryField(pInfo->pFileSetReader, "details", &details); // QUERY_CHECK_CODE(code, lino, _end); - // pColInfoData = taosArrayGet(p->pDataBlock, 8); + // pColInfoData = taosArrayGet(p->pDataBlock, 9); // QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno); // code = colDataSetVal(pColInfoData, numOfRows, (char*)&vgId, false); // QUERY_CHECK_CODE(code, lino, _end);