From 8771aef0d4d3af4ef54d0b9db3e363dcde15dcbf Mon Sep 17 00:00:00 2001 From: zhang_xubo <2578876417@qq.com> Date: Tue, 18 Jan 2022 20:16:59 +0800 Subject: [PATCH] check db process before gstrace start --- src/include/gstrace/gstrace_infra_int.h | 1 + src/lib/gstrace/common/gstrace_infra.cpp | 30 ++++++++++++++++++++++++ src/lib/gstrace/tool/gstrace_tool.cpp | 1 + 3 files changed, 32 insertions(+) diff --git a/src/include/gstrace/gstrace_infra_int.h b/src/include/gstrace/gstrace_infra_int.h index 2d927760d..c3928235a 100644 --- a/src/include/gstrace/gstrace_infra_int.h +++ b/src/include/gstrace/gstrace_infra_int.h @@ -94,6 +94,7 @@ typedef enum trace_msg_code { TRACE_SEQ_ERR, TRACE_VERSION_ERR, TRACE_CONFIG_SIZE_ERR, + TRACE_PROCESS_NOT_EXIST, TRACE_MSG_MAX, } trace_msg_code; diff --git a/src/lib/gstrace/common/gstrace_infra.cpp b/src/lib/gstrace/common/gstrace_infra.cpp index b198cdc6c..993ff8cb2 100644 --- a/src/lib/gstrace/common/gstrace_infra.cpp +++ b/src/lib/gstrace/common/gstrace_infra.cpp @@ -368,6 +368,31 @@ static void detachTraceBufferIfDisabled() pTrcCxt->pTrcCfg->bEnabled = false; } +static bool checkProcess(int port) +{ + int ret; + bool procexist = false; + char checkcmd[MAX_PATH_LEN] = {0}; + char buf[MAX_PATH_LEN]; + FILE* fp = NULL; + + ret = snprintf_s(checkcmd, MAX_PATH_LEN, MAX_PATH_LEN - 1, "lsof -i:%d", port); + securec_check_ss_c(ret, "\0", "\0"); + + fp = popen(checkcmd, "r"); + if (fp == NULL) { + printf("popen failed. could not query database process.\n"); + return procexist; + } + while (fgets(buf, sizeof(buf), fp) != NULL) { + procexist = true; + break; + } + pclose(fp); + + return procexist; +} + void gstrace_destory(int code, void *arg) { trace_context* pTrcCxt = getTraceContext(); @@ -549,6 +574,11 @@ trace_msg_code gstrace_start(int key, const char* mask, uint64_t bufferSize, con return TRACE_ALREADY_START; } + /* check if database process exist. */ + if (!checkProcess(key)) { + return TRACE_PROCESS_NOT_EXIST; + } + /* set the mask if it's passed in */ if (mask != NULL) { trace_mask st_mask = {0}; diff --git a/src/lib/gstrace/tool/gstrace_tool.cpp b/src/lib/gstrace/tool/gstrace_tool.cpp index c5ebe8a04..1388c9660 100644 --- a/src/lib/gstrace/tool/gstrace_tool.cpp +++ b/src/lib/gstrace/tool/gstrace_tool.cpp @@ -1468,6 +1468,7 @@ trace_msg_t trace_message[] = { {TRACE_SEQ_ERR, "Trace sequence check failed."}, {TRACE_VERSION_ERR, "trace version not match."}, {TRACE_CONFIG_SIZE_ERR, "invalid config size in trace file."}, + {TRACE_PROCESS_NOT_EXIST, "The database process is not exist."}, {TRACE_MSG_MAX, "Failed!"}, };