From 023821a80b9fcf23a5cae2a205c8a9227c7b391e Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Thu, 23 Nov 2023 15:16:36 +0800 Subject: [PATCH 1/9] enh(tsdb/read-by-column): calc hint size for preloading --- source/dnode/vnode/src/tsdb/tsdbDataFileRW.c | 36 ++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c b/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c index df6b85a889..222b04ac7c 100644 --- a/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c +++ b/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c @@ -300,6 +300,42 @@ int32_t tsdbDataFileReadBlockDataByColumn(SDataFileReader *reader, const SBrinRe TSDB_CHECK_CODE(code, lino, _exit); } + int64_t szHint = 0; + if (bData->nColData > 3) { + int64_t offset = 0; + SBlockCol bc = {.cid = 0}; + SBlockCol *blockCol = &bc; + + size = 0; + SColData *colData = tBlockDataGetColDataByIdx(bData, 0); + while (blockCol && blockCol->cid < colData->cid) { + if (size < hdr->szBlkCol) { + size += tGetBlockCol(reader->config->bufArr[0] + size, blockCol); + } else { + ASSERT(size == hdr->szBlkCol); + blockCol = NULL; + } + } + + if (blockCol && blockCol->flag == HAS_VALUE) { + offset = blockCol->offset; + + SColData *colDataEnd = tBlockDataGetColDataByIdx(bData, bData->nColData); + while (blockCol && blockCol->cid < colDataEnd->cid) { + if (size < hdr->szBlkCol) { + size += tGetBlockCol(reader->config->bufArr[0] + size, blockCol); + } else { + ASSERT(size == hdr->szBlkCol); + blockCol = NULL; + } + } + + if (blockCol && blockCol->flag == HAS_VALUE) { + szHint = blockCol->offset + blockCol->szBitmap + blockCol->szOffset + blockCol->szValue - offset; + } + } + } + SBlockCol bc[1] = {{.cid = 0}}; SBlockCol *blockCol = bc; From 08e55250127f3a9d4fd68ba7193a24d57a258551 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Thu, 23 Nov 2023 15:37:26 +0800 Subject: [PATCH 2/9] tsdb/read-file-page: new arg for hint size --- source/dnode/vnode/src/tsdb/tsdbDataFileRW.c | 31 ++++++++------- source/dnode/vnode/src/tsdb/tsdbDef.h | 2 +- .../dnode/vnode/src/tsdb/tsdbReaderWriter.c | 38 +++++++++++-------- 3 files changed, 41 insertions(+), 30 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c b/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c index 222b04ac7c..68661a01cc 100644 --- a/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c +++ b/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c @@ -45,7 +45,7 @@ static int32_t tsdbDataFileReadHeadFooter(SDataFileReader *reader) { int32_t ftype = TSDB_FTYPE_HEAD; if (reader->fd[ftype]) { code = tsdbReadFile(reader->fd[ftype], reader->config->files[ftype].file.size - sizeof(SHeadFooter), - (uint8_t *)reader->headFooter, sizeof(SHeadFooter)); + (uint8_t *)reader->headFooter, sizeof(SHeadFooter), 0); TSDB_CHECK_CODE(code, lino, _exit); } @@ -67,7 +67,7 @@ static int32_t tsdbDataFileReadTombFooter(SDataFileReader *reader) { int32_t ftype = TSDB_FTYPE_TOMB; if (reader->fd[ftype]) { code = tsdbReadFile(reader->fd[ftype], reader->config->files[ftype].file.size - sizeof(STombFooter), - (uint8_t *)reader->tombFooter, sizeof(STombFooter)); + (uint8_t *)reader->tombFooter, sizeof(STombFooter), 0); TSDB_CHECK_CODE(code, lino, _exit); } reader->ctx->tombFooterLoaded = true; @@ -161,7 +161,7 @@ int32_t tsdbDataFileReadBrinBlk(SDataFileReader *reader, const TBrinBlkArray **b } code = tsdbReadFile(reader->fd[TSDB_FTYPE_HEAD], reader->headFooter->brinBlkPtr->offset, data, - reader->headFooter->brinBlkPtr->size); + reader->headFooter->brinBlkPtr->size, 0); if (code) { taosMemoryFree(data); TSDB_CHECK_CODE(code, lino, _exit); @@ -191,7 +191,8 @@ int32_t tsdbDataFileReadBrinBlock(SDataFileReader *reader, const SBrinBlk *brinB code = tRealloc(&reader->config->bufArr[0], brinBlk->dp->size); TSDB_CHECK_CODE(code, lino, _exit); - code = tsdbReadFile(reader->fd[TSDB_FTYPE_HEAD], brinBlk->dp->offset, reader->config->bufArr[0], brinBlk->dp->size); + code = + tsdbReadFile(reader->fd[TSDB_FTYPE_HEAD], brinBlk->dp->offset, reader->config->bufArr[0], brinBlk->dp->size, 0); TSDB_CHECK_CODE(code, lino, _exit); int32_t size = 0; @@ -232,7 +233,8 @@ int32_t tsdbDataFileReadBlockData(SDataFileReader *reader, const SBrinRecord *re code = tRealloc(&reader->config->bufArr[0], record->blockSize); TSDB_CHECK_CODE(code, lino, _exit); - code = tsdbReadFile(reader->fd[TSDB_FTYPE_DATA], record->blockOffset, reader->config->bufArr[0], record->blockSize); + code = + tsdbReadFile(reader->fd[TSDB_FTYPE_DATA], record->blockOffset, reader->config->bufArr[0], record->blockSize, 0); TSDB_CHECK_CODE(code, lino, _exit); code = tDecmprBlockData(reader->config->bufArr[0], record->blockSize, bData, &reader->config->bufArr[1]); @@ -257,8 +259,8 @@ int32_t tsdbDataFileReadBlockDataByColumn(SDataFileReader *reader, const SBrinRe code = tRealloc(&reader->config->bufArr[0], record->blockKeySize); TSDB_CHECK_CODE(code, lino, _exit); - code = - tsdbReadFile(reader->fd[TSDB_FTYPE_DATA], record->blockOffset, reader->config->bufArr[0], record->blockKeySize); + code = tsdbReadFile(reader->fd[TSDB_FTYPE_DATA], record->blockOffset, reader->config->bufArr[0], record->blockKeySize, + 0); TSDB_CHECK_CODE(code, lino, _exit); // hdr @@ -296,7 +298,7 @@ int32_t tsdbDataFileReadBlockDataByColumn(SDataFileReader *reader, const SBrinRe TSDB_CHECK_CODE(code, lino, _exit); code = tsdbReadFile(reader->fd[TSDB_FTYPE_DATA], record->blockOffset + record->blockKeySize, - reader->config->bufArr[0], hdr->szBlkCol); + reader->config->bufArr[0], hdr->szBlkCol, 0); TSDB_CHECK_CODE(code, lino, _exit); } @@ -374,7 +376,7 @@ int32_t tsdbDataFileReadBlockDataByColumn(SDataFileReader *reader, const SBrinRe code = tsdbReadFile(reader->fd[TSDB_FTYPE_DATA], record->blockOffset + record->blockKeySize + hdr->szBlkCol + blockCol->offset, - reader->config->bufArr[1], size1); + reader->config->bufArr[1], size1, szHint); TSDB_CHECK_CODE(code, lino, _exit); code = tsdbDecmprColData(reader->config->bufArr[1], blockCol, hdr->cmprAlg, hdr->nRow, colData, @@ -402,7 +404,7 @@ int32_t tsdbDataFileReadBlockSma(SDataFileReader *reader, const SBrinRecord *rec code = tRealloc(&reader->config->bufArr[0], record->smaSize); TSDB_CHECK_CODE(code, lino, _exit); - code = tsdbReadFile(reader->fd[TSDB_FTYPE_SMA], record->smaOffset, reader->config->bufArr[0], record->smaSize); + code = tsdbReadFile(reader->fd[TSDB_FTYPE_SMA], record->smaOffset, reader->config->bufArr[0], record->smaSize, 0); TSDB_CHECK_CODE(code, lino, _exit); // decode sma data @@ -441,7 +443,7 @@ int32_t tsdbDataFileReadTombBlk(SDataFileReader *reader, const TTombBlkArray **t } code = tsdbReadFile(reader->fd[TSDB_FTYPE_TOMB], reader->tombFooter->tombBlkPtr->offset, data, - reader->tombFooter->tombBlkPtr->size); + reader->tombFooter->tombBlkPtr->size, 0); if (code) { taosMemoryFree(data); TSDB_CHECK_CODE(code, lino, _exit); @@ -471,7 +473,8 @@ int32_t tsdbDataFileReadTombBlock(SDataFileReader *reader, const STombBlk *tombB code = tRealloc(&reader->config->bufArr[0], tombBlk->dp->size); TSDB_CHECK_CODE(code, lino, _exit); - code = tsdbReadFile(reader->fd[TSDB_FTYPE_TOMB], tombBlk->dp->offset, reader->config->bufArr[0], tombBlk->dp->size); + code = + tsdbReadFile(reader->fd[TSDB_FTYPE_TOMB], tombBlk->dp->offset, reader->config->bufArr[0], tombBlk->dp->size, 0); TSDB_CHECK_CODE(code, lino, _exit); int32_t size = 0; @@ -524,8 +527,8 @@ struct SDataFileWriter { STombBlock tombBlock[1]; int32_t tombBlockIdx; // range - SVersionRange range; - SVersionRange tombRange; + SVersionRange range; + SVersionRange tombRange; } ctx[1]; STFile files[TSDB_FTYPE_MAX]; diff --git a/source/dnode/vnode/src/tsdb/tsdbDef.h b/source/dnode/vnode/src/tsdb/tsdbDef.h index da2445dee5..0f512e1306 100644 --- a/source/dnode/vnode/src/tsdb/tsdbDef.h +++ b/source/dnode/vnode/src/tsdb/tsdbDef.h @@ -34,7 +34,7 @@ typedef struct SFDataPtr { extern int32_t tsdbOpenFile(const char *path, STsdb *pTsdb, int32_t flag, STsdbFD **ppFD); extern void tsdbCloseFile(STsdbFD **ppFD); extern int32_t tsdbWriteFile(STsdbFD *pFD, int64_t offset, const uint8_t *pBuf, int64_t size); -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, int64_t szHint); extern int32_t tsdbFsyncFile(STsdbFD *pFD); #ifdef __cplusplus diff --git a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c index 8b9cae42fc..217df923ef 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c +++ b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c @@ -283,7 +283,7 @@ _exit: return code; } -static int32_t tsdbReadFileS3(STsdbFD *pFD, int64_t offset, uint8_t *pBuf, int64_t size) { +static int32_t tsdbReadFileS3(STsdbFD *pFD, int64_t offset, uint8_t *pBuf, int64_t size, int64_t szHint) { int32_t code = 0; int64_t n = 0; int32_t szPgCont = PAGE_CONTENT_SIZE(pFD->szPage); @@ -339,7 +339,12 @@ static int32_t tsdbReadFileS3(STsdbFD *pFD, int64_t offset, uint8_t *pBuf, int64 uint8_t *pBlock = NULL; int64_t retrieve_offset = PAGE_OFFSET(pgno, pFD->szPage); int64_t pgnoEnd = pgno - 1 + (bOffset + size - n + szPgCont - 1) / szPgCont; - int64_t retrieve_size = (pgnoEnd - pgno + 1) * pFD->szPage; + + if (szHint > 0) { + pgnoEnd = pgno - 1 + (bOffset + szHint - n + szPgCont - 1) / szPgCont; + } + + int64_t retrieve_size = (pgnoEnd - pgno + 1) * pFD->szPage; code = s3GetObjectBlock(pFD->objName, retrieve_offset, retrieve_size, 1, &pBlock); if (code != TSDB_CODE_SUCCESS) { goto _exit; @@ -350,6 +355,9 @@ static int32_t tsdbReadFileS3(STsdbFD *pFD, int64_t offset, uint8_t *pBuf, int64 for (int i = 0; i < nPage; ++i) { tsdbCacheSetPageS3(pFD->pTsdb->pgCache, pFD, pgno, pBlock + i * pFD->szPage); + if (szHint > 0 && n >= size) { + continue; + } memcpy(pFD->pBuf, pBlock + i * pFD->szPage, pFD->szPage); // check @@ -375,7 +383,7 @@ _exit: return code; } -int32_t tsdbReadFile(STsdbFD *pFD, int64_t offset, uint8_t *pBuf, int64_t size) { +int32_t tsdbReadFile(STsdbFD *pFD, int64_t offset, uint8_t *pBuf, int64_t size, int64_t szHint) { int32_t code = 0; if (!pFD->pFD) { code = tsdbOpenFileImpl(pFD); @@ -385,7 +393,7 @@ int32_t tsdbReadFile(STsdbFD *pFD, int64_t offset, uint8_t *pBuf, int64_t size) } if (pFD->s3File && tsS3BlockSize < 0) { - return tsdbReadFileS3(pFD, offset, pBuf, size); + return tsdbReadFileS3(pFD, offset, pBuf, size, szHint); } else { return tsdbReadFileImp(pFD, offset, pBuf, size); } @@ -1141,7 +1149,7 @@ int32_t tsdbReadBlockIdx(SDataFReader *pReader, SArray *aBlockIdx) { if (code) goto _err; // read - code = tsdbReadFile(pReader->pHeadFD, offset, pReader->aBuf[0], size); + code = tsdbReadFile(pReader->pHeadFD, offset, pReader->aBuf[0], size, 0); if (code) goto _err; // decode @@ -1178,7 +1186,7 @@ int32_t tsdbReadSttBlk(SDataFReader *pReader, int32_t iStt, SArray *aSttBlk) { if (code) goto _err; // read - code = tsdbReadFile(pReader->aSttFD[iStt], offset, pReader->aBuf[0], size); + code = tsdbReadFile(pReader->aSttFD[iStt], offset, pReader->aBuf[0], size, 0); if (code) goto _err; // decode @@ -1211,7 +1219,7 @@ int32_t tsdbReadDataBlk(SDataFReader *pReader, SBlockIdx *pBlockIdx, SMapData *m if (code) goto _err; // read - code = tsdbReadFile(pReader->pHeadFD, offset, pReader->aBuf[0], size); + code = tsdbReadFile(pReader->pHeadFD, offset, pReader->aBuf[0], size, 0); if (code) goto _err; // decode @@ -1242,7 +1250,7 @@ int32_t tsdbReadBlockSma(SDataFReader *pReader, SDataBlk *pDataBlk, SArray *aCol if (code) goto _err; // read - code = tsdbReadFile(pReader->pSmaFD, pSmaInfo->offset, pReader->aBuf[0], pSmaInfo->size); + code = tsdbReadFile(pReader->pSmaFD, pSmaInfo->offset, pReader->aBuf[0], pSmaInfo->size, 0); if (code) goto _err; // decode @@ -1276,7 +1284,7 @@ static int32_t tsdbReadBlockDataImpl(SDataFReader *pReader, SBlockInfo *pBlkInfo code = tRealloc(&pReader->aBuf[0], pBlkInfo->szKey); if (code) goto _err; - code = tsdbReadFile(pFD, pBlkInfo->offset, pReader->aBuf[0], pBlkInfo->szKey); + code = tsdbReadFile(pFD, pBlkInfo->offset, pReader->aBuf[0], pBlkInfo->szKey, 0); if (code) goto _err; SDiskDataHdr hdr; @@ -1322,7 +1330,7 @@ static int32_t tsdbReadBlockDataImpl(SDataFReader *pReader, SBlockInfo *pBlkInfo code = tRealloc(&pReader->aBuf[0], hdr.szBlkCol); if (code) goto _err; - code = tsdbReadFile(pFD, offset, pReader->aBuf[0], hdr.szBlkCol); + code = tsdbReadFile(pFD, offset, pReader->aBuf[0], hdr.szBlkCol, 0); if (code) goto _err; } @@ -1366,7 +1374,7 @@ static int32_t tsdbReadBlockDataImpl(SDataFReader *pReader, SBlockInfo *pBlkInfo code = tRealloc(&pReader->aBuf[1], size); if (code) goto _err; - code = tsdbReadFile(pFD, offset, pReader->aBuf[1], size); + code = tsdbReadFile(pFD, offset, pReader->aBuf[1], size, 0); if (code) goto _err; code = tsdbDecmprColData(pReader->aBuf[1], pBlockCol, hdr.cmprAlg, hdr.nRow, pColData, &pReader->aBuf[2]); @@ -1392,7 +1400,7 @@ int32_t tsdbReadDataBlockEx(SDataFReader *pReader, SDataBlk *pDataBlk, SBlockDat if (code) goto _err; // read - code = tsdbReadFile(pReader->pDataFD, pBlockInfo->offset, pReader->aBuf[0], pBlockInfo->szBlock); + code = tsdbReadFile(pReader->pDataFD, pBlockInfo->offset, pReader->aBuf[0], pBlockInfo->szBlock, 0); if (code) goto _err; // decmpr @@ -1444,7 +1452,7 @@ int32_t tsdbReadSttBlockEx(SDataFReader *pReader, int32_t iStt, SSttBlk *pSttBlk TSDB_CHECK_CODE(code, lino, _exit); // read - code = tsdbReadFile(pReader->aSttFD[iStt], pSttBlk->bInfo.offset, pReader->aBuf[0], pSttBlk->bInfo.szBlock); + code = tsdbReadFile(pReader->aSttFD[iStt], pSttBlk->bInfo.offset, pReader->aBuf[0], pSttBlk->bInfo.szBlock, 0); TSDB_CHECK_CODE(code, lino, _exit); // decmpr @@ -1700,7 +1708,7 @@ int32_t tsdbReadDelDatav1(SDelFReader *pReader, SDelIdx *pDelIdx, SArray *aDelDa if (code) goto _err; // read - code = tsdbReadFile(pReader->pReadH, offset, pReader->aBuf[0], size); + code = tsdbReadFile(pReader->pReadH, offset, pReader->aBuf[0], size, 0); if (code) goto _err; // // decode @@ -1740,7 +1748,7 @@ int32_t tsdbReadDelIdx(SDelFReader *pReader, SArray *aDelIdx) { if (code) goto _err; // read - code = tsdbReadFile(pReader->pReadH, offset, pReader->aBuf[0], size); + code = tsdbReadFile(pReader->pReadH, offset, pReader->aBuf[0], size, 0); if (code) goto _err; // decode From c6721be1126b47062ff5722146acf1a4732d1bab Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Thu, 23 Nov 2023 15:49:42 +0800 Subject: [PATCH 3/9] fix stt read compilation --- source/dnode/vnode/src/tsdb/tsdbSttFileRW.c | 23 +++++++++++---------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbSttFileRW.c b/source/dnode/vnode/src/tsdb/tsdbSttFileRW.c index 7c3b185e20..f26c6540df 100644 --- a/source/dnode/vnode/src/tsdb/tsdbSttFileRW.c +++ b/source/dnode/vnode/src/tsdb/tsdbSttFileRW.c @@ -60,7 +60,7 @@ int32_t tsdbSttFileReaderOpen(const char *fname, const SSttFileReaderConfig *con int64_t offset = config->file->size - sizeof(SSttFooter); ASSERT(offset >= TSDB_FHDR_SIZE); - code = tsdbReadFile(reader[0]->fd, offset, (uint8_t *)(reader[0]->footer), sizeof(SSttFooter)); + code = tsdbReadFile(reader[0]->fd, offset, (uint8_t *)(reader[0]->footer), sizeof(SSttFooter), 0); TSDB_CHECK_CODE(code, lino, _exit); _exit: @@ -97,7 +97,7 @@ int32_t tsdbSttFileReadStatisBlk(SSttFileReader *reader, const TStatisBlkArray * if (!data) return TSDB_CODE_OUT_OF_MEMORY; int32_t code = - tsdbReadFile(reader->fd, reader->footer->statisBlkPtr->offset, data, reader->footer->statisBlkPtr->size); + tsdbReadFile(reader->fd, reader->footer->statisBlkPtr->offset, data, reader->footer->statisBlkPtr->size, 0); if (code) { taosMemoryFree(data); return code; @@ -125,7 +125,7 @@ int32_t tsdbSttFileReadTombBlk(SSttFileReader *reader, const TTombBlkArray **tom if (!data) return TSDB_CODE_OUT_OF_MEMORY; int32_t code = - tsdbReadFile(reader->fd, reader->footer->tombBlkPtr->offset, data, reader->footer->tombBlkPtr->size); + tsdbReadFile(reader->fd, reader->footer->tombBlkPtr->offset, data, reader->footer->tombBlkPtr->size, 0); if (code) { taosMemoryFree(data); return code; @@ -152,7 +152,8 @@ int32_t tsdbSttFileReadSttBlk(SSttFileReader *reader, const TSttBlkArray **sttBl void *data = taosMemoryMalloc(reader->footer->sttBlkPtr->size); if (!data) return TSDB_CODE_OUT_OF_MEMORY; - int32_t code = tsdbReadFile(reader->fd, reader->footer->sttBlkPtr->offset, data, reader->footer->sttBlkPtr->size); + int32_t code = + tsdbReadFile(reader->fd, reader->footer->sttBlkPtr->offset, data, reader->footer->sttBlkPtr->size, 0); if (code) { taosMemoryFree(data); return code; @@ -177,7 +178,7 @@ int32_t tsdbSttFileReadBlockData(SSttFileReader *reader, const SSttBlk *sttBlk, code = tRealloc(&reader->config->bufArr[0], sttBlk->bInfo.szBlock); TSDB_CHECK_CODE(code, lino, _exit); - code = tsdbReadFile(reader->fd, sttBlk->bInfo.offset, reader->config->bufArr[0], sttBlk->bInfo.szBlock); + code = tsdbReadFile(reader->fd, sttBlk->bInfo.offset, reader->config->bufArr[0], sttBlk->bInfo.szBlock, 0); TSDB_CHECK_CODE(code, lino, _exit); code = tDecmprBlockData(reader->config->bufArr[0], sttBlk->bInfo.szBlock, bData, &reader->config->bufArr[1]); @@ -209,7 +210,7 @@ int32_t tsdbSttFileReadBlockDataByColumn(SSttFileReader *reader, const SSttBlk * code = tRealloc(&reader->config->bufArr[0], sttBlk->bInfo.szKey); TSDB_CHECK_CODE(code, lino, _exit); - code = tsdbReadFile(reader->fd, sttBlk->bInfo.offset, reader->config->bufArr[0], sttBlk->bInfo.szKey); + code = tsdbReadFile(reader->fd, sttBlk->bInfo.offset, reader->config->bufArr[0], sttBlk->bInfo.szKey, 0); TSDB_CHECK_CODE(code, lino, _exit); // hdr @@ -255,7 +256,7 @@ int32_t tsdbSttFileReadBlockDataByColumn(SSttFileReader *reader, const SSttBlk * TSDB_CHECK_CODE(code, lino, _exit); code = tsdbReadFile(reader->fd, sttBlk->bInfo.offset + sttBlk->bInfo.szKey, reader->config->bufArr[0], - hdr->szBlkCol); + hdr->szBlkCol, 0); TSDB_CHECK_CODE(code, lino, _exit); } @@ -296,7 +297,7 @@ int32_t tsdbSttFileReadBlockDataByColumn(SSttFileReader *reader, const SSttBlk * TSDB_CHECK_CODE(code, lino, _exit); code = tsdbReadFile(reader->fd, sttBlk->bInfo.offset + sttBlk->bInfo.szKey + hdr->szBlkCol + blockCol->offset, - reader->config->bufArr[1], size1); + reader->config->bufArr[1], size1, 0); TSDB_CHECK_CODE(code, lino, _exit); code = tsdbDecmprColData(reader->config->bufArr[1], blockCol, hdr->cmprAlg, hdr->nRow, colData, @@ -321,7 +322,7 @@ int32_t tsdbSttFileReadTombBlock(SSttFileReader *reader, const STombBlk *tombBlk code = tRealloc(&reader->config->bufArr[0], tombBlk->dp->size); TSDB_CHECK_CODE(code, lino, _exit); - code = tsdbReadFile(reader->fd, tombBlk->dp->offset, reader->config->bufArr[0], tombBlk->dp->size); + code = tsdbReadFile(reader->fd, tombBlk->dp->offset, reader->config->bufArr[0], tombBlk->dp->size, 0); if (code) TSDB_CHECK_CODE(code, lino, _exit); int64_t size = 0; @@ -352,7 +353,7 @@ int32_t tsdbSttFileReadStatisBlock(SSttFileReader *reader, const SStatisBlk *sta code = tRealloc(&reader->config->bufArr[0], statisBlk->dp->size); TSDB_CHECK_CODE(code, lino, _exit); - code = tsdbReadFile(reader->fd, statisBlk->dp->offset, reader->config->bufArr[0], statisBlk->dp->size); + code = tsdbReadFile(reader->fd, statisBlk->dp->offset, reader->config->bufArr[0], statisBlk->dp->size, 0); TSDB_CHECK_CODE(code, lino, _exit); int64_t size = 0; @@ -405,7 +406,7 @@ struct SSttFileWriter { }; static int32_t tsdbFileDoWriteSttBlockData(STsdbFD *fd, SBlockData *blockData, int8_t cmprAlg, int64_t *fileSize, - TSttBlkArray *sttBlkArray, uint8_t **bufArr, SVersionRange *range) { + TSttBlkArray *sttBlkArray, uint8_t **bufArr, SVersionRange *range) { if (blockData->nRow == 0) return 0; int32_t code = 0; From 460638d29465940b497a813cdd78e8b9d638d529 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Thu, 23 Nov 2023 16:09:02 +0800 Subject: [PATCH 4/9] enh(tsdb/open-file): new s3 failed to connect error code --- include/util/taoserror.h | 1 + source/common/src/cos.c | 2 ++ source/dnode/vnode/src/tsdb/tsdbReaderWriter.c | 12 +++++++++++- source/util/src/terror.c | 1 + 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/util/taoserror.h b/include/util/taoserror.h index ce8db162b6..0256a496df 100644 --- a/include/util/taoserror.h +++ b/include/util/taoserror.h @@ -124,6 +124,7 @@ int32_t* taosGetErrno(); #define TSDB_CODE_INVALID_CFG_VALUE TAOS_DEF_ERROR_CODE(0, 0x0133) #define TSDB_CODE_IP_NOT_IN_WHITE_LIST TAOS_DEF_ERROR_CODE(0, 0x0134) +#define TSDB_CODE_FAILED_TO_CONNECT_S3 TAOS_DEF_ERROR_CODE(0, 0x0135) //client #define TSDB_CODE_TSC_INVALID_OPERATION TAOS_DEF_ERROR_CODE(0, 0x0200) diff --git a/source/common/src/cos.c b/source/common/src/cos.c index 1dca5eda9b..2a334a34b8 100644 --- a/source/common/src/cos.c +++ b/source/common/src/cos.c @@ -891,6 +891,8 @@ long s3Size(const char *object_name) { if ((cbd.status != S3StatusOK) && (cbd.status != S3StatusErrorPreconditionFailed)) { s3PrintError(__FILE__, __LINE__, __func__, cbd.status, cbd.err_msg); + + return -1; } size = cbd.content_length; diff --git a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c index 217df923ef..d36d15f9b4 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c +++ b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c @@ -26,7 +26,17 @@ static int32_t tsdbOpenFileImpl(STsdbFD *pFD) { if (pFD->pFD == NULL) { int errsv = errno; const char *object_name = taosDirEntryBaseName((char *)path); - long s3_size = tsS3Enabled ? s3Size(object_name) : 0; + long s3_size = 0; + if (tsS3Enabled) { + long size = s3Size(object_name); + if (size < 0) { + code = terrno = TSDB_CODE_FAILED_TO_CONNECT_S3; + goto _exit; + } + + s3_size = size; + } + if (tsS3Enabled && !strncmp(path + strlen(path) - 5, ".data", 5) && s3_size > 0) { #ifndef S3_BLOCK_CACHE s3EvictCache(path, s3_size); diff --git a/source/util/src/terror.c b/source/util/src/terror.c index f310db53ef..8847b7d894 100644 --- a/source/util/src/terror.c +++ b/source/util/src/terror.c @@ -101,6 +101,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_APP_IS_STOPPING, "Database is closing d TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_DATA_FMT, "Invalid data format") TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_CFG_VALUE, "Invalid configuration value") TAOS_DEFINE_ERROR(TSDB_CODE_IP_NOT_IN_WHITE_LIST, "Not allowed to connect") +TAOS_DEFINE_ERROR(TSDB_CODE_FAILED_TO_CONNECT_S3, "Failed to connect to s3 server") //client TAOS_DEFINE_ERROR(TSDB_CODE_TSC_INVALID_OPERATION, "Invalid operation") From f076bfdfcaaa2b0c352f8a05a86dbed6ad4d15cb Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Thu, 23 Nov 2023 16:19:26 +0800 Subject: [PATCH 5/9] fix(tsdb/skip-row): remove s3 size condition --- source/dnode/vnode/src/tsdb/tsdbCommit2.c | 2 +- source/dnode/vnode/src/tsdb/tsdbFS2.c | 2 +- source/dnode/vnode/src/tsdb/tsdbMerge.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbCommit2.c b/source/dnode/vnode/src/tsdb/tsdbCommit2.c index 48b622e324..a974eb27bf 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCommit2.c +++ b/source/dnode/vnode/src/tsdb/tsdbCommit2.c @@ -421,7 +421,7 @@ static int32_t tsdbCommitFileSetBegin(SCommitter2 *committer) { if (mtime < committer->ctx->now - tsS3UploadDelaySec) { committer->ctx->skipTsRow = true; } - } else if (s3Size(object_name) > 0) { + } else /*if (s3Size(object_name) > 0) */ { committer->ctx->skipTsRow = true; } } diff --git a/source/dnode/vnode/src/tsdb/tsdbFS2.c b/source/dnode/vnode/src/tsdb/tsdbFS2.c index 70a83ebdbb..2feef20649 100644 --- a/source/dnode/vnode/src/tsdb/tsdbFS2.c +++ b/source/dnode/vnode/src/tsdb/tsdbFS2.c @@ -901,7 +901,7 @@ int32_t tsdbFSEditCommit(STFileSystem *fs) { if (mtime < now - tsS3UploadDelaySec) { skipMerge = true; } - } else if (s3Size(object_name) > 0) { + } else /* if (s3Size(object_name) > 0) */ { skipMerge = true; } } diff --git a/source/dnode/vnode/src/tsdb/tsdbMerge.c b/source/dnode/vnode/src/tsdb/tsdbMerge.c index 7babaa6e28..6d968d0828 100644 --- a/source/dnode/vnode/src/tsdb/tsdbMerge.c +++ b/source/dnode/vnode/src/tsdb/tsdbMerge.c @@ -568,7 +568,7 @@ static int32_t tsdbMerge(void *arg) { if (mtime < now - tsS3UploadDelaySec) { skipMerge = true; } - } else if (s3Size(object_name) > 0) { + } else /* if (s3Size(object_name) > 0) */ { skipMerge = true; } } From 3034ca2875b15e95b5916abcccf75550c1f87447 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Thu, 23 Nov 2023 16:25:39 +0800 Subject: [PATCH 6/9] tsdb/open-file: log not exist file path --- source/dnode/vnode/src/tsdb/tsdbReaderWriter.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c index d36d15f9b4..abcba75b53 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c +++ b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c @@ -58,6 +58,7 @@ static int32_t tsdbOpenFileImpl(STsdbFD *pFD) { // pFD->szFile = s3_size; #endif } else { + tsdbInfo("no file: %s", path); code = TAOS_SYSTEM_ERROR(errsv); // taosMemoryFree(pFD); goto _exit; From 9334fbcb06d9859e1073dee77c2951b813ea5962 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Thu, 23 Nov 2023 17:14:26 +0800 Subject: [PATCH 7/9] tsdb/read-by-column: zero hint size when i's nonzero --- source/dnode/vnode/src/tsdb/tsdbDataFileRW.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c b/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c index 68661a01cc..4847ab0e33 100644 --- a/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c +++ b/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c @@ -376,7 +376,7 @@ int32_t tsdbDataFileReadBlockDataByColumn(SDataFileReader *reader, const SBrinRe code = tsdbReadFile(reader->fd[TSDB_FTYPE_DATA], record->blockOffset + record->blockKeySize + hdr->szBlkCol + blockCol->offset, - reader->config->bufArr[1], size1, szHint); + reader->config->bufArr[1], size1, i > 0 ? 0 : szHint); TSDB_CHECK_CODE(code, lino, _exit); code = tsdbDecmprColData(reader->config->bufArr[1], blockCol, hdr->cmprAlg, hdr->nRow, colData, From 3c3763a7742208544c62392d2259965502676635 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Thu, 23 Nov 2023 17:30:49 +0800 Subject: [PATCH 8/9] tsdb/read-by-column: fix last column index --- source/dnode/vnode/src/tsdb/tsdbDataFileRW.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c b/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c index 4847ab0e33..e1625c9ddb 100644 --- a/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c +++ b/source/dnode/vnode/src/tsdb/tsdbDataFileRW.c @@ -322,7 +322,7 @@ int32_t tsdbDataFileReadBlockDataByColumn(SDataFileReader *reader, const SBrinRe if (blockCol && blockCol->flag == HAS_VALUE) { offset = blockCol->offset; - SColData *colDataEnd = tBlockDataGetColDataByIdx(bData, bData->nColData); + SColData *colDataEnd = tBlockDataGetColDataByIdx(bData, bData->nColData - 1); while (blockCol && blockCol->cid < colDataEnd->cid) { if (size < hdr->szBlkCol) { size += tGetBlockCol(reader->config->bufArr[0] + size, blockCol); From b1841ee97b57d83bc298391ac9c731c70b6c1c7e Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Fri, 24 Nov 2023 09:06:43 +0800 Subject: [PATCH 9/9] tsdb/reader-writer: fix pgno iteration with cache setting --- source/dnode/vnode/src/tsdb/tsdbReaderWriter.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c index abcba75b53..e6f419362c 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c +++ b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c @@ -341,7 +341,7 @@ static int32_t tsdbReadFileS3(STsdbFD *pFD, int64_t offset, uint8_t *pBuf, int64 memcpy(pBuf + n, pFD->pBuf + bOffset, nRead); n += nRead; - pgno++; + ++pgno; bOffset = 0; } @@ -367,6 +367,7 @@ static int32_t tsdbReadFileS3(STsdbFD *pFD, int64_t offset, uint8_t *pBuf, int64 tsdbCacheSetPageS3(pFD->pTsdb->pgCache, pFD, pgno, pBlock + i * pFD->szPage); if (szHint > 0 && n >= size) { + ++pgno; continue; } memcpy(pFD->pBuf, pBlock + i * pFD->szPage, pFD->szPage); @@ -383,7 +384,7 @@ static int32_t tsdbReadFileS3(STsdbFD *pFD, int64_t offset, uint8_t *pBuf, int64 memcpy(pBuf + n, pFD->pBuf + bOffset, nRead); n += nRead; - pgno++; + ++pgno; bOffset = 0; }