Merge pull request #26160 from taosdata/enh/TD-30554-3.0
tfs: support disable create new file
This commit is contained in:
commit
70851f6bed
|
@ -549,6 +549,7 @@ typedef struct {
|
|||
char dir[TSDB_FILENAME_LEN];
|
||||
int32_t level;
|
||||
int32_t primary;
|
||||
int8_t disable; // disable create new file
|
||||
} SDiskCfg;
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -326,6 +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].disable = 0;
|
||||
tstrncpy(tsDataDir, pItem->str, PATH_MAX);
|
||||
if (taosMulMkDir(tsDataDir) != 0) {
|
||||
uError("failed to create dataDir:%s", tsDataDir);
|
||||
|
|
|
@ -110,10 +110,8 @@ static bool dmCheckDiskSpace() {
|
|||
|
||||
int32_t dmDiskInit() {
|
||||
SDnode *pDnode = dmInstance();
|
||||
SDiskCfg dCfg = {0};
|
||||
SDiskCfg dCfg = {.level = 0, .primary = 1, .disable = 0};
|
||||
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) {
|
||||
|
|
|
@ -368,6 +368,7 @@ TEST(testCase, tSma_Data_Insert_Query_Test) {
|
|||
SDiskCfg pDisks = {0};
|
||||
pDisks.level = 0;
|
||||
pDisks.primary = 1;
|
||||
pDisks.disable = 0;
|
||||
strncpy(pDisks.dir, TD_DATA_DIR_PATH, TSDB_FILENAME_LEN);
|
||||
int32_t numOfDisks = 1;
|
||||
pTsdb->pTfs = tfsOpen(&pDisks, numOfDisks);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 %d", pCfg->dir, pCfg->primary);
|
||||
terrno = TSDB_CODE_FS_INVLD_CFG;
|
||||
return -1;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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);
|
||||
|
@ -595,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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -37,6 +37,7 @@ TEST_F(TfsTest, 01_Open_Close) {
|
|||
tstrncpy(dCfg.dir, root, TSDB_FILENAME_LEN);
|
||||
dCfg.level = 0;
|
||||
dCfg.primary = 1;
|
||||
dCfg.disable = 0;
|
||||
|
||||
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.disable = 0;
|
||||
|
||||
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.disable = 0;
|
||||
|
||||
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].disable = 0;
|
||||
tstrncpy(dCfg[1].dir, root00, TSDB_FILENAME_LEN);
|
||||
dCfg[1].level = 0;
|
||||
dCfg[1].primary = 0;
|
||||
dCfg[1].disable = 0;
|
||||
tstrncpy(dCfg[2].dir, root20, TSDB_FILENAME_LEN);
|
||||
dCfg[2].level = 2;
|
||||
dCfg[2].primary = 0;
|
||||
dCfg[2].disable = 0;
|
||||
tstrncpy(dCfg[3].dir, root21, TSDB_FILENAME_LEN);
|
||||
dCfg[3].level = 2;
|
||||
dCfg[3].primary = 0;
|
||||
dCfg[3].disable = 0;
|
||||
tstrncpy(dCfg[4].dir, root22, TSDB_FILENAME_LEN);
|
||||
dCfg[4].level = 2;
|
||||
dCfg[4].primary = 0;
|
||||
dCfg[4].disable = 0;
|
||||
tstrncpy(dCfg[5].dir, root23, TSDB_FILENAME_LEN);
|
||||
dCfg[5].level = 2;
|
||||
dCfg[5].primary = 0;
|
||||
dCfg[5].disable = 0;
|
||||
tstrncpy(dCfg[6].dir, root10, TSDB_FILENAME_LEN);
|
||||
dCfg[6].level = 1;
|
||||
dCfg[6].primary = 0;
|
||||
dCfg[6].disable = 0;
|
||||
tstrncpy(dCfg[7].dir, root11, TSDB_FILENAME_LEN);
|
||||
dCfg[7].level = 1;
|
||||
dCfg[7].primary = 0;
|
||||
dCfg[7].disable = 0;
|
||||
tstrncpy(dCfg[8].dir, root12, TSDB_FILENAME_LEN);
|
||||
dCfg[8].level = 1;
|
||||
dCfg[8].primary = 0;
|
||||
dCfg[8].disable = 0;
|
||||
|
||||
taosRemoveDir(root00);
|
||||
taosRemoveDir(root01);
|
||||
|
|
|
@ -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 *disable, 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.disable = disable ? atoi(disable) : 0;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
@ -227,6 +227,22 @@ class TDTestCase:
|
|||
|
||||
tdSql.taosdStatus(0)
|
||||
|
||||
def disable_create_new_file(self):
|
||||
tdLog.info("============== disable_create_new_file_0_not_exist test ===============")
|
||||
cfg={
|
||||
'/mnt/data1 0 1 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)
|
||||
|
@ -242,7 +258,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 +266,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 0' : 'dataDir',
|
||||
'/mnt/data3 1 0 1' : 'dataDir',
|
||||
'/mnt/data4 2 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()
|
||||
|
@ -275,6 +296,7 @@ class TDTestCase:
|
|||
self.more_than_128_disks()
|
||||
self.trim_database()
|
||||
self.missing_middle_level()
|
||||
self.disable_create_new_file()
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue