diff --git a/src/client/src/tscSystem.c b/src/client/src/tscSystem.c index 15f06f5a3bfd8f6b6edfe86ee23955a15d2cd937..72f23881d28ebf2f5d0a27ee32f9f7335a14ea83 100644 --- a/src/client/src/tscSystem.c +++ b/src/client/src/tscSystem.c @@ -94,10 +94,6 @@ void taos_init_imp(void) { printf("failed to create log dir:%s\n", tsLogDir); } - if (mkdir(tsLogbakDir, 0755) != 0 && errno != EEXIST) { - printf("failed to create logbak dir:%s\n", tsLogbakDir); - } - sprintf(temp, "%s/taoslog", tsLogDir); if (taosInitLog(temp, tsNumOfLogLines, 10) < 0) { printf("failed to open log file in directory:%s\n", tsLogDir); diff --git a/src/common/inc/tglobal.h b/src/common/inc/tglobal.h index bf9859d58c7c4859c6a65a1aad12e38a5cf3a938..77e8b76456b04301a1f556c69a4bae98970c1f37 100644 --- a/src/common/inc/tglobal.h +++ b/src/common/inc/tglobal.h @@ -126,7 +126,6 @@ extern char tsDnodeDir[]; extern char tsMnodeDir[]; extern char tsDataDir[]; extern char tsLogDir[]; -extern char tsLogbakDir[]; extern char tsScriptDir[]; extern int64_t tsMsPerDay[3]; extern char tsVnodeBakDir[]; diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c index acbfd34d101f8a2d6c238742bc1f1f6ee89d7508..5250d2947e44349378e128eb0112c4ed8830f3ca 100644 --- a/src/common/src/tglobal.c +++ b/src/common/src/tglobal.c @@ -370,16 +370,6 @@ static void doInitGlobalConfig(void) { cfg.unitType = TAOS_CFG_UTYPE_NONE; taosInitConfigOption(cfg); - cfg.option = "logBakDir"; - cfg.ptr = tsLogbakDir; - cfg.valType = TAOS_CFG_VTYPE_DIRECTORY; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_LOG; - cfg.minValue = 0; - cfg.maxValue = 0; - cfg.ptrLength = TSDB_FILENAME_LEN; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosInitConfigOption(cfg); - cfg.option = "scriptDir"; cfg.ptr = tsScriptDir; cfg.valType = TAOS_CFG_VTYPE_DIRECTORY; diff --git a/src/dnode/src/dnodeMain.c b/src/dnode/src/dnodeMain.c index a00124098ae4782fffcd0e5cc714aea8de38cfb4..97e6f2ce6debe7ffc273ca103e3f55576da0eb31 100644 --- a/src/dnode/src/dnodeMain.c +++ b/src/dnode/src/dnodeMain.c @@ -106,11 +106,6 @@ int32_t dnodeInitSystem() { return -1; } - if (dnodeCreateDir(tsLogbakDir) < 0) { - printf("failed to create dir: %s, reason: %s\n", tsLogbakDir, strerror(errno)); - return -1; - } - char temp[TSDB_FILENAME_LEN]; sprintf(temp, "%s/taosdlog", tsLogDir); if (taosInitLog(temp, tsNumOfLogLines, 1) < 0) { diff --git a/src/os/inc/osDir.h b/src/os/inc/osDir.h index e7dc04fd1532660cabfbe407c5a8045f010b2d91..17683743e3ee7ed11350c02e504cce9f379b73d9 100644 --- a/src/os/inc/osDir.h +++ b/src/os/inc/osDir.h @@ -24,6 +24,7 @@ extern "C" { void taosRemoveDir(char *rootDir); int taosMkDir(const char *pathname, mode_t mode); void taosRename(char* oldName, char *newName); +void taosRemoveOldLogFiles(char *rootDir, int32_t keepDays); #ifdef __cplusplus } diff --git a/src/os/src/alpine/alpineEnv.c b/src/os/src/alpine/alpineEnv.c index 972a7ae7f1f890e4894672ece1301b363ba098b7..811d98ad7f8c34851e70ccbd190a13b74d865703 100644 --- a/src/os/src/alpine/alpineEnv.c +++ b/src/os/src/alpine/alpineEnv.c @@ -27,7 +27,6 @@ void osInit() { strcpy(tsMnodeDir, ""); strcpy(tsDataDir, "/var/lib/taos"); strcpy(tsLogDir, "/var/log/taos"); - strcpy(tsLogbakDir, "/var/log/taos/bak"); strcpy(tsScriptDir, "/etc/taos"); strcpy(tsOsName, "Linux"); } \ No newline at end of file diff --git a/src/os/src/darwin/darwinEnv.c b/src/os/src/darwin/darwinEnv.c index 79f01c2459ca7301e8ace0c1e679a3cf1bcbfd75..6adebabec01ae378a4c5f3d82389508334210972 100644 --- a/src/os/src/darwin/darwinEnv.c +++ b/src/os/src/darwin/darwinEnv.c @@ -27,7 +27,6 @@ void osInit() { strcpy(tsMnodeDir, ""); strcpy(tsDataDir, "~/TDengine/data"); strcpy(tsLogDir, "~/TDengine/log"); - strcpy(tsLogbakDir, "~/TDengine/log/bak"); strcpy(tsScriptDir, "~/TDengine/cfg"); strcpy(tsOsName, "Darwin"); } diff --git a/src/os/src/detail/osDir.c b/src/os/src/detail/osDir.c index 7a537cdfead3a15e202b8d7d2bc5d40cff5281bc..2daee85762110398e3a7c2818df1b486778483bb 100644 --- a/src/os/src/detail/osDir.c +++ b/src/os/src/detail/osDir.c @@ -51,11 +51,6 @@ int taosMkDir(const char *path, mode_t mode) { } void taosRename(char* oldName, char *newName) { - if (0 == tsEnableVnodeBak) { - uInfo("vnode backup not enabled"); - return; - } - // if newName in not empty, rename return fail. // the newName must be empty or does not exist if (rename(oldName, newName)) { @@ -65,4 +60,48 @@ void taosRename(char* oldName, char *newName) { } } +void taosRemoveOldLogFiles(char *rootDir, int32_t keepDays) { + DIR *dir = opendir(rootDir); + if (dir == NULL) return; + + int64_t ms = taosGetTimestampMs(); + struct dirent *de = NULL; + + while ((de = readdir(dir)) != NULL) { + if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0) continue; + + char filename[1024]; + snprintf(filename, 1023, "%s/%s", rootDir, de->d_name); + if (de->d_type & DT_DIR) { + continue; + } else { + // struct stat fState; + // if (stat(fname, &fState) < 0) { + // continue; + // } + int32_t len = strlen(filename); + int64_t fileMs = 0; + for (int i = len - 1; i >= 0; ++i) { + if (filename[i] == '.') { + fileMs = atoll(filename + i + 1); + break; + } + } + + if (fileMs <= 0) continue; + int32_t days = (fileMs - ms) / 86400 + 1; + if (days > keepDays) { + (void)remove(filename); + uInfo("file:%s is removed, days:%d keepDays:%d", filename, days, keepDays); + + } else { + uTrace("file:%s won't be removed, days:%d keepDays:%d", filename, days, keepDays); + } + } + } + + closedir(dir); + rmdir(rootDir); +} + #endif diff --git a/src/os/src/linux/linuxEnv.c b/src/os/src/linux/linuxEnv.c index af3af97df2ab816155d8fbe222bdc0f1409536af..14b40a1f1857ca7789829cb64f596ff349b7c997 100644 --- a/src/os/src/linux/linuxEnv.c +++ b/src/os/src/linux/linuxEnv.c @@ -25,7 +25,6 @@ void osInit() { } strcpy(tsDataDir, "/var/lib/power"); strcpy(tsLogDir, "/var/log/power"); - strcpy(tsLogbakDir, "/var/log/power/bak"); strcpy(tsScriptDir, "/etc/power"); #else if (configDir[0] == 0) { @@ -33,7 +32,6 @@ void osInit() { } strcpy(tsDataDir, "/var/lib/taos"); strcpy(tsLogDir, "/var/log/taos"); - strcpy(tsLogbakDir, "/var/log/taos/bak"); strcpy(tsScriptDir, "/etc/taos"); #endif diff --git a/src/os/src/windows/wEnv.c b/src/os/src/windows/wEnv.c index 2a758f31c33683411455aca21e40d5ada244a20b..8110a194904bbbc1166ac57de187de284db34a6b 100644 --- a/src/os/src/windows/wEnv.c +++ b/src/os/src/windows/wEnv.c @@ -30,7 +30,6 @@ void osInit() { strcpy(tsVnodeDir, "C:/PowerDB/data"); strcpy(tsDataDir, "C:/PowerDB/data"); strcpy(tsLogDir, "C:/PowerDB/log"); - strcpy(tsLogbakDir, "C:/PowerDB/log/bak"); strcpy(tsScriptDir, "C:/PowerDB/script"); #else @@ -41,7 +40,6 @@ void osInit() { strcpy(tsVnodeDir, "C:/TDengine/data"); strcpy(tsDataDir, "C:/TDengine/data"); strcpy(tsLogDir, "C:/TDengine/log"); - strcpy(tsLogbakDir, "C:/TDengine/log/bak"); strcpy(tsScriptDir, "C:/TDengine/script"); #endif diff --git a/src/util/src/tlog.c b/src/util/src/tlog.c index ab129b0ad4ce424b30315451fbf08a74be0cfdfb..b027304437dd21055d8922f8a709fd9d184fc2a1 100644 --- a/src/util/src/tlog.c +++ b/src/util/src/tlog.c @@ -69,10 +69,8 @@ float tsAvailLogDirGB = 0; float tsMinimalLogDirGB = 0.1f; #ifdef _TD_POWER_ char tsLogDir[TSDB_FILENAME_LEN] = "/var/log/power"; -char tsLogbakDir[TSDB_FILENAME_LEN] = "/var/log/power/bak"; #else char tsLogDir[TSDB_FILENAME_LEN] = "/var/log/taos"; -char tsLogbakDir[TSDB_FILENAME_LEN] = "/var/log/taos/bak"; #endif static SLogObj tsLogObj = { .fileNum = 1 }; @@ -139,11 +137,25 @@ static void taosUnLockFile(int32_t fd) { } } +static void taosKeepOldLog(char *oldName) { + if (tsLogKeepDays <= 0) return; + + int64_t ms = taosGetTimestampMs(); + char fileName[LOG_FILE_NAME_LEN + 20]; + snprintf(fileName, LOG_FILE_NAME_LEN + 20, "%s.%" PRId64, tsLogObj.logName, ms); + + uInfo("rename log file %s to %s", oldName, fileName); + taosRename(oldName, fileName); + taosRemoveOldLogFiles(tsLogDir, tsLogKeepDays); +} + static void *taosThreadToOpenNewFile(void *param) { - char name[LOG_FILE_NAME_LEN + 20]; + char keepName[LOG_FILE_NAME_LEN + 20]; + sprintf(keepName, "%s.%d", tsLogObj.logName, tsLogObj.flag); tsLogObj.flag ^= 1; tsLogObj.lines = 0; + char name[LOG_FILE_NAME_LEN + 20]; sprintf(name, "%s.%d", tsLogObj.logName, tsLogObj.flag); umask(0); @@ -153,6 +165,7 @@ static void *taosThreadToOpenNewFile(void *param) { uError("open new log file fail! fd:%d reason:%s", fd, strerror(errno)); return NULL; } + taosLockFile(fd); (void)lseek(fd, 0, SEEK_SET); @@ -160,9 +173,11 @@ static void *taosThreadToOpenNewFile(void *param) { tsLogObj.logHandle->fd = fd; tsLogObj.lines = 0; tsLogObj.openInProgress = 0; + taosCloseLogByFd(oldFd); uInfo("new log file is opened!!!"); - taosCloseLogByFd(oldFd); + taosKeepOldLog(keepName); + return NULL; } diff --git a/src/vnode/src/vnodeMain.c b/src/vnode/src/vnodeMain.c index 5a778156ff4fa88a798d260654edf04860d9692b..a463a2c90a7cf440d4e30735d469861d02ce3eac 100644 --- a/src/vnode/src/vnodeMain.c +++ b/src/vnode/src/vnodeMain.c @@ -382,7 +382,13 @@ void vnodeRelease(void *pVnodeRaw) { char newDir[TSDB_FILENAME_LEN] = {0}; sprintf(rootDir, "%s/vnode%d", tsVnodeDir, vgId); sprintf(newDir, "%s/vnode%d", tsVnodeBakDir, vgId); - taosRename(rootDir, newDir); + + if (0 == tsEnableVnodeBak) { + vInfo("vgId:%d, vnode backup not enabled", pVnode->vgId); + } else { + taosRename(rootDir, newDir); + } + taosRemoveDir(rootDir); dnodeSendStatusMsgToMnode(); }