From f2401f32a2f2cf49acb46615cee500d9324a355f Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 12 Jun 2024 15:14:38 +0800 Subject: [PATCH 01/10] enh: support enable/disable tfs config entries --- include/util/tdef.h | 5 +- source/common/src/tglobal.c | 3 + source/dnode/mgmt/node_mgmt/src/dmEnv.c | 4 +- source/dnode/vnode/test/tsdbSmaTest.cpp | 1 + source/libs/tfs/src/tfs.c | 18 ++++++ source/libs/tfs/test/tfsTest.cpp | 12 ++++ source/util/src/tconfig.c | 79 ++++++++++++++++--------- 7 files changed, 89 insertions(+), 33 deletions(-) diff --git a/include/util/tdef.h b/include/util/tdef.h index 905a50886a..b813d590a4 100644 --- a/include/util/tdef.h +++ b/include/util/tdef.h @@ -539,6 +539,8 @@ typedef enum ELogicConditionType { #define TFS_MAX_LEVEL (TFS_MAX_TIERS - 1) #define TFS_PRIMARY_LEVEL 0 #define TFS_PRIMARY_ID 0 +#define TFS_ENTRY_DISABLE 0 +#define TFS_ENTRY_ENABLE 1 #define TFS_MIN_DISK_FREE_SIZE 50 * 1024 * 1024 enum { TRANS_STAT_INIT = 0, TRANS_STAT_EXECUTING, TRANS_STAT_EXECUTED, TRANS_STAT_ROLLBACKING, TRANS_STAT_ROLLBACKED }; @@ -548,7 +550,8 @@ enum { ENCRYPT_KEY_STAT_UNKNOWN = 0, ENCRYPT_KEY_STAT_UNSET, ENCRYPT_KEY_STAT_SE typedef struct { char dir[TSDB_FILENAME_LEN]; int32_t level; - int32_t primary; + int8_t primary; + int8_t enable; } SDiskCfg; typedef struct { diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index c68dc85c29..169bcf56a5 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -221,6 +221,8 @@ int32_t tsDiskCfgNum = 0; SDiskCfg tsDiskCfg[TFS_MAX_DISKS] = {0}; int64_t tsMinDiskFreeSize = TFS_MIN_DISK_FREE_SIZE; +int a = sizeof(tsDiskCfg); + // stream scheduler bool tsDeployOnSnode = true; @@ -325,6 +327,7 @@ int32_t taosSetTfsCfg(SConfig *pCfg) { tstrncpy(tsDiskCfg[0].dir, pItem->str, TSDB_FILENAME_LEN); tsDiskCfg[0].level = 0; tsDiskCfg[0].primary = 1; + tsDiskCfg[0].enable = 1; tstrncpy(tsDataDir, pItem->str, PATH_MAX); if (taosMulMkDir(tsDataDir) != 0) { uError("failed to create dataDir:%s", tsDataDir); diff --git a/source/dnode/mgmt/node_mgmt/src/dmEnv.c b/source/dnode/mgmt/node_mgmt/src/dmEnv.c index 5b1f31e6c6..d6031dee15 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmEnv.c +++ b/source/dnode/mgmt/node_mgmt/src/dmEnv.c @@ -110,10 +110,8 @@ static bool dmCheckDiskSpace() { int32_t dmDiskInit() { SDnode *pDnode = dmInstance(); - SDiskCfg dCfg = {0}; + SDiskCfg dCfg = {.level = 0, .primary = 1, .enable = 1}; tstrncpy(dCfg.dir, tsDataDir, TSDB_FILENAME_LEN); - dCfg.level = 0; - dCfg.primary = 1; SDiskCfg *pDisks = tsDiskCfg; int32_t numOfDisks = tsDiskCfgNum; if (numOfDisks <= 0 || pDisks == NULL) { diff --git a/source/dnode/vnode/test/tsdbSmaTest.cpp b/source/dnode/vnode/test/tsdbSmaTest.cpp index 43eaacfff9..e0e4f45feb 100644 --- a/source/dnode/vnode/test/tsdbSmaTest.cpp +++ b/source/dnode/vnode/test/tsdbSmaTest.cpp @@ -368,6 +368,7 @@ TEST(testCase, tSma_Data_Insert_Query_Test) { SDiskCfg pDisks = {0}; pDisks.level = 0; pDisks.primary = 1; + pDisks.enable = 1; strncpy(pDisks.dir, TD_DATA_DIR_PATH, TSDB_FILENAME_LEN); int32_t numOfDisks = 1; pTsdb->pTfs = tfsOpen(&pDisks, numOfDisks); diff --git a/source/libs/tfs/src/tfs.c b/source/libs/tfs/src/tfs.c index e7c4573c14..dd93b25186 100644 --- a/source/libs/tfs/src/tfs.c +++ b/source/libs/tfs/src/tfs.c @@ -519,6 +519,18 @@ static int32_t tfsCheckAndFormatCfg(STfs *pTfs, SDiskCfg *pCfg) { return -1; } + if (pCfg->primary < 0 || pCfg->primary > 1) { + fError("failed to mount %s to FS since invalid primary %" PRIi8, pCfg->dir, pCfg->primary); + terrno = TSDB_CODE_FS_INVLD_CFG; + return -1; + } + + if (pCfg->enable < 0 || pCfg->enable > 1) { + fError("failed to mount %s to FS since invalid enable %" PRIi8, pCfg->dir, pCfg->enable); + terrno = TSDB_CODE_FS_INVLD_CFG; + return -1; + } + if (pCfg->primary) { if (pCfg->level != 0) { fError("failed to mount %s to FS since disk is primary but level %d not 0", pCfg->dir, pCfg->level); @@ -526,6 +538,12 @@ static int32_t tfsCheckAndFormatCfg(STfs *pTfs, SDiskCfg *pCfg) { return -1; } + if (pCfg->enable == 0) { + fError("failed to mount %s to FS since disk is primary but enable %" PRIi8 " not 1", pCfg->dir, pCfg->enable); + terrno = TSDB_CODE_FS_INVLD_CFG; + return -1; + } + if (TFS_PRIMARY_DISK(pTfs) != NULL) { fError("failed to mount %s to FS since duplicate primary mount", pCfg->dir); terrno = TSDB_CODE_FS_DUP_PRIMARY; diff --git a/source/libs/tfs/test/tfsTest.cpp b/source/libs/tfs/test/tfsTest.cpp index 1f16e585ae..2c895f698a 100644 --- a/source/libs/tfs/test/tfsTest.cpp +++ b/source/libs/tfs/test/tfsTest.cpp @@ -37,6 +37,7 @@ TEST_F(TfsTest, 01_Open_Close) { tstrncpy(dCfg.dir, root, TSDB_FILENAME_LEN); dCfg.level = 0; dCfg.primary = 1; + dCfg.enable = 1; taosRemoveDir(root); STfs *pTfs = tfsOpen(&dCfg, 1); @@ -63,6 +64,7 @@ TEST_F(TfsTest, 02_AllocDisk) { tstrncpy(dCfg.dir, root, TSDB_FILENAME_LEN); dCfg.level = 0; dCfg.primary = 1; + dCfg.enable = 1; taosRemoveDir(root); taosMkDir(root); @@ -114,6 +116,7 @@ TEST_F(TfsTest, 03_Dir) { tstrncpy(dCfg.dir, root, TSDB_FILENAME_LEN); dCfg.level = 0; dCfg.primary = 1; + dCfg.enable = 1; taosRemoveDir(root); taosMkDir(root); @@ -330,30 +333,39 @@ TEST_F(TfsTest, 05_MultiDisk) { tstrncpy(dCfg[0].dir, root01, TSDB_FILENAME_LEN); dCfg[0].level = 0; dCfg[0].primary = 0; + dCfg[0].enable = 1; tstrncpy(dCfg[1].dir, root00, TSDB_FILENAME_LEN); dCfg[1].level = 0; dCfg[1].primary = 0; + dCfg[1].enable = 1; tstrncpy(dCfg[2].dir, root20, TSDB_FILENAME_LEN); dCfg[2].level = 2; dCfg[2].primary = 0; + dCfg[2].enable = 1; tstrncpy(dCfg[3].dir, root21, TSDB_FILENAME_LEN); dCfg[3].level = 2; dCfg[3].primary = 0; + dCfg[3].enable = 1; tstrncpy(dCfg[4].dir, root22, TSDB_FILENAME_LEN); dCfg[4].level = 2; dCfg[4].primary = 0; + dCfg[4].enable = 1; tstrncpy(dCfg[5].dir, root23, TSDB_FILENAME_LEN); dCfg[5].level = 2; dCfg[5].primary = 0; + dCfg[5].enable = 1; tstrncpy(dCfg[6].dir, root10, TSDB_FILENAME_LEN); dCfg[6].level = 1; dCfg[6].primary = 0; + dCfg[6].enable = 1; tstrncpy(dCfg[7].dir, root11, TSDB_FILENAME_LEN); dCfg[7].level = 1; dCfg[7].primary = 0; + dCfg[7].enable = 1; tstrncpy(dCfg[8].dir, root12, TSDB_FILENAME_LEN); dCfg[8].level = 1; dCfg[8].primary = 0; + dCfg[8].enable = 1; taosRemoveDir(root00); taosRemoveDir(root01); diff --git a/source/util/src/tconfig.c b/source/util/src/tconfig.c index d05d616233..6aad5cae28 100644 --- a/source/util/src/tconfig.c +++ b/source/util/src/tconfig.c @@ -259,7 +259,7 @@ static int32_t cfgSetTimezone(SConfigItem *pItem, const char *value, ECfgSrcType } static int32_t cfgSetTfsItem(SConfig *pCfg, const char *name, const char *value, const char *level, const char *primary, - ECfgSrcType stype) { + const char *enable, ECfgSrcType stype) { taosThreadMutexLock(&pCfg->lock); SConfigItem *pItem = cfgGetItem(pCfg, name); @@ -283,6 +283,7 @@ static int32_t cfgSetTfsItem(SConfig *pCfg, const char *name, const char *value, tstrncpy(cfg.dir, pItem->str, sizeof(cfg.dir)); cfg.level = level ? atoi(level) : 0; cfg.primary = primary ? atoi(primary) : 1; + cfg.enable = enable ? atoi(enable) : 1; void *ret = taosArrayPush(pItem->array, &cfg); if (ret == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; @@ -899,16 +900,16 @@ void cfgDumpCfg(SConfig *pCfg, bool tsc, bool dump) { } int32_t cfgLoadFromEnvVar(SConfig *pConfig) { - char line[1024], *name, *value, *value2, *value3; - int32_t olen, vlen, vlen2, vlen3; + char line[1024], *name, *value, *value2, *value3, *value4; + int32_t olen, vlen, vlen2, vlen3, vlen4; int32_t code = 0; char **pEnv = environ; line[1023] = 0; if (pEnv == NULL) return 0; while (*pEnv != NULL) { - name = value = value2 = value3 = NULL; - olen = vlen = vlen2 = vlen3 = 0; + name = value = value2 = value3 = value4 = NULL; + olen = vlen = vlen2 = vlen3 = vlen4 = 0; strncpy(line, *pEnv, sizeof(line) - 1); pEnv++; @@ -926,14 +927,18 @@ int32_t cfgLoadFromEnvVar(SConfig *pConfig) { if (vlen2 != 0) { value2[vlen2] = 0; paGetToken(value2 + vlen2 + 1, &value3, &vlen3); - if (vlen3 != 0) value3[vlen3] = 0; + if (vlen3 != 0) { + value3[vlen3] = 0; + paGetToken(value3 + vlen3 + 1, &value4, &vlen4); + if(vlen4 != 0) value4[vlen4] = 0; + } } code = cfgSetItem(pConfig, name, value, CFG_STYPE_ENV_VAR, true); if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; if (strcasecmp(name, "dataDir") == 0) { - code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_ENV_VAR); + code = cfgSetTfsItem(pConfig, name, value, value2, value3, value4, CFG_STYPE_ENV_VAR); if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; } } @@ -943,8 +948,8 @@ int32_t cfgLoadFromEnvVar(SConfig *pConfig) { } int32_t cfgLoadFromEnvCmd(SConfig *pConfig, const char **envCmd) { - char buf[1024], *name, *value, *value2, *value3; - int32_t olen, vlen, vlen2, vlen3; + char buf[1024], *name, *value, *value2, *value3, *value4; + int32_t olen, vlen, vlen2, vlen3, vlen4; int32_t code = 0; int32_t index = 0; if (envCmd == NULL) return 0; @@ -954,8 +959,8 @@ int32_t cfgLoadFromEnvCmd(SConfig *pConfig, const char **envCmd) { taosEnvToCfg(buf, buf); index++; - name = value = value2 = value3 = NULL; - olen = vlen = vlen2 = vlen3 = 0; + name = value = value2 = value3 = value4 = NULL; + olen = vlen = vlen2 = vlen3 = vlen4 = 0; paGetToken(buf, &name, &olen); if (olen == 0) continue; @@ -969,14 +974,18 @@ int32_t cfgLoadFromEnvCmd(SConfig *pConfig, const char **envCmd) { if (vlen2 != 0) { value2[vlen2] = 0; paGetToken(value2 + vlen2 + 1, &value3, &vlen3); - if (vlen3 != 0) value3[vlen3] = 0; + if (vlen3 != 0) { + value3[vlen3] = 0; + paGetToken(value3 + vlen3 + 1, &value4, &vlen4); + if(vlen4 != 0) value4[vlen4] = 0; + } } code = cfgSetItem(pConfig, name, value, CFG_STYPE_ENV_CMD, true); if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; if (strcasecmp(name, "dataDir") == 0) { - code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_ENV_CMD); + code = cfgSetTfsItem(pConfig, name, value, value2, value3, value4, CFG_STYPE_ENV_CMD); if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; } } @@ -986,8 +995,8 @@ int32_t cfgLoadFromEnvCmd(SConfig *pConfig, const char **envCmd) { } int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *envFile) { - char line[1024], *name, *value, *value2, *value3; - int32_t olen, vlen, vlen2, vlen3; + char line[1024], *name, *value, *value2, *value3, *value4; + int32_t olen, vlen, vlen2, vlen3, vlen4; int32_t code = 0; ssize_t _bytes = 0; @@ -1012,8 +1021,8 @@ int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *envFile) { } while (!taosEOFFile(pFile)) { - name = value = value2 = value3 = NULL; - olen = vlen = vlen2 = vlen3 = 0; + name = value = value2 = value3 = value4 = NULL; + olen = vlen = vlen2 = vlen3 = vlen4 = 0; _bytes = taosGetsFile(pFile, sizeof(line), line); if (_bytes <= 0) { @@ -1034,14 +1043,18 @@ int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *envFile) { if (vlen2 != 0) { value2[vlen2] = 0; paGetToken(value2 + vlen2 + 1, &value3, &vlen3); - if (vlen3 != 0) value3[vlen3] = 0; + if (vlen3 != 0) { + value3[vlen3] = 0; + paGetToken(value3 + vlen3 + 1, &value4, &vlen4); + if(vlen4 != 0) value4[vlen4] = 0; + } } code = cfgSetItem(pConfig, name, value, CFG_STYPE_ENV_FILE, true); if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; if (strcasecmp(name, "dataDir") == 0) { - code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_ENV_FILE); + code = cfgSetTfsItem(pConfig, name, value, value2, value3, value4, CFG_STYPE_ENV_FILE); if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; } } @@ -1053,8 +1066,8 @@ int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *envFile) { } int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { - char line[1024], *name, *value, *value2, *value3; - int32_t olen, vlen, vlen2, vlen3; + char line[1024], *name, *value, *value2, *value3, *value4; + int32_t olen, vlen, vlen2, vlen3, vlen4; ssize_t _bytes = 0; int32_t code = 0; @@ -1072,8 +1085,8 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { } while (!taosEOFFile(pFile)) { - name = value = value2 = value3 = NULL; - olen = vlen = vlen2 = vlen3 = 0; + name = value = value2 = value3 = value4 = NULL; + olen = vlen = vlen2 = vlen3 = vlen4 = 0; _bytes = taosGetsFile(pFile, sizeof(line), line); if (_bytes <= 0) { @@ -1114,7 +1127,11 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { if (vlen2 != 0) { value2[vlen2] = 0; paGetToken(value2 + vlen2 + 1, &value3, &vlen3); - if (vlen3 != 0) value3[vlen3] = 0; + if (vlen3 != 0) { + value3[vlen3] = 0; + paGetToken(value3 + vlen3 + 1, &value4, &vlen4); + if (vlen4 != 0) value4[vlen4] = 0; + } } code = cfgSetItem(pConfig, name, value, CFG_STYPE_CFG_FILE, true); @@ -1122,7 +1139,7 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { } if (strcasecmp(name, "dataDir") == 0) { - code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_CFG_FILE); + code = cfgSetTfsItem(pConfig, name, value, value2, value3, value4, CFG_STYPE_CFG_FILE); if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; } @@ -1212,8 +1229,8 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { // } int32_t cfgLoadFromApollUrl(SConfig *pConfig, const char *url) { - char *cfgLineBuf = NULL, *name, *value, *value2, *value3; - int32_t olen, vlen, vlen2, vlen3; + char *cfgLineBuf = NULL, *name, *value, *value2, *value3, *value4; + int32_t olen, vlen, vlen2, vlen3, vlen4; int32_t code = 0; if (url == NULL || strlen(url) == 0) { uInfo("apoll url not load"); @@ -1289,14 +1306,18 @@ int32_t cfgLoadFromApollUrl(SConfig *pConfig, const char *url) { if (vlen2 != 0) { value2[vlen2] = 0; paGetToken(value2 + vlen2 + 1, &value3, &vlen3); - if (vlen3 != 0) value3[vlen3] = 0; + if (vlen3 != 0) { + value3[vlen3] = 0; + paGetToken(value3 + vlen3 + 1, &value4, &vlen4); + if (vlen4 != 0) value4[vlen4] = 0; + } } code = cfgSetItem(pConfig, name, value, CFG_STYPE_APOLLO_URL, true); if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; if (strcasecmp(name, "dataDir") == 0) { - code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_APOLLO_URL); + code = cfgSetTfsItem(pConfig, name, value, value2, value3, value4, CFG_STYPE_APOLLO_URL); if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; } } From ff47e1eab1d4c6a471a48ba651bc7792c0a515a9 Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 12 Jun 2024 17:12:30 +0800 Subject: [PATCH 02/10] enh: support enable/disable tfs config entries --- source/common/src/tglobal.c | 2 -- source/libs/tfs/src/tfs.c | 5 +++++ tests/system-test/0-others/multilevel.py | 11 ++++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index 169bcf56a5..0cdb1eb784 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -221,8 +221,6 @@ int32_t tsDiskCfgNum = 0; SDiskCfg tsDiskCfg[TFS_MAX_DISKS] = {0}; int64_t tsMinDiskFreeSize = TFS_MIN_DISK_FREE_SIZE; -int a = sizeof(tsDiskCfg); - // stream scheduler bool tsDeployOnSnode = true; diff --git a/source/libs/tfs/src/tfs.c b/source/libs/tfs/src/tfs.c index dd93b25186..e863f658e6 100644 --- a/source/libs/tfs/src/tfs.c +++ b/source/libs/tfs/src/tfs.c @@ -494,6 +494,11 @@ static int32_t tfsMount(STfs *pTfs, SDiskCfg *pCfg) { return -1; } + if (pCfg->enable == 0) { + fInfo("skip to mount disk %s to level %d since enable is %" PRIi8, pCfg->dir, pCfg->level, pCfg->enable); + return 0; + } + SDiskID did = {.level = pCfg->level}; STfsDisk *pDisk = tfsMountDiskToTier(TFS_TIER_AT(pTfs, did.level), pCfg); if (pDisk == NULL) { diff --git a/tests/system-test/0-others/multilevel.py b/tests/system-test/0-others/multilevel.py index 7b0ebb4b78..aaecbae50e 100644 --- a/tests/system-test/0-others/multilevel.py +++ b/tests/system-test/0-others/multilevel.py @@ -242,7 +242,7 @@ class TDTestCase: tdSql.execute('use dbtest') tdSql.execute('create table stb (ts timestamp,c0 int) tags(t0 int)') tdSql.execute('create table tb1 using stb tags(1)') - for i in range(10,30): + for i in range(1,600, 30): tdSql.execute(f'insert into tb1 values(now-{i}d,10)') tdSql.execute('flush database dbtest') time.sleep(3) @@ -250,21 +250,26 @@ class TDTestCase: tdDnodes.stop(1) cfg={ '/mnt/data1 0 1' : 'dataDir', - '/mnt/data2 1 0' : 'dataDir', - '/mnt/data3 2 0' : 'dataDir', + '/mnt/data2 1 0 1' : 'dataDir', + '/mnt/data3 1 0 0' : 'dataDir', + '/mnt/data4 1 0' : 'dataDir', } tdSql.createDir('/mnt/data2') tdSql.createDir('/mnt/data3') + tdSql.createDir('/mnt/data4') tdDnodes.deploy(1,cfg) tdDnodes.start(1) checkFiles('/mnt/data1/vnode/*/tsdb/v*',1) checkFiles('/mnt/data2/vnode/*/tsdb/v*',0) checkFiles('/mnt/data3/vnode/*/tsdb/v*',0) + checkFiles('/mnt/data4/vnode/*/tsdb/v*',0) tdSql.execute('alter database dbtest keep 10d,365d,3650d') tdSql.execute('trim database dbtest') time.sleep(3) checkFiles('/mnt/data1/vnode/*/tsdb/v*',1) checkFiles('/mnt/data2/vnode/*/tsdb/v*',1) + checkFiles('/mnt/data3/vnode/*/tsdb/v*',0) + checkFiles('/mnt/data4/vnode/*/tsdb/v*',1) def run(self): self.basic() From caa2884bc9a696cd6b1af8b93c5864a999b8e018 Mon Sep 17 00:00:00 2001 From: kailixu Date: Thu, 13 Jun 2024 14:13:23 +0800 Subject: [PATCH 03/10] enh: support enable/disable tfs config entries --- source/util/src/tconfig.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/util/src/tconfig.c b/source/util/src/tconfig.c index 6aad5cae28..17e1b3faf2 100644 --- a/source/util/src/tconfig.c +++ b/source/util/src/tconfig.c @@ -283,7 +283,7 @@ static int32_t cfgSetTfsItem(SConfig *pCfg, const char *name, const char *value, tstrncpy(cfg.dir, pItem->str, sizeof(cfg.dir)); cfg.level = level ? atoi(level) : 0; cfg.primary = primary ? atoi(primary) : 1; - cfg.enable = enable ? atoi(enable) : 1; + cfg.enable = (enable && enable[0]) ? atoi(enable) : 1; void *ret = taosArrayPush(pItem->array, &cfg); if (ret == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; From 4ed3b303527bc91004777f66a6ef8632d9aa5837 Mon Sep 17 00:00:00 2001 From: kailixu Date: Mon, 17 Jun 2024 06:14:49 +0800 Subject: [PATCH 04/10] tfs: support disable create new file --- include/util/tdef.h | 4 +--- source/common/src/tglobal.c | 2 +- source/dnode/mgmt/node_mgmt/src/dmEnv.c | 2 +- source/dnode/vnode/test/tsdbSmaTest.cpp | 2 +- source/libs/tfs/src/tfs.c | 14 ++++---------- source/libs/tfs/test/tfsTest.cpp | 24 ++++++++++++------------ source/util/src/tconfig.c | 4 ++-- 7 files changed, 22 insertions(+), 30 deletions(-) diff --git a/include/util/tdef.h b/include/util/tdef.h index b813d590a4..a7ebb4da22 100644 --- a/include/util/tdef.h +++ b/include/util/tdef.h @@ -539,8 +539,6 @@ typedef enum ELogicConditionType { #define TFS_MAX_LEVEL (TFS_MAX_TIERS - 1) #define TFS_PRIMARY_LEVEL 0 #define TFS_PRIMARY_ID 0 -#define TFS_ENTRY_DISABLE 0 -#define TFS_ENTRY_ENABLE 1 #define TFS_MIN_DISK_FREE_SIZE 50 * 1024 * 1024 enum { TRANS_STAT_INIT = 0, TRANS_STAT_EXECUTING, TRANS_STAT_EXECUTED, TRANS_STAT_ROLLBACKING, TRANS_STAT_ROLLBACKED }; @@ -551,7 +549,7 @@ typedef struct { char dir[TSDB_FILENAME_LEN]; int32_t level; int8_t primary; - int8_t enable; + int8_t disable; // disable create new file } SDiskCfg; typedef struct { diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index f76ea35a23..827f22b553 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -326,7 +326,7 @@ int32_t taosSetTfsCfg(SConfig *pCfg) { tstrncpy(tsDiskCfg[0].dir, pItem->str, TSDB_FILENAME_LEN); tsDiskCfg[0].level = 0; tsDiskCfg[0].primary = 1; - tsDiskCfg[0].enable = 1; + tsDiskCfg[0].disable = 0; tstrncpy(tsDataDir, pItem->str, PATH_MAX); if (taosMulMkDir(tsDataDir) != 0) { uError("failed to create dataDir:%s", tsDataDir); diff --git a/source/dnode/mgmt/node_mgmt/src/dmEnv.c b/source/dnode/mgmt/node_mgmt/src/dmEnv.c index d6031dee15..54a118b666 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmEnv.c +++ b/source/dnode/mgmt/node_mgmt/src/dmEnv.c @@ -110,7 +110,7 @@ static bool dmCheckDiskSpace() { int32_t dmDiskInit() { SDnode *pDnode = dmInstance(); - SDiskCfg dCfg = {.level = 0, .primary = 1, .enable = 1}; + SDiskCfg dCfg = {.level = 0, .primary = 1, .disable = 0}; tstrncpy(dCfg.dir, tsDataDir, TSDB_FILENAME_LEN); SDiskCfg *pDisks = tsDiskCfg; int32_t numOfDisks = tsDiskCfgNum; diff --git a/source/dnode/vnode/test/tsdbSmaTest.cpp b/source/dnode/vnode/test/tsdbSmaTest.cpp index e0e4f45feb..8b19c0dc95 100644 --- a/source/dnode/vnode/test/tsdbSmaTest.cpp +++ b/source/dnode/vnode/test/tsdbSmaTest.cpp @@ -368,7 +368,7 @@ TEST(testCase, tSma_Data_Insert_Query_Test) { SDiskCfg pDisks = {0}; pDisks.level = 0; pDisks.primary = 1; - pDisks.enable = 1; + pDisks.disable = 0; strncpy(pDisks.dir, TD_DATA_DIR_PATH, TSDB_FILENAME_LEN); int32_t numOfDisks = 1; pTsdb->pTfs = tfsOpen(&pDisks, numOfDisks); diff --git a/source/libs/tfs/src/tfs.c b/source/libs/tfs/src/tfs.c index e863f658e6..2c3ca9b86c 100644 --- a/source/libs/tfs/src/tfs.c +++ b/source/libs/tfs/src/tfs.c @@ -494,8 +494,8 @@ static int32_t tfsMount(STfs *pTfs, SDiskCfg *pCfg) { return -1; } - if (pCfg->enable == 0) { - fInfo("skip to mount disk %s to level %d since enable is %" PRIi8, pCfg->dir, pCfg->level, pCfg->enable); + if (pCfg->disable == 1) { + fInfo("skip to mount disk %s to level %d since disable is %" PRIi8, pCfg->dir, pCfg->level, pCfg->disable); return 0; } @@ -530,8 +530,8 @@ static int32_t tfsCheckAndFormatCfg(STfs *pTfs, SDiskCfg *pCfg) { return -1; } - if (pCfg->enable < 0 || pCfg->enable > 1) { - fError("failed to mount %s to FS since invalid enable %" PRIi8, pCfg->dir, pCfg->enable); + if (pCfg->disable < 0 || pCfg->disable > 1) { + fError("failed to mount %s to FS since invalid disable %" PRIi8, pCfg->dir, pCfg->disable); terrno = TSDB_CODE_FS_INVLD_CFG; return -1; } @@ -543,12 +543,6 @@ static int32_t tfsCheckAndFormatCfg(STfs *pTfs, SDiskCfg *pCfg) { return -1; } - if (pCfg->enable == 0) { - fError("failed to mount %s to FS since disk is primary but enable %" PRIi8 " not 1", pCfg->dir, pCfg->enable); - terrno = TSDB_CODE_FS_INVLD_CFG; - return -1; - } - if (TFS_PRIMARY_DISK(pTfs) != NULL) { fError("failed to mount %s to FS since duplicate primary mount", pCfg->dir); terrno = TSDB_CODE_FS_DUP_PRIMARY; diff --git a/source/libs/tfs/test/tfsTest.cpp b/source/libs/tfs/test/tfsTest.cpp index 2c895f698a..d8c117818e 100644 --- a/source/libs/tfs/test/tfsTest.cpp +++ b/source/libs/tfs/test/tfsTest.cpp @@ -37,7 +37,7 @@ TEST_F(TfsTest, 01_Open_Close) { tstrncpy(dCfg.dir, root, TSDB_FILENAME_LEN); dCfg.level = 0; dCfg.primary = 1; - dCfg.enable = 1; + dCfg.disable = 0; taosRemoveDir(root); STfs *pTfs = tfsOpen(&dCfg, 1); @@ -64,7 +64,7 @@ TEST_F(TfsTest, 02_AllocDisk) { tstrncpy(dCfg.dir, root, TSDB_FILENAME_LEN); dCfg.level = 0; dCfg.primary = 1; - dCfg.enable = 1; + dCfg.disable = 0; taosRemoveDir(root); taosMkDir(root); @@ -116,7 +116,7 @@ TEST_F(TfsTest, 03_Dir) { tstrncpy(dCfg.dir, root, TSDB_FILENAME_LEN); dCfg.level = 0; dCfg.primary = 1; - dCfg.enable = 1; + dCfg.disable = 0; taosRemoveDir(root); taosMkDir(root); @@ -333,39 +333,39 @@ TEST_F(TfsTest, 05_MultiDisk) { tstrncpy(dCfg[0].dir, root01, TSDB_FILENAME_LEN); dCfg[0].level = 0; dCfg[0].primary = 0; - dCfg[0].enable = 1; + dCfg[0].disable = 0; tstrncpy(dCfg[1].dir, root00, TSDB_FILENAME_LEN); dCfg[1].level = 0; dCfg[1].primary = 0; - dCfg[1].enable = 1; + dCfg[1].disable = 0; tstrncpy(dCfg[2].dir, root20, TSDB_FILENAME_LEN); dCfg[2].level = 2; dCfg[2].primary = 0; - dCfg[2].enable = 1; + dCfg[2].disable = 0; tstrncpy(dCfg[3].dir, root21, TSDB_FILENAME_LEN); dCfg[3].level = 2; dCfg[3].primary = 0; - dCfg[3].enable = 1; + dCfg[3].disable = 0; tstrncpy(dCfg[4].dir, root22, TSDB_FILENAME_LEN); dCfg[4].level = 2; dCfg[4].primary = 0; - dCfg[4].enable = 1; + dCfg[4].disable = 0; tstrncpy(dCfg[5].dir, root23, TSDB_FILENAME_LEN); dCfg[5].level = 2; dCfg[5].primary = 0; - dCfg[5].enable = 1; + dCfg[5].disable = 0; tstrncpy(dCfg[6].dir, root10, TSDB_FILENAME_LEN); dCfg[6].level = 1; dCfg[6].primary = 0; - dCfg[6].enable = 1; + dCfg[6].disable = 0; tstrncpy(dCfg[7].dir, root11, TSDB_FILENAME_LEN); dCfg[7].level = 1; dCfg[7].primary = 0; - dCfg[7].enable = 1; + dCfg[7].disable = 0; tstrncpy(dCfg[8].dir, root12, TSDB_FILENAME_LEN); dCfg[8].level = 1; dCfg[8].primary = 0; - dCfg[8].enable = 1; + dCfg[8].disable = 0; taosRemoveDir(root00); taosRemoveDir(root01); diff --git a/source/util/src/tconfig.c b/source/util/src/tconfig.c index 17e1b3faf2..8be38a811f 100644 --- a/source/util/src/tconfig.c +++ b/source/util/src/tconfig.c @@ -259,7 +259,7 @@ static int32_t cfgSetTimezone(SConfigItem *pItem, const char *value, ECfgSrcType } static int32_t cfgSetTfsItem(SConfig *pCfg, const char *name, const char *value, const char *level, const char *primary, - const char *enable, ECfgSrcType stype) { + const char *disable, ECfgSrcType stype) { taosThreadMutexLock(&pCfg->lock); SConfigItem *pItem = cfgGetItem(pCfg, name); @@ -283,7 +283,7 @@ static int32_t cfgSetTfsItem(SConfig *pCfg, const char *name, const char *value, tstrncpy(cfg.dir, pItem->str, sizeof(cfg.dir)); cfg.level = level ? atoi(level) : 0; cfg.primary = primary ? atoi(primary) : 1; - cfg.enable = (enable && enable[0]) ? atoi(enable) : 1; + cfg.disable = disable ? atoi(disable) : 0; void *ret = taosArrayPush(pItem->array, &cfg); if (ret == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; From bb40184260163decf661fb843521945131e3dc8d Mon Sep 17 00:00:00 2001 From: kailixu Date: Mon, 17 Jun 2024 10:43:48 +0800 Subject: [PATCH 05/10] fix: add primary disk although disable create new file --- source/libs/tfs/src/tfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/tfs/src/tfs.c b/source/libs/tfs/src/tfs.c index 2c3ca9b86c..ac1fe40f24 100644 --- a/source/libs/tfs/src/tfs.c +++ b/source/libs/tfs/src/tfs.c @@ -494,7 +494,7 @@ static int32_t tfsMount(STfs *pTfs, SDiskCfg *pCfg) { return -1; } - if (pCfg->disable == 1) { + if (pCfg->disable == 1 && pCfg->primary != 1) { fInfo("skip to mount disk %s to level %d since disable is %" PRIi8, pCfg->dir, pCfg->level, pCfg->disable); return 0; } From 6d2b8fe2bf3be692ac675c5267611e82636627e0 Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 18 Jun 2024 19:08:00 +0800 Subject: [PATCH 06/10] tfs: support disable create new file --- include/util/tdef.h | 4 ++-- source/libs/tfs/inc/tfsInt.h | 3 ++- source/libs/tfs/src/tfs.c | 5 ----- source/libs/tfs/src/tfsDisk.c | 3 ++- source/libs/tfs/src/tfsTier.c | 10 +++++++-- tests/system-test/0-others/multilevel.py | 26 ++++++++++++------------ 6 files changed, 27 insertions(+), 24 deletions(-) diff --git a/include/util/tdef.h b/include/util/tdef.h index a7ebb4da22..9e61ec8fe6 100644 --- a/include/util/tdef.h +++ b/include/util/tdef.h @@ -548,8 +548,8 @@ enum { ENCRYPT_KEY_STAT_UNKNOWN = 0, ENCRYPT_KEY_STAT_UNSET, ENCRYPT_KEY_STAT_SE typedef struct { char dir[TSDB_FILENAME_LEN]; int32_t level; - int8_t primary; - int8_t disable; // disable create new file + int32_t primary; + int8_t disable; // disable create new file } SDiskCfg; typedef struct { diff --git a/source/libs/tfs/inc/tfsInt.h b/source/libs/tfs/inc/tfsInt.h index 713f548e9e..b3bde3abba 100644 --- a/source/libs/tfs/inc/tfsInt.h +++ b/source/libs/tfs/inc/tfsInt.h @@ -38,6 +38,7 @@ typedef struct { int32_t level; int32_t id; + int8_t disable; // disable create new file char *path; SDiskSize size; } STfsDisk; @@ -73,7 +74,7 @@ typedef struct STfs { SHashObj *hash; // name to did map } STfs; -STfsDisk *tfsNewDisk(int32_t level, int32_t id, const char *dir); +STfsDisk *tfsNewDisk(int32_t level, int32_t id, int8_t disable, const char *dir); STfsDisk *tfsFreeDisk(STfsDisk *pDisk); int32_t tfsUpdateDiskSize(STfsDisk *pDisk); diff --git a/source/libs/tfs/src/tfs.c b/source/libs/tfs/src/tfs.c index ac1fe40f24..4110652f6f 100644 --- a/source/libs/tfs/src/tfs.c +++ b/source/libs/tfs/src/tfs.c @@ -494,11 +494,6 @@ static int32_t tfsMount(STfs *pTfs, SDiskCfg *pCfg) { return -1; } - if (pCfg->disable == 1 && pCfg->primary != 1) { - fInfo("skip to mount disk %s to level %d since disable is %" PRIi8, pCfg->dir, pCfg->level, pCfg->disable); - return 0; - } - SDiskID did = {.level = pCfg->level}; STfsDisk *pDisk = tfsMountDiskToTier(TFS_TIER_AT(pTfs, did.level), pCfg); if (pDisk == NULL) { diff --git a/source/libs/tfs/src/tfsDisk.c b/source/libs/tfs/src/tfsDisk.c index 3717bf1a6d..06eb1cd42e 100644 --- a/source/libs/tfs/src/tfsDisk.c +++ b/source/libs/tfs/src/tfsDisk.c @@ -16,7 +16,7 @@ #define _DEFAULT_SOURCE #include "tfsInt.h" -STfsDisk *tfsNewDisk(int32_t level, int32_t id, const char *path) { +STfsDisk *tfsNewDisk(int32_t level, int32_t id, int8_t disable, const char *path) { STfsDisk *pDisk = taosMemoryCalloc(1, sizeof(STfsDisk)); if (pDisk == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; @@ -32,6 +32,7 @@ STfsDisk *tfsNewDisk(int32_t level, int32_t id, const char *path) { pDisk->level = level; pDisk->id = id; + pDisk->disable = disable; taosGetDiskSize(pDisk->path, &pDisk->size); return pDisk; } diff --git a/source/libs/tfs/src/tfsTier.c b/source/libs/tfs/src/tfsTier.c index 911fdc52b7..cb79c334bf 100644 --- a/source/libs/tfs/src/tfsTier.c +++ b/source/libs/tfs/src/tfsTier.c @@ -65,7 +65,7 @@ STfsDisk *tfsMountDiskToTier(STfsTier *pTier, SDiskCfg *pCfg) { return NULL; } - STfsDisk *pDisk = tfsNewDisk(pCfg->level, id, pCfg->dir); + STfsDisk *pDisk = tfsNewDisk(pCfg->level, id, pCfg->disable, pCfg->dir); if (pDisk == NULL) return NULL; pTier->disks[id] = pDisk; @@ -89,7 +89,7 @@ void tfsUpdateTierSize(STfsTier *pTier) { size.total += pDisk->size.total; size.used += pDisk->size.used; size.avail += pDisk->size.avail; - nAvailDisks++; + if (pDisk->disable == 0) nAvailDisks++; } pTier->size = size; @@ -118,6 +118,12 @@ int32_t tfsAllocDiskOnTier(STfsTier *pTier) { if (pDisk == NULL) continue; + if (pDisk->disable == 1) { + uTrace("disk %s is disabled and skip it, level:%d id:%d disable:%" PRIi8, pDisk->path, pDisk->level, pDisk->id, + pDisk->disable); + continue; + } + if (pDisk->size.avail < tsMinDiskFreeSize) { uInfo("disk %s is full and skip it, level:%d id:%d free size:%" PRId64 " min free size:%" PRId64, pDisk->path, pDisk->level, pDisk->id, pDisk->size.avail, tsMinDiskFreeSize); diff --git a/tests/system-test/0-others/multilevel.py b/tests/system-test/0-others/multilevel.py index aaecbae50e..7e657fd3ba 100644 --- a/tests/system-test/0-others/multilevel.py +++ b/tests/system-test/0-others/multilevel.py @@ -52,7 +52,7 @@ class TDTestCase: tdLog.info("============== basic test ===============") cfg={ '/mnt/data1' : 'dataDir', - '/mnt/data2 0 0' : 'dataDir' + '/mnt/data2 0 0 0' : 'dataDir' } tdSql.createDir('/mnt/data1') tdSql.createDir('/mnt/data2') @@ -112,9 +112,9 @@ class TDTestCase: cfg={ '/mnt/data00 0 1' : 'dataDir', '/mnt/data01 0 0' : 'dataDir', - '/mnt/data02 0 0' : 'dataDir', + '/mnt/data02 0 0 0' : 'dataDir', '/mnt/data03 0 0' : 'dataDir', - '/mnt/data04 0 0' : 'dataDir' + '/mnt/data04 0 0 0' : 'dataDir' } dir_list = ['/mnt/data00','/mnt/data01','/mnt/data02','/mnt/data03','/mnt/data04'] for i in dir_list: @@ -160,15 +160,15 @@ class TDTestCase: tdDnodes.stop(1) # Test1 1 dataDir cfg={ - '/mnt/data000 0 1' : 'dataDir', + '/mnt/data000 0 1 0' : 'dataDir', '/mnt/data001 0 0' : 'dataDir', - '/mnt/data002 0 0' : 'dataDir', + '/mnt/data002 0 0 0' : 'dataDir', '/mnt/data010 1 0' : 'dataDir', - '/mnt/data011 1 0' : 'dataDir', + '/mnt/data011 1 0 0' : 'dataDir', '/mnt/data012 1 0' : 'dataDir', - '/mnt/data020 2 0' : 'dataDir', - '/mnt/data021 2 0' : 'dataDir', - '/mnt/data022 2 0' : 'dataDir' + '/mnt/data020 2 0 0' : 'dataDir', + '/mnt/data021 2 0 0' : 'dataDir', + '/mnt/data022 2 0 0' : 'dataDir' } dir_list = ['/mnt/data000','/mnt/data001','/mnt/data002','/mnt/data010','/mnt/data011','/mnt/data012','/mnt/data020','/mnt/data021''/mnt/data022'] for i in dir_list: @@ -189,7 +189,7 @@ class TDTestCase: if i == 0 : datadir = '/mnt/data%d 0 1' % (i+1) else: - datadir = '/mnt/data%d 0 0' % (i+1) + datadir = '/mnt/data%d 0 0 0' % (i+1) cfg.update({ datadir : 'dataDir' }) tdSql.createDir('/mnt/data%d' % (i+1)) @@ -250,9 +250,9 @@ class TDTestCase: tdDnodes.stop(1) cfg={ '/mnt/data1 0 1' : 'dataDir', - '/mnt/data2 1 0 1' : 'dataDir', - '/mnt/data3 1 0 0' : 'dataDir', - '/mnt/data4 1 0' : 'dataDir', + '/mnt/data2 1 0 0' : 'dataDir', + '/mnt/data3 1 0 1' : 'dataDir', + '/mnt/data4 2 0' : 'dataDir', } tdSql.createDir('/mnt/data2') tdSql.createDir('/mnt/data3') From 4c410086576362fa342cb6b5e54d4ee1175eca12 Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 18 Jun 2024 19:11:33 +0800 Subject: [PATCH 07/10] fix: print format --- source/libs/tfs/src/tfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/tfs/src/tfs.c b/source/libs/tfs/src/tfs.c index 4110652f6f..97feee7d9a 100644 --- a/source/libs/tfs/src/tfs.c +++ b/source/libs/tfs/src/tfs.c @@ -520,7 +520,7 @@ static int32_t tfsCheckAndFormatCfg(STfs *pTfs, SDiskCfg *pCfg) { } if (pCfg->primary < 0 || pCfg->primary > 1) { - fError("failed to mount %s to FS since invalid primary %" PRIi8, pCfg->dir, pCfg->primary); + fError("failed to mount %s to FS since invalid primary %d", pCfg->dir, pCfg->primary); terrno = TSDB_CODE_FS_INVLD_CFG; return -1; } From fa694d6fe3004fd25c5876392ed5b9b7a99180fc Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 31 Dec 2024 08:34:17 +0800 Subject: [PATCH 08/10] tfs: support disable create new file --- source/libs/tfs/src/tfs.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/libs/tfs/src/tfs.c b/source/libs/tfs/src/tfs.c index 97feee7d9a..1c64885bf5 100644 --- a/source/libs/tfs/src/tfs.c +++ b/source/libs/tfs/src/tfs.c @@ -607,6 +607,15 @@ static int32_t tfsCheck(STfs *pTfs) { terrno = TSDB_CODE_FS_NO_MOUNT_AT_TIER; return -1; } + + if (level == 0) { + tfsUpdateTierSize(TFS_TIER_AT(pTfs, level)); + if (TFS_TIER_AT(pTfs, level)->nAvailDisks == 0) { + fError("no disk to create new file at level %d", level); + terrno = TSDB_CODE_FS_NO_VALID_DISK; + return -1; + } + } } return 0; From 7dd242a04700be8bf0fd2e20ff7961cbb35d1839 Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 31 Dec 2024 09:33:16 +0800 Subject: [PATCH 09/10] tfs: support disable create new file --- tests/system-test/0-others/multilevel.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/system-test/0-others/multilevel.py b/tests/system-test/0-others/multilevel.py index 7e657fd3ba..d606d62d77 100644 --- a/tests/system-test/0-others/multilevel.py +++ b/tests/system-test/0-others/multilevel.py @@ -227,6 +227,22 @@ class TDTestCase: tdSql.taosdStatus(0) + def disable_create_new_file_0_not_exist(self): + tdLog.info("============== disable_create_new_file_0_not_exist test ===============") + cfg={ + '/mnt/data1 0 0 1' : 'dataDir', + '/mnt/data2 0 0 1' : 'dataDir' + } + tdSql.createDir('/mnt/data1') + tdSql.createDir('/mnt/data2') + + tdLog.info("================= step1") + tdDnodes.deploy(1,cfg) + tdDnodes.startWithoutSleep(1) + + tdLog.info("================= step2") + tdSql.taosdStatus(0) + def trim_database(self): tdLog.info("============== trim_database test ===============") tdDnodes.stop(1) @@ -280,6 +296,7 @@ class TDTestCase: self.more_than_128_disks() self.trim_database() self.missing_middle_level() + self.disable_create_new_file_0_not_exist() From 3ed71361bbed58366b4aeb068c14a52d5abb819f Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 31 Dec 2024 09:36:21 +0800 Subject: [PATCH 10/10] tfs: support disable create new file --- tests/system-test/0-others/multilevel.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/system-test/0-others/multilevel.py b/tests/system-test/0-others/multilevel.py index d606d62d77..3ed4002fcd 100644 --- a/tests/system-test/0-others/multilevel.py +++ b/tests/system-test/0-others/multilevel.py @@ -227,10 +227,10 @@ class TDTestCase: tdSql.taosdStatus(0) - def disable_create_new_file_0_not_exist(self): + def disable_create_new_file(self): tdLog.info("============== disable_create_new_file_0_not_exist test ===============") cfg={ - '/mnt/data1 0 0 1' : 'dataDir', + '/mnt/data1 0 1 1' : 'dataDir', '/mnt/data2 0 0 1' : 'dataDir' } tdSql.createDir('/mnt/data1') @@ -296,7 +296,7 @@ class TDTestCase: self.more_than_128_disks() self.trim_database() self.missing_middle_level() - self.disable_create_new_file_0_not_exist() + self.disable_create_new_file()