提交 06b7af06 编写于 作者: S slguan

fix the issue #404

上级 35aa9a95
...@@ -130,6 +130,7 @@ extern "C" { ...@@ -130,6 +130,7 @@ extern "C" {
#define TSDB_CODE_CACHE_BLOCK_TS_DISORDERED 107 // time stamp in cache block is disordered #define TSDB_CODE_CACHE_BLOCK_TS_DISORDERED 107 // time stamp in cache block is disordered
#define TSDB_CODE_FILE_BLOCK_TS_DISORDERED 108 // time stamp in file block is disordered #define TSDB_CODE_FILE_BLOCK_TS_DISORDERED 108 // time stamp in file block is disordered
#define TSDB_CODE_INVALID_COMMIT_LOG 109 // invalid commit log may be caused by insufficient sotrage #define TSDB_CODE_INVALID_COMMIT_LOG 109 // invalid commit log may be caused by insufficient sotrage
#define TSDB_CODE_SERVER_NO_SPACE 110
// message type // message type
#define TSDB_MSG_TYPE_REG 1 #define TSDB_MSG_TYPE_REG 1
......
...@@ -30,6 +30,9 @@ extern int64_t tsOpenMax; ...@@ -30,6 +30,9 @@ extern int64_t tsOpenMax;
extern int64_t tsStreamMax; extern int64_t tsStreamMax;
extern int32_t tsNumOfCores; extern int32_t tsNumOfCores;
extern int32_t tsTotalDiskGB; extern int32_t tsTotalDiskGB;
extern float tsDiskAvailGB;
extern float tsDiskUsedGB;
extern float tsDiskMinimalGB;
extern int32_t tsTotalMemoryMB; extern int32_t tsTotalMemoryMB;
extern int32_t tsVersion; extern int32_t tsVersion;
......
...@@ -27,7 +27,7 @@ bool taosGetSysMemory(float *memoryUsedMB); ...@@ -27,7 +27,7 @@ bool taosGetSysMemory(float *memoryUsedMB);
bool taosGetProcMemory(float *memoryUsedMB); bool taosGetProcMemory(float *memoryUsedMB);
bool taosGetDisk(float *diskUsedGB); bool taosGetDisk();
bool taosGetCpuUsage(float *sysCpuUsage, float *procCpuUsage); bool taosGetCpuUsage(float *sysCpuUsage, float *procCpuUsage);
......
...@@ -25,9 +25,10 @@ ...@@ -25,9 +25,10 @@
#include "ttimer.h" #include "ttimer.h"
#include "tutil.h" #include "tutil.h"
#define SQL_LENGTH 1024 #define SQL_LENGTH 1024
#define LOG_LEN_STR 80 #define LOG_LEN_STR 80
#define IP_LEN_STR 15 #define IP_LEN_STR 15
#define CHECK_INTERVAL 1000
typedef enum { typedef enum {
MONITOR_CMD_CREATE_DB, MONITOR_CMD_CREATE_DB,
...@@ -53,6 +54,7 @@ typedef struct { ...@@ -53,6 +54,7 @@ typedef struct {
int8_t state; int8_t state;
char sql[SQL_LENGTH]; char sql[SQL_LENGTH];
void * initTimer; void * initTimer;
void * diskTimer;
} MonitorConn; } MonitorConn;
MonitorConn *monitor = NULL; MonitorConn *monitor = NULL;
...@@ -69,9 +71,15 @@ void monitorSaveLog(int level, const char *const format, ...); ...@@ -69,9 +71,15 @@ void monitorSaveLog(int level, const char *const format, ...);
void (*monitorCountReqFp)(SCountInfo *info) = NULL; void (*monitorCountReqFp)(SCountInfo *info) = NULL;
void monitorExecuteSQL(char *sql); void monitorExecuteSQL(char *sql);
void monitorCheckDiskUsage(void *para, void *unused) {
taosGetDisk();
taosTmrReset(monitorCheckDiskUsage, CHECK_INTERVAL, NULL, tscTmr, &monitor->diskTimer);
}
int monitorInitSystem() { int monitorInitSystem() {
monitor = (MonitorConn *)malloc(sizeof(MonitorConn)); monitor = (MonitorConn *)malloc(sizeof(MonitorConn));
memset(monitor, 0, sizeof(MonitorConn)); memset(monitor, 0, sizeof(MonitorConn));
taosTmrReset(monitorCheckDiskUsage, CHECK_INTERVAL, NULL, tscTmr, &monitor->diskTimer);
return 0; return 0;
} }
...@@ -265,13 +273,7 @@ int monitorBuildCpuSql(char *sql) { ...@@ -265,13 +273,7 @@ int monitorBuildCpuSql(char *sql) {
// unit is GB // unit is GB
int monitorBuildDiskSql(char *sql) { int monitorBuildDiskSql(char *sql) {
float diskUsedGB = 0; return sprintf(sql, ", %f, %d", tsDiskUsedGB, tsTotalDiskGB);
bool suc = taosGetDisk(&diskUsedGB);
if (!suc) {
monitorError("monitor:%p, get disk info failed.", monitor->conn);
}
return sprintf(sql, ", %f, %d", diskUsedGB, tsTotalDiskGB);
} }
// unit is Kb // unit is Kb
......
...@@ -233,5 +233,6 @@ char *tsError[] = {"success", ...@@ -233,5 +233,6 @@ char *tsError[] = {"success",
"invalid query message", "invalid query message",
"timestamp disordered in cache block", "timestamp disordered in cache block",
"timestamp disordered in file block", "timestamp disordered in file block",
"invalid commit log" "invalid commit log",
"server no disk space",
}; };
...@@ -64,10 +64,7 @@ void mgmtProcessDnodeStatus(void *handle, void *tmrId) { ...@@ -64,10 +64,7 @@ void mgmtProcessDnodeStatus(void *handle, void *tmrId) {
float memoryUsedMB = 0; float memoryUsedMB = 0;
taosGetSysMemory(&memoryUsedMB); taosGetSysMemory(&memoryUsedMB);
pObj->memoryAvailable = tsTotalMemoryMB - memoryUsedMB; pObj->memoryAvailable = tsTotalMemoryMB - memoryUsedMB;
pObj->diskAvailable = tsDiskAvailGB;
float diskUsedGB = 0;
taosGetDisk(&diskUsedGB);
pObj->diskAvailable = tsTotalDiskGB - diskUsedGB;
for (int vnode = 0; vnode < pObj->numOfVnodes; ++vnode) { for (int vnode = 0; vnode < pObj->numOfVnodes; ++vnode) {
SVnodeLoad *pVload = &(pObj->vload[vnode]); SVnodeLoad *pVload = &(pObj->vload[vnode]);
......
...@@ -471,6 +471,12 @@ int vnodeProcessShellSubmitRequest(char *pMsg, int msgLen, SShellObj *pObj) { ...@@ -471,6 +471,12 @@ int vnodeProcessShellSubmitRequest(char *pMsg, int msgLen, SShellObj *pObj) {
goto _submit_over; goto _submit_over;
} }
if (tsDiskAvailGB < tsDiskMinimalGB) {
dError("server disk space remain %.3f GB, need at least %.2f GB, stop writing", tsDiskAvailGB, tsDiskMinimalGB);
code = TSDB_CODE_SERVER_NO_SPACE;
goto _submit_over;
}
pObj->count = pSubmit->numOfSid; // for import pObj->count = pSubmit->numOfSid; // for import
pObj->code = 0; // for import pObj->code = 0; // for import
pObj->numOfTotalPoints = 0; // for import pObj->numOfTotalPoints = 0; // for import
......
...@@ -33,9 +33,12 @@ ...@@ -33,9 +33,12 @@
int64_t tsPageSize; int64_t tsPageSize;
int64_t tsOpenMax; int64_t tsOpenMax;
int64_t tsStreamMax; int64_t tsStreamMax;
int32_t tsNumOfCores; int32_t tsNumOfCores = 1;
int32_t tsTotalDiskGB; int32_t tsTotalDiskGB = 0;
int32_t tsTotalMemoryMB; float tsDiskAvailGB = 0;
float tsDiskUsedGB = 0;
float tsDiskMinimalGB = 0.5;
int32_t tsTotalMemoryMB = 0;
int32_t tsVersion = 0; int32_t tsVersion = 0;
// global, not configurable // global, not configurable
...@@ -733,7 +736,7 @@ int tsCfgDynamicOptions(char *msg) { ...@@ -733,7 +736,7 @@ int tsCfgDynamicOptions(char *msg) {
tsPrintGlobalConfig(); tsPrintGlobalConfig();
return code; return code;
} }
if (strncasecmp(option, "resetQueryCache", 15) == 0) { if (strncasecmp(option, "resetQueryCache", 15) == 0) {
if (taosLogSqlFp) { if (taosLogSqlFp) {
pPrint("the query cache of internal client will reset"); pPrint("the query cache of internal client will reset");
......
...@@ -323,6 +323,10 @@ char *tprefix(char *prefix) { ...@@ -323,6 +323,10 @@ char *tprefix(char *prefix) {
} }
void tprintf(const char *const flags, int dflag, const char *const format, ...) { void tprintf(const char *const flags, int dflag, const char *const format, ...) {
if (tsTotalDiskGB != 0 && tsDiskAvailGB < (tsDiskMinimalGB/2)) {
printf("server disk space remain %.3f GB, stop write log\n", tsDiskAvailGB);
}
va_list argpointer; va_list argpointer;
char buffer[MAX_LOGLINE_SIZE + 10] = {0}; char buffer[MAX_LOGLINE_SIZE + 10] = {0};
int len; int len;
...@@ -369,6 +373,11 @@ void tprintf(const char *const flags, int dflag, const char *const format, ...) ...@@ -369,6 +373,11 @@ void tprintf(const char *const flags, int dflag, const char *const format, ...)
} }
void taosDumpData(unsigned char *msg, int len) { void taosDumpData(unsigned char *msg, int len) {
if (tsTotalDiskGB != 0 && tsDiskAvailGB < (tsDiskMinimalGB/2)) {
printf("server disk space remain %.3f GB, stop write log\n", tsDiskAvailGB);
return;
}
char temp[256]; char temp[256];
int i, pos = 0, c = 0; int i, pos = 0, c = 0;
...@@ -392,6 +401,11 @@ void taosDumpData(unsigned char *msg, int len) { ...@@ -392,6 +401,11 @@ void taosDumpData(unsigned char *msg, int len) {
} }
void taosPrintLongString(const char *const flags, int dflag, const char *const format, ...) { void taosPrintLongString(const char *const flags, int dflag, const char *const format, ...) {
if (tsTotalDiskGB != 0 && tsDiskAvailGB < (tsDiskMinimalGB/2)) {
printf("server disk space remain %.3f GB, stop write log\n", tsDiskAvailGB);
return;
}
va_list argpointer; va_list argpointer;
char buffer[65 * 1024 + 10]; char buffer[65 * 1024 + 10];
int len; int len;
......
...@@ -322,19 +322,19 @@ bool taosGetCpuUsage(float *sysCpuUsage, float *procCpuUsage) { ...@@ -322,19 +322,19 @@ bool taosGetCpuUsage(float *sysCpuUsage, float *procCpuUsage) {
return true; return true;
} }
bool taosGetDisk(float *diskUsedGB) { bool taosGetDisk() {
struct statvfs info; struct statvfs info;
const double unit = 1024 * 1024 * 1024; const double unit = 1024 * 1024 * 1024;
if (statvfs(tsDirectory, &info)) { if (statvfs(tsDirectory, &info)) {
*diskUsedGB = 0; tsDiskUsedGB = 0;
tsTotalDiskGB = 0; tsTotalDiskGB = 0;
return false; return false;
} }
float diskAvail = (float)((double)info.f_bavail * (double)info.f_frsize / unit); tsDiskAvailGB = (float)((double)info.f_bavail * (double)info.f_frsize / unit);
tsTotalDiskGB = (int32_t)((double)info.f_blocks * (double)info.f_frsize / unit); tsTotalDiskGB = (int32_t)((double)info.f_blocks * (double)info.f_frsize / unit);
*diskUsedGB = (float)tsTotalDiskGB - diskAvail; tsDiskUsedGB = (float)tsTotalDiskGB - tsDiskAvailGB;
return true; return true;
} }
...@@ -549,7 +549,7 @@ void taosGetSystemInfo() { ...@@ -549,7 +549,7 @@ void taosGetSystemInfo() {
float tmp1, tmp2; float tmp1, tmp2;
taosGetSysMemory(&tmp1); taosGetSysMemory(&tmp1);
taosGetProcMemory(&tmp2); taosGetProcMemory(&tmp2);
taosGetDisk(&tmp1); taosGetDisk();
taosGetBandSpeed(&tmp1); taosGetBandSpeed(&tmp1);
taosGetCpuUsage(&tmp1, &tmp2); taosGetCpuUsage(&tmp1, &tmp2);
taosGetProcIO(&tmp1, &tmp2); taosGetProcIO(&tmp1, &tmp2);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册