From 5160109b25ccb6754f1f8fc8bfddf96e26086ee7 Mon Sep 17 00:00:00 2001 From: chen-chao666 <1790599142@qq.com> Date: Sat, 12 Oct 2024 16:27:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Ddms=5Finit=E6=97=B6=E8=BF=9E?= =?UTF-8?q?=E7=BB=AD=E5=88=9B=E5=BB=BA=E7=BA=BF=E7=A8=8B=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E4=B8=A4=E4=B8=AA=E7=BA=BF=E7=A8=8B=E5=90=8C=E6=97=B6ss=5Ffi?= =?UTF-8?q?=5Fset=5Fand=5Finit=5Fcontext=E9=80=A0=E6=88=90=E7=9A=84g=5Fins?= =?UTF-8?q?tance.shared=5Ffi=5Fctx=E4=B8=A4=E6=AC=A1=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/utils/misc/guc/guc_storage.cpp | 46 ++++++++++--------- .../process/threadpool/knl_instance.cpp | 4 ++ src/include/knl/knl_instance.h | 3 ++ 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/common/backend/utils/misc/guc/guc_storage.cpp b/src/common/backend/utils/misc/guc/guc_storage.cpp index d88ef70ff..2704afa11 100755 --- a/src/common/backend/utils/misc/guc/guc_storage.cpp +++ b/src/common/backend/utils/misc/guc/guc_storage.cpp @@ -7219,7 +7219,7 @@ static bool check_ss_fi_packet_loss_entries(char** newval, void** extra, GucSour uint32 entry_list[DDES_FI_ENTRY_COUNT_PER_TYPE] = {0}; uint32 count = 0; - if (!g_ss_dms_func.inited) { + if (!g_ss_dms_func.inited || !g_instance.fi_ctx_init_finished) { return true; } @@ -7228,8 +7228,8 @@ static bool check_ss_fi_packet_loss_entries(char** newval, void** extra, GucSour } if (ss_fi_set_entries(DDES_FI_TYPE_PACKET_LOSS, entry_list, count) != DMS_SUCCESS) { - ereport(ERROR, (errmsg("[DMS]set parameter ss_fi_packet_loss_entries fail"))); - return false; + ereport(WARNING, (errmsg("[DMS]set parameter ss_fi_packet_loss_entries fail"))); + return true; } return true; } @@ -7239,7 +7239,7 @@ static bool check_ss_fi_net_latency_entries(char** newval, void** extra, GucSour uint32 entry_list[DDES_FI_ENTRY_COUNT_PER_TYPE] = {0}; uint32 count = 0; - if (!g_ss_dms_func.inited) { + if (!g_ss_dms_func.inited || !g_instance.fi_ctx_init_finished) { return true; } @@ -7248,7 +7248,7 @@ static bool check_ss_fi_net_latency_entries(char** newval, void** extra, GucSour } if (ss_fi_set_entries(DDES_FI_TYPE_NET_LATENCY, entry_list, count) != DMS_SUCCESS) { - ereport(ERROR, (errmsg("[DMS]set parameter ss_fi_net_latency_entries fail"))); + ereport(WARNING, (errmsg("[DMS]set parameter ss_fi_net_latency_entries fail"))); return false; } return true; @@ -7263,7 +7263,7 @@ static bool check_ss_fi_cpu_latency_entries(char** newval, void** extra, GucSour return true; } - if (g_instance.shared_fi_ctx == NULL) { + if (!g_instance.fi_ctx_inited.exchange(true) && g_instance.shared_fi_ctx == NULL) { int32 shared_fi_ctx_size = ss_fi_get_context_size(); if (shared_fi_ctx_size <= 0) { ereport(FATAL, (errmsg("failed to get fi context size"))); @@ -7276,14 +7276,18 @@ static bool check_ss_fi_cpu_latency_entries(char** newval, void** extra, GucSour } ss_fi_set_and_init_context(g_instance.shared_fi_ctx); + g_instance.fi_ctx_init_finished = true; } + if (!g_instance.fi_ctx_init_finished) { + return true; + } if (!parse_ss_fi_entry_list(*newval, entry_list, &count)) { return false; } if (ss_fi_set_entries(DDES_FI_TYPE_NET_LATENCY, entry_list, count) != DMS_SUCCESS) { - ereport(ERROR, (errmsg("[DMS]set parameter ss_fi_net_latency_entries fail"))); + ereport(WARNING, (errmsg("[DMS]set parameter ss_fi_net_latency_entries fail"))); return false; } return true; @@ -7294,7 +7298,7 @@ static bool check_ss_fi_process_fault_entries(char** newval, void** extra, GucSo uint32 entry_list[DDES_FI_ENTRY_COUNT_PER_TYPE] = {0}; uint32 count = 0; - if (!g_ss_dms_func.inited) { + if (!g_ss_dms_func.inited || !g_instance.fi_ctx_init_finished) { return true; } @@ -7303,7 +7307,7 @@ static bool check_ss_fi_process_fault_entries(char** newval, void** extra, GucSo } if (ss_fi_set_entries(DDES_FI_TYPE_PROCESS_FAULT, entry_list, count) != DMS_SUCCESS) { - ereport(ERROR, (errmsg("[DMS]set parameter ss_fi_process_fault_entries fail"))); + ereport(WARNING, (errmsg("[DMS]set parameter ss_fi_process_fault_entries fail"))); return false; } return true; @@ -7314,7 +7318,7 @@ static bool check_ss_fi_custom_fault_entries(char** newval, void** extra, GucSou uint32 entry_list[DDES_FI_ENTRY_COUNT_PER_TYPE] = {0}; uint32 count = 0; - if (!g_ss_dms_func.inited) { + if (!g_ss_dms_func.inited || !g_instance.fi_ctx_init_finished) { return true; } @@ -7323,7 +7327,7 @@ static bool check_ss_fi_custom_fault_entries(char** newval, void** extra, GucSou } if (ss_fi_set_entries(DDES_FI_TYPE_CUSTOM_FAULT, entry_list, count) != DMS_SUCCESS) { - ereport(ERROR, (errmsg("[DMS]set parameter ss_fi_custom_fault_entries fail"))); + ereport(WARNING, (errmsg("[DMS]set parameter ss_fi_custom_fault_entries fail"))); return false; } return true; @@ -7334,12 +7338,12 @@ static bool check_ss_fi_packet_loss_prob(int* newval, void** extra, GucSource so int32 int_val; int_val = *newval; - if (!g_ss_dms_func.inited) { + if (!g_ss_dms_func.inited || !g_instance.fi_ctx_init_finished) { return true; } if (ss_fi_set_entry_value(DDES_FI_TYPE_PACKET_LOSS, (unsigned int)int_val) != DMS_SUCCESS) { - ereport(ERROR, (errmsg("[DMS]set parameter ss_fi_packet_loss_prob fail"))); + ereport(WARNING, (errmsg("[DMS]set parameter ss_fi_packet_loss_prob fail"))); return false; } @@ -7351,12 +7355,12 @@ static bool check_ss_fi_net_latency_ms(int* newval, void** extra, GucSource sour int32 int_val; int_val = *newval; - if (!g_ss_dms_func.inited) { + if (!g_ss_dms_func.inited || !g_instance.fi_ctx_init_finished) { return true; } if (ss_fi_set_entry_value(DDES_FI_TYPE_NET_LATENCY, (unsigned int)int_val) != DMS_SUCCESS) { - ereport(ERROR, (errmsg("[DMS]set parameter ss_fi_net_latency_ms fail"))); + ereport(WARNING, (errmsg("[DMS]set parameter ss_fi_net_latency_ms fail"))); return false; } @@ -7368,12 +7372,12 @@ static bool check_ss_fi_cpu_latency_ms(int* newval, void** extra, GucSource sour int32 int_val; int_val = *newval; - if (!g_ss_dms_func.inited) { + if (!g_ss_dms_func.inited || !g_instance.fi_ctx_init_finished) { return true; } if (ss_fi_set_entry_value(DDES_FI_TYPE_CPU_LATENCY, (unsigned int)int_val) != DMS_SUCCESS) { - ereport(ERROR, (errmsg("[DMS]set parameter ss_fi_cpu_latency_ms fail"))); + ereport(WARNING, (errmsg("[DMS]set parameter ss_fi_cpu_latency_ms fail"))); return false; } @@ -7385,12 +7389,12 @@ static bool check_ss_fi_process_fault_prob(int* newval, void** extra, GucSource int32 int_val; int_val = *newval; - if (!g_ss_dms_func.inited) { + if (!g_ss_dms_func.inited || !g_instance.fi_ctx_init_finished) { return true; } if (ss_fi_set_entry_value(DDES_FI_TYPE_PROCESS_FAULT, (unsigned int)int_val) != DMS_SUCCESS) { - ereport(ERROR, (errmsg("[DMS]set parameter ss_fi_process_fault_prob fail"))); + ereport(WARNING, (errmsg("[DMS]set parameter ss_fi_process_fault_prob fail"))); return false; } @@ -7402,12 +7406,12 @@ static bool check_ss_fi_custom_fault_param(int* newval, void** extra, GucSource int32 int_val; int_val = *newval; - if (!g_ss_dms_func.inited) { + if (!g_ss_dms_func.inited || !g_instance.fi_ctx_init_finished) { return true; } if (ss_fi_set_entry_value(DDES_FI_TYPE_CUSTOM_FAULT, (unsigned int)int_val) != DMS_SUCCESS) { - ereport(ERROR, (errmsg("[DMS]set parameter ss_fi_custom_fault_param fail"))); + ereport(WARNING, (errmsg("[DMS]set parameter ss_fi_custom_fault_param fail"))); return false; } diff --git a/src/gausskernel/process/threadpool/knl_instance.cpp b/src/gausskernel/process/threadpool/knl_instance.cpp index 4fdc38be1..5abd1426d 100755 --- a/src/gausskernel/process/threadpool/knl_instance.cpp +++ b/src/gausskernel/process/threadpool/knl_instance.cpp @@ -1100,6 +1100,10 @@ void knl_instance_init() #ifdef USE_SPQ knl_g_spq_context_init(&g_instance.spq_cxt); #endif +#ifdef USE_ASSERT_CHECKING + g_instance.fi_ctx_inited.store(false); + g_instance.fi_ctx_init_finished = false; +#endif } void add_numa_alloc_info(void* numaAddr, size_t length) diff --git a/src/include/knl/knl_instance.h b/src/include/knl/knl_instance.h index 179f4d71d..4edf53752 100755 --- a/src/include/knl/knl_instance.h +++ b/src/include/knl/knl_instance.h @@ -32,6 +32,7 @@ #define SRC_INCLUDE_KNL_KNL_INSTANCE_H_ #include +#include #include "c.h" #include "datatype/timestamp.h" #include "gs_thread.h" @@ -1456,6 +1457,8 @@ typedef struct knl_instance_context { #endif #ifdef USE_ASSERT_CHECKING void *shared_fi_ctx; + std::atomic fi_ctx_inited; + bool fi_ctx_init_finished; #endif } knl_instance_context;