From 4ed2af9e97fe269962efdfcaf5820e1a8c7e1a38 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Mon, 13 Jun 2022 04:01:10 +0000 Subject: [PATCH] more --- source/dnode/vnode/src/inc/tsdb.h | 1 + source/dnode/vnode/src/tsdb/tsdbCommit.c | 4 +++- source/dnode/vnode/src/tsdb/tsdbReaderWriter.c | 12 ++++++++---- source/dnode/vnode/src/tsdb/tsdbUtil.c | 8 ++++++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/source/dnode/vnode/src/inc/tsdb.h b/source/dnode/vnode/src/inc/tsdb.h index 9fdb74f08d..829d3a0ca0 100644 --- a/source/dnode/vnode/src/inc/tsdb.h +++ b/source/dnode/vnode/src/inc/tsdb.h @@ -150,6 +150,7 @@ int32_t tTABLEIDCmprFn(const void *p1, const void *p2); int32_t tsdbKeyCmprFn(const void *p1, const void *p2); // SDelIdx +int32_t tDelIdxClear(SDelIdx *pDelIdx); int32_t tDelIdxPutItem(SDelIdx *pDelIdx, SDelIdxItem *pItem); int32_t tDelIdxGetItemByIdx(SDelIdx *pDelIdx, SDelIdxItem *pItem, int32_t idx); int32_t tDelIdxGetItem(SDelIdx *pDelIdx, SDelIdxItem *pItem, TABLEID id); diff --git a/source/dnode/vnode/src/tsdb/tsdbCommit.c b/source/dnode/vnode/src/tsdb/tsdbCommit.c index e73763938c..60bd9054d4 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCommit.c +++ b/source/dnode/vnode/src/tsdb/tsdbCommit.c @@ -265,6 +265,8 @@ static int32_t tsdbCommitDelEnd(SCommitter *pCommitter) { if (code) goto _err; } + tDelIdxClear(&pCommitter->delIdxNew); + return code; _err: @@ -300,7 +302,7 @@ static int32_t tsdbCommitDel(SCommitter *pCommitter) { } _exit: - tsdbDebug("vgId:%d commit del data done, nDel:%" PRId64, TD_VID(pTsdb->pVnode), pMemTable->nDel); + tsdbDebug("vgId:%d commit del done, nDel:%" PRId64, TD_VID(pTsdb->pVnode), pMemTable->nDel); return code; _err: diff --git a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c index 1bf5c9b011..2f8290987b 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c +++ b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c @@ -107,6 +107,9 @@ int32_t tsdbDelFWriterOpen(SDelFWriter **ppWriter, SDelFile *pFile, STsdb *pTsdb goto _err; } + pDelFWriter->pFile->size = TSDB_FHDR_SIZE; + pDelFWriter->pFile->offset = 0; + return code; _err: @@ -188,7 +191,6 @@ int32_t tsdbWriteDelIdx(SDelFWriter *pWriter, SDelIdx *pDelIdx, uint8_t **ppBuf) // prepare pDelIdx->delimiter = TSDB_FILE_DLMT; - // pDelIdx->nOffset = (todo) // alloc if (!ppBuf) ppBuf = &pBuf; @@ -219,7 +221,7 @@ int32_t tsdbWriteDelIdx(SDelFWriter *pWriter, SDelIdx *pDelIdx, uint8_t **ppBuf) return code; _err: - tsdbError("vgId:%d failed to write del idx since %s", TD_VID(pWriter->pTsdb->pVnode), tstrerror(code)); + tsdbError("vgId:%d write del idx failed since %s", TD_VID(pWriter->pTsdb->pVnode), tstrerror(code)); tsdbFree(pBuf); return code; } @@ -379,9 +381,12 @@ _err: int32_t tsdbReadDelIdx(SDelFReader *pReader, SDelIdx *pDelIdx, uint8_t **ppBuf) { int32_t code = 0; + int32_t n; int64_t offset = pReader->pFile->offset; int64_t size = pReader->pFile->size - offset; + ASSERT(ppBuf && *ppBuf); + // seek if (taosLSeekFile(pReader->pReadH, offset, SEEK_SET) < 0) { code = TAOS_SYSTEM_ERROR(errno); @@ -407,10 +412,9 @@ int32_t tsdbReadDelIdx(SDelFReader *pReader, SDelIdx *pDelIdx, uint8_t **ppBuf) } // decode - int32_t n = tGetDelIdx(*ppBuf, pDelIdx); + n = tGetDelIdx(*ppBuf, pDelIdx); ASSERT(n == size - sizeof(TSCKSUM)); ASSERT(pDelIdx->delimiter == TSDB_FILE_DLMT); - // ASSERT(pDelIdx->nOffset > 0 && pDelIdx->nData > 0); return code; diff --git a/source/dnode/vnode/src/tsdb/tsdbUtil.c b/source/dnode/vnode/src/tsdb/tsdbUtil.c index 91a05ab1ad..a322e786a0 100644 --- a/source/dnode/vnode/src/tsdb/tsdbUtil.c +++ b/source/dnode/vnode/src/tsdb/tsdbUtil.c @@ -15,6 +15,7 @@ #include "tsdb.h" +// SOffset ======================================================================= #define TSDB_OFFSET_I32 ((uint8_t)0) #define TSDB_OFFSET_I16 ((uint8_t)1) #define TSDB_OFFSET_I8 ((uint8_t)2) @@ -234,6 +235,13 @@ static FORCE_INLINE int32_t tGetDelIdxItem(uint8_t *p, SDelIdxItem *pDelIdxItem) } // SDelIdx ====================================================== +int32_t tDelIdxClear(SDelIdx *pDelIdx) { + int32_t code = 0; + tdbFree(pDelIdx->offset.pOffset); + tdbFree(pDelIdx->pData); + return code; +} + int32_t tDelIdxPutItem(SDelIdx *pDelIdx, SDelIdxItem *pItem) { int32_t code = 0; uint32_t offset = pDelIdx->nData;