From 47b11afe101ce7feb588c40ede1d91a63833aea9 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Thu, 16 Jun 2022 01:32:48 +0000 Subject: [PATCH] more work --- source/dnode/vnode/src/tsdb/tsdbRead.c | 9 +++- .../dnode/vnode/src/tsdb/tsdbReaderWriter.c | 47 ++++++++++++++++++- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbRead.c b/source/dnode/vnode/src/tsdb/tsdbRead.c index 2fd08126b9..aa09bbf328 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead.c @@ -15,4 +15,11 @@ #include "tsdb.h" -typedef struct STsdbReader STsdbReader; \ No newline at end of file +typedef struct STsdbReader STsdbReader; + +// https://www.geeksforgeeks.org/the-skyline-problem-using-divide-and-conquer-algorithm/ +static int32_t tsdbBuildDeleteSkyline(SArray *pDelArray, SArray *pSkylineArray) { + int32_t code = 0; + // TODO + return code; +} \ No newline at end of file diff --git a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c index 06c08c17de..a2edebaf37 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c +++ b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c @@ -670,10 +670,53 @@ _err: } int32_t tsdbWriteBlock(SDataFWriter *pWriter, SMapData *pBlockMap, uint8_t **ppBuf, SBlockIdx *pBlockIdx) { - int32_t code = 0; + int32_t code = 0; + uint8_t *pBuf = NULL; + int64_t size; + int64_t n; ASSERT(pBlockMap->nItem > 0); - // TODO + + // prepare + size = 0; + size += tPutU32(NULL, TSDB_FILE_DLMT); + size += tPutI64(NULL, pBlockIdx->suid); + size += tPutI64(NULL, pBlockIdx->uid); + size = size + tPutMapData(NULL, pBlockMap) + sizeof(TSCKSUM); + + // alloc + if (!ppBuf) ppBuf = &pBuf; + code = tsdbRealloc(ppBuf, size); + if (code) goto _err; + + // build + n = 0; + n += tPutU32(*ppBuf + n, TSDB_FILE_DLMT); + n += tPutI64(*ppBuf + n, pBlockIdx->suid); + n += tPutI64(*ppBuf + n, pBlockIdx->uid); + n += tPutMapData(*ppBuf + n, pBlockMap); + taosCalcChecksumAppend(0, *ppBuf, size); + + ASSERT(n + sizeof(TSCKSUM) == size); + + // write + n = taosWriteFile(pWriter->pHeadFD, *ppBuf, size); + if (n < 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _err; + } + + // update (todo) + // pBlockIdx->offset = -1; + pBlockIdx->size = size; + // pWriter->pSet->pHeadF.offset + + tsdbTrace("vgId:%d write block, offset:%" PRId64 " size:%" PRId64, TD_VID(pWriter->pTsdb->pVnode), pBlockIdx->offset, + pBlockIdx->size); + return code; + +_err: + tsdbError("vgId:%d write block failed since %s", TD_VID(pWriter->pTsdb->pVnode), tstrerror(code)); return code; }