From 85d03f72859be752c873f135fc54dcad4ba81c83 Mon Sep 17 00:00:00 2001 From: dongning12 Date: Thu, 25 Jan 2024 15:36:11 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E8=B5=84=E6=BA=90=E6=B1=A0=E5=8C=96?= =?UTF-8?q?=E3=80=91=E3=80=90bugfix=E3=80=91=E3=80=90MES=20worker=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E6=B1=A0=E5=8C=96=E3=80=91=E8=A7=A3=E5=86=B3CBGetHand?= =?UTF-8?q?le=E4=BA=A7=E7=94=9F=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/ddes/adapter/ss_dms_callback.cpp | 8 ++++---- src/gausskernel/ddes/adapter/ss_init.cpp | 4 +++- src/gausskernel/process/threadpool/knl_instance.cpp | 1 + src/gausskernel/storage/lmgr/proc.cpp | 1 + src/include/ddes/dms/ss_dms_callback.h | 1 + 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp index d557b2fda..c1154173e 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp @@ -969,7 +969,7 @@ static void *CBGetHandle(unsigned int *db_handle_index, dms_session_type_e sessi int index = fs_cxt->quickFetchIndex; fs_cxt->fake_sessions[index] = true; fs_cxt->quickFetchIndex++; - if (fs_cxt->quickFetchIndex >= NUM_DMS_CALLBACK_PROCS) { + if (fs_cxt->quickFetchIndex >= fs_cxt->fake_session_cnt) { fs_cxt->quickFetchIndex = 0; } SpinLockRelease(&fs_cxt->lock); @@ -980,8 +980,8 @@ static void *CBGetHandle(unsigned int *db_handle_index, dms_session_type_e sessi int start_index = fs_cxt->quickFetchIndex; int cur_index = 0; bool found = false; - for (int i = 0; i < NUM_DMS_CALLBACK_PROCS; i++) { - cur_index = (start_index + i) % NUM_DMS_CALLBACK_PROCS; + for (int i = 0; i < fs_cxt->fake_session_cnt; i++) { + cur_index = (start_index + i) % fs_cxt->fake_session_cnt; if (!fs_cxt->fake_sessions[cur_index]) { found = true; break; @@ -994,7 +994,7 @@ static void *CBGetHandle(unsigned int *db_handle_index, dms_session_type_e sessi } fs_cxt->quickFetchIndex = cur_index + 1; - if (fs_cxt->quickFetchIndex >= NUM_DMS_CALLBACK_PROCS) { + if (fs_cxt->quickFetchIndex >= fs_cxt->fake_session_cnt) { fs_cxt->quickFetchIndex = 0; } SpinLockRelease(&fs_cxt->lock); diff --git a/src/gausskernel/ddes/adapter/ss_init.cpp b/src/gausskernel/ddes/adapter/ss_init.cpp index 51177ef49..7d4bd0409 100644 --- a/src/gausskernel/ddes/adapter/ss_init.cpp +++ b/src/gausskernel/ddes/adapter/ss_init.cpp @@ -368,8 +368,10 @@ static void SetWorkThreadpoolConfig(dms_profile_t *profile) return; } + char* replStr = NULL; + replStr = pstrdup(attr); + profile->mes_task_worker_max_cnt = (unsigned int)pg_strtoint32(replStr); profile->enable_mes_task_threadpool = true; - profile->mes_task_worker_max_cnt = g_instance.attr.attr_storage.dms_attr.work_thread_pool_max_cnt; } static void setDMSProfile(dms_profile_t* profile) diff --git a/src/gausskernel/process/threadpool/knl_instance.cpp b/src/gausskernel/process/threadpool/knl_instance.cpp index 05d905ce5..82ba38c60 100755 --- a/src/gausskernel/process/threadpool/knl_instance.cpp +++ b/src/gausskernel/process/threadpool/knl_instance.cpp @@ -242,6 +242,7 @@ static void knl_g_dms_init(knl_g_dms_context *dms_cxt) ss_fake_seesion_context_t *fs_cxt = &g_instance.dms_cxt.SSFakeSessionCxt; SpinLockInit(&fs_cxt->lock); fs_cxt->fake_sessions = NULL; + fs_cxt->fake_session_cnt = 0; fs_cxt->quickFetchIndex = 0; fs_cxt->session_start = 0; } diff --git a/src/gausskernel/storage/lmgr/proc.cpp b/src/gausskernel/storage/lmgr/proc.cpp index 8c00d8cf4..4ff719c5c 100755 --- a/src/gausskernel/storage/lmgr/proc.cpp +++ b/src/gausskernel/storage/lmgr/proc.cpp @@ -439,6 +439,7 @@ void InitProcGlobal(void) size_t size = NUM_DMS_CALLBACK_PROCS * sizeof(bool); g_instance.dms_cxt.SSFakeSessionCxt.fake_sessions = (bool*)CACHELINEALIGN(palloc0(size + PG_CACHE_LINE_SIZE)); + g_instance.dms_cxt.SSFakeSessionCxt.fake_session_cnt = NUM_DMS_CALLBACK_PROCS; } } else if (i < g_instance.shmem_cxt.MaxConnections + thread_pool_stream_proc_num + AUXILIARY_BACKENDS + g_instance.attr.attr_sql.job_queue_processes + 1 + NUM_DCF_CALLBACK_PROCS + NUM_CMAGENT_PROCS + \ diff --git a/src/include/ddes/dms/ss_dms_callback.h b/src/include/ddes/dms/ss_dms_callback.h index 9f426fa02..495f5cc0e 100644 --- a/src/include/ddes/dms/ss_dms_callback.h +++ b/src/include/ddes/dms/ss_dms_callback.h @@ -36,6 +36,7 @@ typedef struct st_ss_fake_seesion_context { slock_t lock; bool *fake_sessions; + uint32 fake_session_cnt; uint32 quickFetchIndex; uint32 session_start; } ss_fake_seesion_context_t;