From 78018b3a167acfa79cde0db80b1de16b6574d8a6 Mon Sep 17 00:00:00 2001 From: kailixu Date: Fri, 27 Dec 2024 17:05:09 +0800 Subject: [PATCH] test: add test case for auto compact --- source/common/src/systable.c | 3 ++ source/dnode/mnode/impl/src/mndDb.c | 30 ++++++++++++++++--- .../0-others/information_schema.py | 2 +- tests/system-test/1-insert/alter_database.py | 13 +++++--- 4 files changed, 39 insertions(+), 9 deletions(-) diff --git a/source/common/src/systable.c b/source/common/src/systable.c index 38dce105bb..1f018606a8 100644 --- a/source/common/src/systable.c +++ b/source/common/src/systable.c @@ -123,6 +123,9 @@ static const SSysDbTableSchema userDBSchema[] = { {.name = "s3_compact", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true}, {.name = "with_arbitrator", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true}, {.name = "encrypt_algorithm", .bytes = TSDB_ENCRYPT_ALGO_STR_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true}, + {.name = "compact_interval", .bytes = 12 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true}, + {.name = "compact_time_range", .bytes = 24 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true}, + {.name = "compact_time_offset", .bytes = 4 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true}, }; static const SSysDbTableSchema userFuncSchema[] = { diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c index 1efbff9d53..02e13e9951 100644 --- a/source/dnode/mnode/impl/src/mndDb.c +++ b/source/dnode/mnode/impl/src/mndDb.c @@ -2435,6 +2435,7 @@ static void mndDumpDbInfoData(SMnode *pMnode, SSDataBlock *pBlock, SDbObj *pDb, pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); TAOS_CHECK_GOTO(colDataSetVal(pColInfo, rows, (const char *)strictVstr, false), &lino, _OVER); + char durationStr[128] = {0}; char durationVstr[128] = {0}; int32_t len = formatDurationOrKeep(&durationVstr[VARSTR_HEADER_SIZE], sizeof(durationVstr) - VARSTR_HEADER_SIZE, pDb->cfg.daysPerFile); @@ -2443,10 +2444,10 @@ static void mndDumpDbInfoData(SMnode *pMnode, SSDataBlock *pBlock, SDbObj *pDb, pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); TAOS_CHECK_GOTO(colDataSetVal(pColInfo, rows, (const char *)durationVstr, false), &lino, _OVER); - char keepVstr[512] = {0}; - char keep0Str[128] = {0}; - char keep1Str[128] = {0}; - char keep2Str[128] = {0}; + char keepVstr[128] = {0}; + char keep0Str[32] = {0}; + char keep1Str[32] = {0}; + char keep2Str[32] = {0}; int32_t lenKeep0 = formatDurationOrKeep(keep0Str, sizeof(keep0Str), pDb->cfg.daysToKeep0); int32_t lenKeep1 = formatDurationOrKeep(keep1Str, sizeof(keep1Str), pDb->cfg.daysToKeep1); @@ -2559,6 +2560,27 @@ static void mndDumpDbInfoData(SMnode *pMnode, SSDataBlock *pBlock, SDbObj *pDb, STR_WITH_MAXSIZE_TO_VARSTR(encryptAlgorithmVStr, encryptAlgorithmStr, 24); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); TAOS_CHECK_GOTO(colDataSetVal(pColInfo, rows, (const char *)encryptAlgorithmVStr, false), &lino, _OVER); + + formatDurationOrKeep(durationStr, sizeof(durationStr), pDb->cfg.compactInterval); + STR_WITH_MAXSIZE_TO_VARSTR(durationVstr, durationStr, sizeof(durationVstr)); + pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); + if (pColInfo) { + TAOS_CHECK_GOTO(colDataSetVal(pColInfo, rows, (const char *)durationVstr, false), &lino, _OVER); + } + + len = formatDurationOrKeep(durationStr, sizeof(durationStr), pDb->cfg.compactStartTime); + formatDurationOrKeep(durationVstr, sizeof(durationVstr), pDb->cfg.compactEndTime); + snprintf(durationStr + len, sizeof(durationStr) - len, ",%s", durationVstr); + STR_WITH_MAXSIZE_TO_VARSTR(durationVstr, durationStr, sizeof(durationVstr)); + if ((pColInfo = taosArrayGet(pBlock->pDataBlock, cols++))) { + TAOS_CHECK_GOTO(colDataSetVal(pColInfo, rows, (const char *)durationVstr, false), &lino, _OVER); + } + + snprintf(durationStr, sizeof(durationStr), "%dh", pDb->cfg.compactTimeOffset); + STR_WITH_MAXSIZE_TO_VARSTR(durationVstr, durationStr, sizeof(durationVstr)); + if ((pColInfo = taosArrayGet(pBlock->pDataBlock, cols++))) { + TAOS_CHECK_GOTO(colDataSetVal(pColInfo, rows, (const char *)durationVstr, false), &lino, _OVER); + } } _OVER: if (code != 0) mError("failed to retrieve at line:%d, since %s", lino, tstrerror(code)); diff --git a/tests/system-test/0-others/information_schema.py b/tests/system-test/0-others/information_schema.py index 8c25b70b76..390bf3d9dd 100644 --- a/tests/system-test/0-others/information_schema.py +++ b/tests/system-test/0-others/information_schema.py @@ -222,7 +222,7 @@ class TDTestCase: tdSql.query("select * from information_schema.ins_columns where db_name ='information_schema'") tdLog.info(len(tdSql.queryResult)) - tdSql.checkEqual(True, len(tdSql.queryResult) in range(309, 310)) + tdSql.checkEqual(True, len(tdSql.queryResult) in range(312, 313)) tdSql.query("select * from information_schema.ins_columns where db_name ='performance_schema'") tdSql.checkEqual(61, len(tdSql.queryResult)) diff --git a/tests/system-test/1-insert/alter_database.py b/tests/system-test/1-insert/alter_database.py index f58bb7517e..47ad142bc4 100644 --- a/tests/system-test/1-insert/alter_database.py +++ b/tests/system-test/1-insert/alter_database.py @@ -75,6 +75,10 @@ class TDTestCase: tdSql.checkEqual("Invalid option encrypt_algorithm: none ", tdSql.error('alter database db encrypt_algorithm \'none \'')) tdSql.execute('drop database db') + def alter_compact(self): + tdSql.error('create database db compact_time_range 60,61', expectErrInfo="Invalid option compact_time_range: 86400m, start_time should be in range: [-5256000m, -14400m]", fullMatched=True) + tdSql.execute('drop database db') + def alter_same_options(self): tdSql.execute('drop database if exists db') tdSql.execute('create database db') @@ -101,10 +105,11 @@ class TDTestCase: def run(self): - self.alter_buffer() - self.alter_pages() - self.alter_encrypt_alrogithm() - self.alter_same_options() + # self.alter_buffer() + # self.alter_pages() + # self.alter_encrypt_alrogithm() + # self.alter_same_options() + self.alter_compact() def stop(self): tdSql.close()