TD-1263
This commit is contained in:
parent
e69fbd54a2
commit
37922f299f
|
@ -94,10 +94,6 @@ void taos_init_imp(void) {
|
||||||
printf("failed to create log dir:%s\n", tsLogDir);
|
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);
|
sprintf(temp, "%s/taoslog", tsLogDir);
|
||||||
if (taosInitLog(temp, tsNumOfLogLines, 10) < 0) {
|
if (taosInitLog(temp, tsNumOfLogLines, 10) < 0) {
|
||||||
printf("failed to open log file in directory:%s\n", tsLogDir);
|
printf("failed to open log file in directory:%s\n", tsLogDir);
|
||||||
|
|
|
@ -126,7 +126,6 @@ extern char tsDnodeDir[];
|
||||||
extern char tsMnodeDir[];
|
extern char tsMnodeDir[];
|
||||||
extern char tsDataDir[];
|
extern char tsDataDir[];
|
||||||
extern char tsLogDir[];
|
extern char tsLogDir[];
|
||||||
extern char tsLogbakDir[];
|
|
||||||
extern char tsScriptDir[];
|
extern char tsScriptDir[];
|
||||||
extern int64_t tsMsPerDay[3];
|
extern int64_t tsMsPerDay[3];
|
||||||
extern char tsVnodeBakDir[];
|
extern char tsVnodeBakDir[];
|
||||||
|
|
|
@ -370,16 +370,6 @@ static void doInitGlobalConfig(void) {
|
||||||
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
||||||
taosInitConfigOption(cfg);
|
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.option = "scriptDir";
|
||||||
cfg.ptr = tsScriptDir;
|
cfg.ptr = tsScriptDir;
|
||||||
cfg.valType = TAOS_CFG_VTYPE_DIRECTORY;
|
cfg.valType = TAOS_CFG_VTYPE_DIRECTORY;
|
||||||
|
|
|
@ -106,11 +106,6 @@ int32_t dnodeInitSystem() {
|
||||||
return -1;
|
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];
|
char temp[TSDB_FILENAME_LEN];
|
||||||
sprintf(temp, "%s/taosdlog", tsLogDir);
|
sprintf(temp, "%s/taosdlog", tsLogDir);
|
||||||
if (taosInitLog(temp, tsNumOfLogLines, 1) < 0) {
|
if (taosInitLog(temp, tsNumOfLogLines, 1) < 0) {
|
||||||
|
|
|
@ -24,6 +24,7 @@ extern "C" {
|
||||||
void taosRemoveDir(char *rootDir);
|
void taosRemoveDir(char *rootDir);
|
||||||
int taosMkDir(const char *pathname, mode_t mode);
|
int taosMkDir(const char *pathname, mode_t mode);
|
||||||
void taosRename(char* oldName, char *newName);
|
void taosRename(char* oldName, char *newName);
|
||||||
|
void taosRemoveOldLogFiles(char *rootDir, int32_t keepDays);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,6 @@ void osInit() {
|
||||||
strcpy(tsMnodeDir, "");
|
strcpy(tsMnodeDir, "");
|
||||||
strcpy(tsDataDir, "/var/lib/taos");
|
strcpy(tsDataDir, "/var/lib/taos");
|
||||||
strcpy(tsLogDir, "/var/log/taos");
|
strcpy(tsLogDir, "/var/log/taos");
|
||||||
strcpy(tsLogbakDir, "/var/log/taos/bak");
|
|
||||||
strcpy(tsScriptDir, "/etc/taos");
|
strcpy(tsScriptDir, "/etc/taos");
|
||||||
strcpy(tsOsName, "Linux");
|
strcpy(tsOsName, "Linux");
|
||||||
}
|
}
|
|
@ -27,7 +27,6 @@ void osInit() {
|
||||||
strcpy(tsMnodeDir, "");
|
strcpy(tsMnodeDir, "");
|
||||||
strcpy(tsDataDir, "~/TDengine/data");
|
strcpy(tsDataDir, "~/TDengine/data");
|
||||||
strcpy(tsLogDir, "~/TDengine/log");
|
strcpy(tsLogDir, "~/TDengine/log");
|
||||||
strcpy(tsLogbakDir, "~/TDengine/log/bak");
|
|
||||||
strcpy(tsScriptDir, "~/TDengine/cfg");
|
strcpy(tsScriptDir, "~/TDengine/cfg");
|
||||||
strcpy(tsOsName, "Darwin");
|
strcpy(tsOsName, "Darwin");
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,11 +51,6 @@ int taosMkDir(const char *path, mode_t mode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void taosRename(char* oldName, char *newName) {
|
void taosRename(char* oldName, char *newName) {
|
||||||
if (0 == tsEnableVnodeBak) {
|
|
||||||
uInfo("vnode backup not enabled");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if newName in not empty, rename return fail.
|
// if newName in not empty, rename return fail.
|
||||||
// the newName must be empty or does not exist
|
// the newName must be empty or does not exist
|
||||||
if (rename(oldName, newName)) {
|
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
|
#endif
|
||||||
|
|
|
@ -25,7 +25,6 @@ void osInit() {
|
||||||
}
|
}
|
||||||
strcpy(tsDataDir, "/var/lib/power");
|
strcpy(tsDataDir, "/var/lib/power");
|
||||||
strcpy(tsLogDir, "/var/log/power");
|
strcpy(tsLogDir, "/var/log/power");
|
||||||
strcpy(tsLogbakDir, "/var/log/power/bak");
|
|
||||||
strcpy(tsScriptDir, "/etc/power");
|
strcpy(tsScriptDir, "/etc/power");
|
||||||
#else
|
#else
|
||||||
if (configDir[0] == 0) {
|
if (configDir[0] == 0) {
|
||||||
|
@ -33,7 +32,6 @@ void osInit() {
|
||||||
}
|
}
|
||||||
strcpy(tsDataDir, "/var/lib/taos");
|
strcpy(tsDataDir, "/var/lib/taos");
|
||||||
strcpy(tsLogDir, "/var/log/taos");
|
strcpy(tsLogDir, "/var/log/taos");
|
||||||
strcpy(tsLogbakDir, "/var/log/taos/bak");
|
|
||||||
strcpy(tsScriptDir, "/etc/taos");
|
strcpy(tsScriptDir, "/etc/taos");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,6 @@ void osInit() {
|
||||||
strcpy(tsVnodeDir, "C:/PowerDB/data");
|
strcpy(tsVnodeDir, "C:/PowerDB/data");
|
||||||
strcpy(tsDataDir, "C:/PowerDB/data");
|
strcpy(tsDataDir, "C:/PowerDB/data");
|
||||||
strcpy(tsLogDir, "C:/PowerDB/log");
|
strcpy(tsLogDir, "C:/PowerDB/log");
|
||||||
strcpy(tsLogbakDir, "C:/PowerDB/log/bak");
|
|
||||||
strcpy(tsScriptDir, "C:/PowerDB/script");
|
strcpy(tsScriptDir, "C:/PowerDB/script");
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -41,7 +40,6 @@ void osInit() {
|
||||||
strcpy(tsVnodeDir, "C:/TDengine/data");
|
strcpy(tsVnodeDir, "C:/TDengine/data");
|
||||||
strcpy(tsDataDir, "C:/TDengine/data");
|
strcpy(tsDataDir, "C:/TDengine/data");
|
||||||
strcpy(tsLogDir, "C:/TDengine/log");
|
strcpy(tsLogDir, "C:/TDengine/log");
|
||||||
strcpy(tsLogbakDir, "C:/TDengine/log/bak");
|
|
||||||
strcpy(tsScriptDir, "C:/TDengine/script");
|
strcpy(tsScriptDir, "C:/TDengine/script");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -69,10 +69,8 @@ float tsAvailLogDirGB = 0;
|
||||||
float tsMinimalLogDirGB = 0.1f;
|
float tsMinimalLogDirGB = 0.1f;
|
||||||
#ifdef _TD_POWER_
|
#ifdef _TD_POWER_
|
||||||
char tsLogDir[TSDB_FILENAME_LEN] = "/var/log/power";
|
char tsLogDir[TSDB_FILENAME_LEN] = "/var/log/power";
|
||||||
char tsLogbakDir[TSDB_FILENAME_LEN] = "/var/log/power/bak";
|
|
||||||
#else
|
#else
|
||||||
char tsLogDir[TSDB_FILENAME_LEN] = "/var/log/taos";
|
char tsLogDir[TSDB_FILENAME_LEN] = "/var/log/taos";
|
||||||
char tsLogbakDir[TSDB_FILENAME_LEN] = "/var/log/taos/bak";
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static SLogObj tsLogObj = { .fileNum = 1 };
|
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) {
|
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.flag ^= 1;
|
||||||
tsLogObj.lines = 0;
|
tsLogObj.lines = 0;
|
||||||
|
char name[LOG_FILE_NAME_LEN + 20];
|
||||||
sprintf(name, "%s.%d", tsLogObj.logName, tsLogObj.flag);
|
sprintf(name, "%s.%d", tsLogObj.logName, tsLogObj.flag);
|
||||||
|
|
||||||
umask(0);
|
umask(0);
|
||||||
|
@ -153,6 +165,7 @@ static void *taosThreadToOpenNewFile(void *param) {
|
||||||
uError("open new log file fail! fd:%d reason:%s", fd, strerror(errno));
|
uError("open new log file fail! fd:%d reason:%s", fd, strerror(errno));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
taosLockFile(fd);
|
taosLockFile(fd);
|
||||||
(void)lseek(fd, 0, SEEK_SET);
|
(void)lseek(fd, 0, SEEK_SET);
|
||||||
|
|
||||||
|
@ -160,9 +173,11 @@ static void *taosThreadToOpenNewFile(void *param) {
|
||||||
tsLogObj.logHandle->fd = fd;
|
tsLogObj.logHandle->fd = fd;
|
||||||
tsLogObj.lines = 0;
|
tsLogObj.lines = 0;
|
||||||
tsLogObj.openInProgress = 0;
|
tsLogObj.openInProgress = 0;
|
||||||
|
taosCloseLogByFd(oldFd);
|
||||||
uInfo("new log file is opened!!!");
|
uInfo("new log file is opened!!!");
|
||||||
|
|
||||||
taosCloseLogByFd(oldFd);
|
taosKeepOldLog(keepName);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -382,7 +382,13 @@ void vnodeRelease(void *pVnodeRaw) {
|
||||||
char newDir[TSDB_FILENAME_LEN] = {0};
|
char newDir[TSDB_FILENAME_LEN] = {0};
|
||||||
sprintf(rootDir, "%s/vnode%d", tsVnodeDir, vgId);
|
sprintf(rootDir, "%s/vnode%d", tsVnodeDir, vgId);
|
||||||
sprintf(newDir, "%s/vnode%d", tsVnodeBakDir, 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);
|
taosRemoveDir(rootDir);
|
||||||
dnodeSendStatusMsgToMnode();
|
dnodeSendStatusMsgToMnode();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue