提交 37922f29 编写于 作者: S Shengliang Guan

TD-1263

上级 e69fbd54
......@@ -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);
......
......@@ -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[];
......
......@@ -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;
......
......@@ -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) {
......
......@@ -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
}
......
......@@ -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
......@@ -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");
}
......@@ -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
......@@ -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
......
......@@ -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
......
......@@ -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;
}
......
......@@ -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();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册