From 7e8fc3b2ae93c34e5d46311988367dc02318ce82 Mon Sep 17 00:00:00 2001 From: hzcheng Date: Sat, 18 Apr 2020 16:05:07 +0800 Subject: [PATCH] TD-100 --- src/tsdb/inc/tsdbMain.h | 9 +++++--- src/tsdb/src/tsdbMain.c | 16 +++---------- src/tsdb/src/tsdbRWHelper.c | 44 ++++++++++++++++++++++++++---------- src/tsdb/tests/tsdbTests.cpp | 22 ++++-------------- 4 files changed, 45 insertions(+), 46 deletions(-) diff --git a/src/tsdb/inc/tsdbMain.h b/src/tsdb/inc/tsdbMain.h index 48181c078b..9d4b8b17f7 100644 --- a/src/tsdb/inc/tsdbMain.h +++ b/src/tsdb/inc/tsdbMain.h @@ -443,13 +443,16 @@ typedef struct { #define helperHasState(h, s) ((((h)->state) & (s)) == (s)) #define blockAtIdx(h, idx) ((h)->pCompInfo->blocks + idx) -int tsdbInitHelper(SRWHelper *pHelper, SHelperCfg *pCfg); +int tsdbInitReadHelper(SRWHelper *pHelper, STsdbRepo *pRepo); +int tsdbInitWriteHelper(SRWHelper *pHelper, STsdbRepo *pRepo); +// int tsdbInitHelper(SRWHelper *pHelper, SHelperCfg *pCfg); void tsdbDestroyHelper(SRWHelper *pHelper); void tsdbResetHelper(SRWHelper *pHelper); // --------- For set operations -int tsdbSetAndOpenHelperFile(SRWHelper *pHelper, SFileGroup *pGroup); -void tsdbSetHelperTable(SRWHelper *pHelper, SHelperTable *pHelperTable, STSchema *pSchema); +int tsdbSetAndOpenHelperFile(SRWHelper *pHelper, SFileGroup *pGroup); +// void tsdbSetHelperTable(SRWHelper *pHelper, SHelperTable *pHelperTable, STSchema *pSchema); +void tsdbSetHelperTable(SRWHelper *pHelper, STable *pTable, STsdbRepo *pRepo); int tsdbCloseHelperFile(SRWHelper *pHelper, bool hasError); // --------- For read operations diff --git a/src/tsdb/src/tsdbMain.c b/src/tsdb/src/tsdbMain.c index d09c2bba7c..d5f703ab0f 100644 --- a/src/tsdb/src/tsdbMain.c +++ b/src/tsdb/src/tsdbMain.c @@ -400,6 +400,7 @@ int tsdbInitTableCfg(STableCfg *config, ETableType type, int64_t uid, int32_t ti config->superUid = TSDB_INVALID_SUPER_TABLE_ID; config->tableId.uid = uid; config->tableId.tid = tid; + config->name = strdup("test1"); return 0; } @@ -873,16 +874,7 @@ static void *tsdbCommitData(void *arg) { return NULL; } - // Create a write helper to commit data - SHelperCfg hcfg = {.type = TSDB_WRITE_HELPER, - .maxTables = pCfg->maxTables, - .maxRowSize = pMeta->maxRowBytes, - .maxRows = pCfg->maxRowsPerFileBlock, - .maxCols = pMeta->maxCols, - .minRowsPerFileBlock = pCfg->minRowsPerFileBlock, - .maxRowsPerFileBlock = pCfg->maxRowsPerFileBlock, - .compress = pCfg->compression}; - if (tsdbInitHelper(&whelper, &hcfg) < 0) goto _exit; + if (tsdbInitWriteHelper(&whelper, pRepo) < 0) goto _exit; if ((pDataCols = tdNewDataCols(pMeta->maxRowBytes, pMeta->maxCols, pCfg->maxRowsPerFileBlock)) == NULL) goto _exit; int sfid = tsdbGetKeyFileId(pCache->imem->keyFirst, pCfg->daysPerFile, pCfg->precision); @@ -898,7 +890,6 @@ static void *tsdbCommitData(void *arg) { _exit: tdFreeDataCols(pDataCols); - tsdbDestroyHelper(&whelper); tsdbDestroyTableIters(iters, pCfg->maxTables); tsdbLockRepo(arg); @@ -948,8 +939,7 @@ static int tsdbCommitToFile(STsdbRepo *pRepo, int fid, SSkipListIterator **iters SSkipListIterator *pIter = iters[tid]; // Set the helper and the buffer dataCols object to help to write this table - SHelperTable hTable = {.uid = pTable->tableId.uid, .tid = pTable->tableId.tid, .sversion = pTable->sversion}; - tsdbSetHelperTable(pHelper, &hTable, tsdbGetTableSchema(pMeta, pTable)); + tsdbSetHelperTable(pHelper, pTable, pRepo); tdInitDataCols(pDataCols, tsdbGetTableSchema(pMeta, pTable)); // Loop to write the data in the cache to files. If no data to write, just break the loop diff --git a/src/tsdb/src/tsdbRWHelper.c b/src/tsdb/src/tsdbRWHelper.c index b3280e341c..9a42241900 100644 --- a/src/tsdb/src/tsdbRWHelper.c +++ b/src/tsdb/src/tsdbRWHelper.c @@ -18,7 +18,7 @@ #include "talgo.h" // Local function definitions -static int tsdbCheckHelperCfg(SHelperCfg *pCfg); +// static int tsdbCheckHelperCfg(SHelperCfg *pCfg); static int tsdbInitHelperFile(SRWHelper *pHelper); // static void tsdbClearHelperFile(SHelperFile *pHFile); static bool tsdbShouldCreateNewLast(SRWHelper *pHelper); @@ -102,14 +102,21 @@ static void tsdbDestroyHelperBlock(SRWHelper *pHelper) { tdFreeDataCols(pHelper->pDataCols[1]); } -// ------------------------------------------ OPERATIONS FOR OUTSIDE ------------------------------------------ -int tsdbInitHelper(SRWHelper *pHelper, SHelperCfg *pCfg) { - if (pHelper == NULL || pCfg == NULL || tsdbCheckHelperCfg(pCfg) < 0) return -1; +static int tsdbInitHelper(SRWHelper *pHelper, STsdbRepo *pRepo, tsdb_rw_helper_t type) { + if (pHelper == NULL || pRepo == NULL) return -1; memset((void *)pHelper, 0, sizeof(*pHelper)); // Init global configuration - pHelper->config = *pCfg; + pHelper->config.type = type; + pHelper->config.maxTables = pRepo->config.maxTables; + pHelper->config.maxRowSize = pRepo->tsdbMeta->maxRowBytes; + pHelper->config.maxRows = pRepo->config.maxRowsPerFileBlock; + pHelper->config.maxCols = pRepo->tsdbMeta->maxCols; + pHelper->config.minRowsPerFileBlock = pRepo->config.minRowsPerFileBlock; + pHelper->config.maxRowsPerFileBlock = pRepo->config.maxRowsPerFileBlock; + pHelper->config.compress = pRepo->config.compression; + pHelper->state = TSDB_HELPER_CLEAR_STATE; // Init file part @@ -128,6 +135,15 @@ _err: return -1; } +// ------------------------------------------ OPERATIONS FOR OUTSIDE ------------------------------------------ +int tsdbInitReadHelper(SRWHelper *pHelper, STsdbRepo *pRepo) { + return tsdbInitHelper(pHelper, pRepo, TSDB_READ_HELPER); +} + +int tsdbInitWriteHelper(SRWHelper *pHelper, STsdbRepo *pRepo) { + return tsdbInitHelper(pHelper, pRepo, TSDB_WRITE_HELPER); +} + void tsdbDestroyHelper(SRWHelper *pHelper) { if (pHelper) { tsdbDestroyHelperFile(pHelper); @@ -243,18 +259,22 @@ int tsdbCloseHelperFile(SRWHelper *pHelper, bool hasError) { return 0; } -void tsdbSetHelperTable(SRWHelper *pHelper, SHelperTable *pHelperTable, STSchema *pSchema) { +void tsdbSetHelperTable(SRWHelper *pHelper, STable *pTable, STsdbRepo *pRepo) { ASSERT(helperHasState(pHelper, TSDB_HELPER_FILE_SET_AND_OPEN | TSDB_HELPER_IDX_LOAD)); // Clear members and state used by previous table tsdbResetHelperTable(pHelper); ASSERT(pHelper->state == (TSDB_HELPER_FILE_SET_AND_OPEN | TSDB_HELPER_IDX_LOAD)); - pHelper->tableInfo = *pHelperTable; + pHelper->tableInfo.tid = pTable->tableId.tid; + pHelper->tableInfo.uid = pTable->tableId.uid; + pHelper->tableInfo.sversion = pTable->sversion; + STSchema *pSchema = tsdbGetTableSchema(pRepo->tsdbMeta, pTable); + tdInitDataCols(pHelper->pDataCols[0], pSchema); tdInitDataCols(pHelper->pDataCols[1], pSchema); - SCompIdx *pIdx = pHelper->pCompIdx + pHelperTable->tid; + SCompIdx *pIdx = pHelper->pCompIdx + pTable->tableId.tid; if (pIdx->offset > 0 && pIdx->hasLast) { pHelper->hasOldLastBlock = true; } @@ -610,10 +630,10 @@ _err: return -1; } -static int tsdbCheckHelperCfg(SHelperCfg *pCfg) { - // TODO - return 0; -} +// static int tsdbCheckHelperCfg(SHelperCfg *pCfg) { +// // TODO +// return 0; +// } // static void tsdbClearHelperFile(SHelperFile *pHFile) { // pHFile->fid = -1; diff --git a/src/tsdb/tests/tsdbTests.cpp b/src/tsdb/tests/tsdbTests.cpp index 9d1bae1832..a7d94f2362 100644 --- a/src/tsdb/tests/tsdbTests.cpp +++ b/src/tsdb/tests/tsdbTests.cpp @@ -191,29 +191,15 @@ TEST(TsdbTest, createRepo) { // Read from file SRWHelper rhelper; - SHelperCfg helperCfg = { - .type = TSDB_READ_HELPER, - .maxTables = repo->config.maxTables, - .maxRowSize = repo->tsdbMeta->maxRowBytes, - .maxRows = repo->config.maxRowsPerFileBlock, - .maxCols = repo->tsdbMeta->maxCols, - .minRowsPerFileBlock = repo->config.minRowsPerFileBlock, - .maxRowsPerFileBlock = repo->config.maxRowsPerFileBlock, - .compress = repo->config.compression, - - }; - tsdbInitHelper(&rhelper, &helperCfg); + tsdbInitReadHelper(&rhelper, repo); SFileGroup *pFGroup = tsdbSearchFGroup(repo->tsdbFileH, 1833); ASSERT_NE(pFGroup, nullptr); ASSERT_GE(tsdbSetAndOpenHelperFile(&rhelper, pFGroup), 0); - SHelperTable htable = { - .uid = tCfg.tableId.uid, - .tid = tCfg.tableId.tid, - .sversion = tCfg.sversion - }; - tsdbSetHelperTable(&rhelper, &htable, schema); + STable *pTable = tsdbGetTableByUid(repo->tsdbMeta, tCfg.tableId.uid); + ASSERT_NE(pTable, nullptr); + tsdbSetHelperTable(&rhelper, pTable, repo); ASSERT_EQ(tsdbLoadCompInfo(&rhelper, NULL), 0); ASSERT_EQ(tsdbLoadBlockData(&rhelper, 0, NULL), 0); -- GitLab